use super::*; use std::mem; #[test] fn test_loading_atoi() { if cfg!(windows) { return } // The C library does not need to be loaded since it is already linked in let lib = match DynamicLibrary::open(None) { Err(error) => panic!("Could not load self as module: {}", error), Ok(lib) => lib }; let atoi: extern fn(*const libc::c_char) -> libc::c_int = unsafe { match lib.symbol("atoi") { Err(error) => panic!("Could not load function atoi: {}", error), Ok(atoi) => mem::transmute::<*mut u8, _>(atoi) } }; let argument = CString::new("1383428980").unwrap(); let expected_result = 0x52757374; let result = atoi(argument.as_ptr()); if result != expected_result { panic!("atoi({:?}) != {} but equaled {} instead", argument, expected_result, result) } } #[test] fn test_errors_do_not_crash() { use std::path::Path; if !cfg!(unix) { return } // Open /dev/null as a library to get an error, and make sure // that only causes an error, and not a crash. let path = Path::new("/dev/null"); match DynamicLibrary::open(Some(&path)) { Err(_) => {} Ok(_) => panic!("Successfully opened the empty library.") } }