Skip to content

Commit d837e04

Browse files
Paul LancasterHalidOdat
andauthored
Number constants (#420)
Co-authored-by: HalidOdat <halidodat@gmail.com>
1 parent d42e413 commit d837e04

File tree

2 files changed

+42
-1
lines changed

2 files changed

+42
-1
lines changed

boa/src/builtins/number/mod.rs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -402,7 +402,20 @@ impl Number {
402402
make_builtin_fn(Self::to_string, "toString", &prototype, 1);
403403
make_builtin_fn(Self::value_of, "valueOf", &prototype, 0);
404404

405-
make_constructor_fn("Number", 1, Self::make_number, global, prototype, true)
405+
let number = make_constructor_fn("Number", 1, Self::make_number, global, prototype, true);
406+
407+
// Constants from:
408+
// https://tc39.es/ecma262/#sec-properties-of-the-number-constructor
409+
number.set_field("EPSILON", Value::from(std::f64::EPSILON));
410+
number.set_field("MAX_SAFE_INTEGER", Value::from(9_007_199_254_740_991_f64));
411+
number.set_field("MIN_SAFE_INTEGER", Value::from(-9_007_199_254_740_991_f64));
412+
number.set_field("MAX_VALUE", Value::from(std::f64::MAX));
413+
number.set_field("MIN_VALUE", Value::from(std::f64::MIN));
414+
number.set_field("NEGATIVE_INFINITY", Value::from(f64::NEG_INFINITY));
415+
number.set_field("POSITIVE_INFINITY", Value::from(f64::INFINITY));
416+
number.set_field("NaN", Value::from(f64::NAN));
417+
418+
number
406419
}
407420

408421
/// Initialise the `Number` object on the global object.

boa/src/builtins/number/tests.rs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -442,3 +442,31 @@ fn from_bigint() {
442442
assert_eq!(&forward(&mut engine, "Number(100000n)"), "100000",);
443443
assert_eq!(&forward(&mut engine, "Number(1n << 1240n)"), "Infinity",);
444444
}
445+
446+
#[test]
447+
fn number_constants() {
448+
let realm = Realm::create();
449+
let mut engine = Interpreter::new(realm);
450+
451+
assert!(!forward_val(&mut engine, "Number.EPSILON")
452+
.unwrap()
453+
.is_null_or_undefined());
454+
assert!(!forward_val(&mut engine, "Number.MAX_SAFE_INTEGER")
455+
.unwrap()
456+
.is_null_or_undefined());
457+
assert!(!forward_val(&mut engine, "Number.MIN_SAFE_INTEGER")
458+
.unwrap()
459+
.is_null_or_undefined());
460+
assert!(!forward_val(&mut engine, "Number.MAX_VALUE")
461+
.unwrap()
462+
.is_null_or_undefined());
463+
assert!(!forward_val(&mut engine, "Number.MIN_VALUE")
464+
.unwrap()
465+
.is_null_or_undefined());
466+
assert!(!forward_val(&mut engine, "Number.NEGATIVE_INFINITY")
467+
.unwrap()
468+
.is_null_or_undefined());
469+
assert!(!forward_val(&mut engine, "Number.POSITIVE_INFINITY")
470+
.unwrap()
471+
.is_null_or_undefined());
472+
}

0 commit comments

Comments
 (0)