fix(ecmascript): incorrect to_int_32 value for Infinity (#8144)

https://tc39.es/ecma262/#sec-toint32
Infinity should return `0` when passed to `ToInt32` abstract operation.

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
This commit is contained in:
翠 / green 2024-12-27 22:48:25 +09:00 committed by GitHub
parent 6615e1ea93
commit 74572de625
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 8 additions and 3 deletions

View file

@ -56,6 +56,11 @@ impl ToInt32 for f64 {
let number = *self;
// NOTE: this also matches with negative zero
if !number.is_finite() || number == 0.0 {
return 0;
}
if number.is_finite() && number <= f64::from(i32::MAX) && number >= f64::from(i32::MIN) {
let i = number as i32;
if f64::from(i) == number {

View file

@ -1545,9 +1545,9 @@ mod test {
#[test]
fn test_fold_left_child_op() {
test_same("x & infinity & 2"); // FIXME: want x & 0
test_same("x - infinity - 2"); // FIXME: want "x-infinity"
test_same("x - 1 + infinity");
test("x & Infinity & 2", "x & 0");
test_same("x - Infinity - 2"); // FIXME: want "x-Infinity"
test_same("x - 1 + Infinity");
test_same("x - 2 + 1");
test_same("x - 2 + 3");
test_same("1 + x - 2 + 1");