unsafe extern "C" { fn CFNumberCreate(allocator: Object, kind: isize, value: Object) -> Object; } use super::*; #[test] fn native_values_are_type_checked_and_numbers_must_be_exact_and_nonnegative() { assert!(Owned::new(std::ptr::null()).is_none()); unsafe { assert_eq!(number(std::ptr::null()), None); let text = Owned::string(c"27").unwrap(); assert_eq!(number(text.0), None); for value in [-1_i64, 0, 100] { let object = Owned::new(CFNumberCreate( std::ptr::null(), 4, (&value as *const i64).cast(), )) .unwrap(); assert_eq!(number(object.0), u64::try_from(value).ok()); } let fraction = 1.5_f64; let object = Owned::new(CFNumberCreate( std::ptr::null(), 6, (&fraction as *const f64).cast(), )) .unwrap(); assert_eq!(number(object.0), None); } }