use simple_update_in::Value;
#[test]
fn same_string_is_equal() {
assert!(Value::String("abc".into()).same_value(&Value::String("abc".into())));
}
#[test]
fn nan_equals_nan() {
assert!(Value::Number(f64::NAN).same_value(&Value::Number(f64::NAN)));
}
#[test]
fn nan_equals_nan_across_bit_patterns() {
let a = Value::Number(f64::NAN);
let b = Value::Number(-f64::NAN);
assert!(f64::NAN.to_bits() != (-f64::NAN).to_bits());
assert!(a.same_value(&b));
}
#[test]
fn zero_and_negative_zero_differ() {
assert!(!Value::Number(0.0).same_value(&Value::Number(-0.0)));
}
#[test]
fn equal_numbers_are_equal() {
assert!(Value::Number(42.0).same_value(&Value::Number(42.0)));
}
#[test]
fn different_types_are_not_equal() {
assert!(!Value::Number(1.0).same_value(&Value::String("1".into())));
assert!(!Value::Null.same_value(&Value::Undefined));
}
#[test]
fn distinct_arrays_are_not_same_value() {
let a = Value::array(vec![Value::Number(1.0)]);
let b = Value::array(vec![Value::Number(1.0)]);
assert!(!a.same_value(&b));
assert!(a.same_value(&a.clone()));
}