mirror of
https://github.com/pjh456/OxideJS.git
synced 2026-10-24 02:31:13 +08:00
66 lines
1.6 KiB
Rust
66 lines
1.6 KiB
Rust
use oxide_runtime_api::to_number;
|
|
use oxide_types::value::JsValue;
|
|
|
|
#[test]
|
|
fn is_nan_nan_returns_true() {
|
|
assert!(to_number(JsValue::float(f64::NAN)).is_nan());
|
|
}
|
|
|
|
#[test]
|
|
fn is_nan_number_123_returns_false() {
|
|
assert!(!to_number(JsValue::int(123)).is_nan());
|
|
}
|
|
|
|
#[test]
|
|
fn is_nan_undefined_returns_true() {
|
|
assert!(to_number(JsValue::undefined()).is_nan());
|
|
}
|
|
|
|
#[test]
|
|
fn is_finite_number_42_returns_true() {
|
|
assert!(to_number(JsValue::int(42)).is_finite());
|
|
}
|
|
|
|
#[test]
|
|
fn is_finite_infinity_returns_false() {
|
|
assert!(!to_number(JsValue::float(f64::INFINITY)).is_finite());
|
|
}
|
|
|
|
#[test]
|
|
fn is_integer_non_number_float_nan() {
|
|
let val = JsValue::undefined();
|
|
assert!(!val.is_int() && !val.is_double());
|
|
}
|
|
|
|
#[test]
|
|
fn is_integer_int_42() {
|
|
let val = JsValue::int(42);
|
|
assert!(val.is_int());
|
|
let n = to_number(val);
|
|
assert!(n.trunc() == n && n.is_finite());
|
|
}
|
|
|
|
#[test]
|
|
fn is_integer_double_fractional() {
|
|
let val = JsValue::float(42.5);
|
|
assert!(val.is_double());
|
|
let n = to_number(val);
|
|
assert!(!(n.trunc() == n && n.is_finite()));
|
|
}
|
|
|
|
#[test]
|
|
fn is_safe_integer_max_value() {
|
|
let val = JsValue::float(9007199254740991f64);
|
|
let n = to_number(val);
|
|
assert!(n.trunc() == n && n.is_finite());
|
|
assert!(n >= -9007199254740991i64 as f64 && n <= 9007199254740991i64 as f64);
|
|
}
|
|
|
|
#[test]
|
|
fn is_safe_integer_overflow() {
|
|
let val = JsValue::float(9007199254740992f64);
|
|
let n = to_number(val);
|
|
assert!(n.trunc() == n && n.is_finite());
|
|
assert!(!(n >= -9007199254740991i64 as f64 && n <= 9007199254740991i64 as f64));
|
|
}
|