#[test] #[cfg(all(target_os = "linux", target_env = "gnu"))] fn test_glibc_version() { // This mostly just tests that the weak linkage doesn't panic wildly... super::glibc_version(); } #[test] #[cfg(all(target_os = "linux", target_env = "gnu"))] fn test_parse_glibc_version() { let cases = [ ("0.0", Some((0, 0))), ("01.+2", Some((1, 2))), ("3.4.5.six", Some((3, 4))), ("1", None), ("1.-2", None), ("1.foo", None), ("foo.1", None), ]; for &(version_str, parsed) in cases.iter() { assert_eq!(parsed, super::parse_glibc_version(version_str)); } } // Smoke check `confstr`, do it for several hint values, to ensure our resizing // logic is correct. #[test] #[cfg(all(target_vendor = "apple", not(miri)))] fn test_confstr() { for key in [libc::_CS_DARWIN_USER_TEMP_DIR, libc::_CS_PATH] { let value_nohint = super::confstr(key, None).unwrap_or_else(|e| { panic!("confstr({key}, None) failed: {e:?}"); }); let end = (value_nohint.len() + 1) * 2; for hint in 0..end { assert_eq!( super::confstr(key, Some(hint)).as_deref().ok(), Some(&*value_nohint), "confstr({key}, Some({hint})) failed", ); } } // Smoke check that we don't loop forever or something if the input was not valid. for hint in [None, Some(0), Some(1)] { let hopefully_invalid = 123456789_i32; assert!(super::confstr(hopefully_invalid, hint).is_err()); } }