feat: Temporal.PlainTime equals/compare 比较语义
This commit is contained in:
@@ -624,7 +624,10 @@ pub fn bind_temporal(core: &Arc<KernelCore>, session: &KernelSession, global: &m
|
||||
world,
|
||||
plain_time_ctor,
|
||||
core,
|
||||
&[("from", oxide_builtins::temporal::plain_time_from::<crate::vm::Vm> as *const (), 1)],
|
||||
&[
|
||||
("from", oxide_builtins::temporal::plain_time_from::<crate::vm::Vm> as *const (), 1),
|
||||
("compare", oxide_builtins::temporal::plain_time_compare::<crate::vm::Vm> as *const (), 2),
|
||||
],
|
||||
);
|
||||
|
||||
let plain_time_proto_ptr = world.plain_time_proto.as_ptr() as *mut JsObject;
|
||||
@@ -688,6 +691,7 @@ pub fn bind_temporal(core: &Arc<KernelCore>, session: &KernelSession, global: &m
|
||||
0,
|
||||
),
|
||||
("valueOf", oxide_builtins::temporal::plain_time_value_of::<crate::vm::Vm> as *const (), 0),
|
||||
("equals", oxide_builtins::temporal::plain_time_equals::<crate::vm::Vm> as *const (), 1),
|
||||
],
|
||||
);
|
||||
bind_well_known_data_property(
|
||||
|
||||
@@ -617,6 +617,57 @@ fn plain_time_range_validation() {
|
||||
assert_eq!(str_val(&vm, r), "RangeError");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn plain_time_equals_same_and_different_fields() {
|
||||
let mut vm = Vm::new();
|
||||
let r = eval(&mut vm, "new Temporal.PlainTime(12, 30, 5).equals(new Temporal.PlainTime(12, 30, 5))").unwrap();
|
||||
assert!(r.as_bool());
|
||||
let r = eval(&mut vm, "new Temporal.PlainTime(12, 30, 5).equals(new Temporal.PlainTime(12, 30, 6))").unwrap();
|
||||
assert!(!r.as_bool());
|
||||
let r = eval(&mut vm, "new Temporal.PlainTime(12, 30, 5).equals('12:30:05')").unwrap();
|
||||
assert!(r.as_bool());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn plain_time_equals_invalid_argument_throws() {
|
||||
let mut vm = Vm::new();
|
||||
let r = eval(&mut vm, "try { new Temporal.PlainTime(12).equals(42) } catch (e) { e.constructor.name }").unwrap();
|
||||
assert_eq!(str_val(&vm, r), "TypeError");
|
||||
let r = eval(
|
||||
&mut vm,
|
||||
"try { Temporal.PlainTime.prototype.equals.call({}) } catch (e) { e.constructor.name }",
|
||||
)
|
||||
.unwrap();
|
||||
assert_eq!(str_val(&vm, r), "TypeError");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn plain_time_compare_epoch_order() {
|
||||
let mut vm = Vm::new();
|
||||
assert_eq!(
|
||||
num(
|
||||
&mut vm,
|
||||
"Temporal.PlainTime.compare(new Temporal.PlainTime(12, 30), new Temporal.PlainTime(13, 30))"
|
||||
),
|
||||
-1.0
|
||||
);
|
||||
assert_eq!(
|
||||
num(
|
||||
&mut vm,
|
||||
"Temporal.PlainTime.compare(new Temporal.PlainTime(12, 30), new Temporal.PlainTime(12, 30))"
|
||||
),
|
||||
0.0
|
||||
);
|
||||
assert_eq!(
|
||||
num(
|
||||
&mut vm,
|
||||
"Temporal.PlainTime.compare(new Temporal.PlainTime(13, 30), new Temporal.PlainTime(12, 30))"
|
||||
),
|
||||
1.0
|
||||
);
|
||||
assert_eq!(num(&mut vm, "Temporal.PlainTime.compare('23:59', '00:00')"), 1.0);
|
||||
}
|
||||
|
||||
// -- Temporal.PlainDateTime --
|
||||
|
||||
#[test]
|
||||
|
||||
Reference in New Issue
Block a user