33 lines
978 B
Rust
33 lines
978 B
Rust
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);
|
|
}
|
|
}
|