diff --git a/test/built-ins/Array/prototype/join/number-elements.js b/test/built-ins/Array/prototype/join/number-elements.js new file mode 100644 index 00000000000..7a8c10d3c6a --- /dev/null +++ b/test/built-ins/Array/prototype/join/number-elements.js @@ -0,0 +1,97 @@ +// Copyright (C) 2026 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +esid: sec-array.prototype.join +description: > + Number elements are joined correctly, including digit-count and 32-bit + boundaries, non-integers, and very large and small values +---*/ + +var cases = [ + [0, "0"], + [1, "1"], + [-1, "-1"], + [2147483647, "2147483647"], + [-2147483647, "-2147483647"], + [-2147483648, "-2147483648"], + [2147483648, "2147483648"], + [-2147483649, "-2147483649"], + [4294967295, "4294967295"], + [-4294967295, "-4294967295"], + [4294967296, "4294967296"], + [-4294967296, "-4294967296"], + [9007199254740991, "9007199254740991"], + [-9007199254740991, "-9007199254740991"], + [9007199254740992, "9007199254740992"], + [100000000000000000000, "100000000000000000000"], + [999999999999999900000, "999999999999999900000"], + [9, "9"], + [10, "10"], + [99, "99"], + [100, "100"], + [999, "999"], + [1000, "1000"], + [9999, "9999"], + [10000, "10000"], + [99999, "99999"], + [100000, "100000"], + [999999, "999999"], + [1000000, "1000000"], + [9999999, "9999999"], + [10000000, "10000000"], + [99999999, "99999999"], + [100000000, "100000000"], + [999999999, "999999999"], + [1000000000, "1000000000"], + [9999999999, "9999999999"], + [10000000000, "10000000000"], + [99999999999, "99999999999"], + [100000000000, "100000000000"], + [999999999999, "999999999999"], + [1000000000000, "1000000000000"], + [9999999999999, "9999999999999"], + [10000000000000, "10000000000000"], + [99999999999999, "99999999999999"], + [100000000000000, "100000000000000"], + [999999999999999, "999999999999999"], + [-0, "0"], + [0.1, "0.1"], + [-0.1, "-0.1"], + [1.5, "1.5"], + [-1.5, "-1.5"], + [0.1 + 0.2, "0.30000000000000004"], + [123456789.125, "123456789.125"], + [2147483647.5, "2147483647.5"], + [-2147483648.5, "-2147483648.5"], + [0.000001, "0.000001"], + [0.000001234, "0.000001234"], + [1e-7, "1e-7"], + [-1e-7, "-1e-7"], + [1.25e-7, "1.25e-7"], + [123e-20, "1.23e-18"], + [1e21, "1e+21"], + [-1e21, "-1e+21"], + [1.5e300, "1.5e+300"], + [5e-324, "5e-324"], + [-5e-324, "-5e-324"], + [2.2250738585072014e-308, "2.2250738585072014e-308"], + [-2.2250738585072014e-308, "-2.2250738585072014e-308"], + [1.7976931348623157e308, "1.7976931348623157e+308"], + [-1.7976931348623157e308, "-1.7976931348623157e+308"], + [NaN, "NaN"], + [Infinity, "Infinity"], + [-Infinity, "-Infinity"], +]; + +for (var i = 0; i < cases.length; i++) { + var value = cases[i][0]; + var expected = cases[i][1]; + + assert.sameValue([value].join(), expected, "single element: " + expected); + assert.sameValue([value, value].join(), expected + "," + expected, + "default separator: " + expected); + assert.sameValue([value, value].join(""), expected + expected, + "empty separator: " + expected); + assert.sameValue([value, value].join("—"), expected + "—" + expected, + "non-Latin-1 separator: " + expected); +} diff --git a/test/built-ins/JSON/stringify/value-number.js b/test/built-ins/JSON/stringify/value-number.js new file mode 100644 index 00000000000..5dab3d8061a --- /dev/null +++ b/test/built-ins/JSON/stringify/value-number.js @@ -0,0 +1,96 @@ +// Copyright (C) 2026 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +esid: sec-json.stringify +description: > + Number values are serialized correctly, including digit-count and + 32-bit boundaries, non-integers, and very large and small values +---*/ + +var cases = [ + [0, "0"], + [1, "1"], + [-1, "-1"], + [2147483647, "2147483647"], + [-2147483647, "-2147483647"], + [-2147483648, "-2147483648"], + [2147483648, "2147483648"], + [-2147483649, "-2147483649"], + [4294967295, "4294967295"], + [-4294967295, "-4294967295"], + [4294967296, "4294967296"], + [-4294967296, "-4294967296"], + [9007199254740991, "9007199254740991"], + [-9007199254740991, "-9007199254740991"], + [9007199254740992, "9007199254740992"], + [100000000000000000000, "100000000000000000000"], + [999999999999999900000, "999999999999999900000"], + [9, "9"], + [10, "10"], + [99, "99"], + [100, "100"], + [999, "999"], + [1000, "1000"], + [9999, "9999"], + [10000, "10000"], + [99999, "99999"], + [100000, "100000"], + [999999, "999999"], + [1000000, "1000000"], + [9999999, "9999999"], + [10000000, "10000000"], + [99999999, "99999999"], + [100000000, "100000000"], + [999999999, "999999999"], + [1000000000, "1000000000"], + [9999999999, "9999999999"], + [10000000000, "10000000000"], + [99999999999, "99999999999"], + [100000000000, "100000000000"], + [999999999999, "999999999999"], + [1000000000000, "1000000000000"], + [9999999999999, "9999999999999"], + [10000000000000, "10000000000000"], + [99999999999999, "99999999999999"], + [100000000000000, "100000000000000"], + [999999999999999, "999999999999999"], + [0.1, "0.1"], + [-0.1, "-0.1"], + [1.5, "1.5"], + [-1.5, "-1.5"], + [0.1 + 0.2, "0.30000000000000004"], + [123456789.125, "123456789.125"], + [2147483647.5, "2147483647.5"], + [-2147483648.5, "-2147483648.5"], + [0.000001, "0.000001"], + [0.000001234, "0.000001234"], + [1e-7, "1e-7"], + [-1e-7, "-1e-7"], + [1.25e-7, "1.25e-7"], + [123e-20, "1.23e-18"], + [1e21, "1e+21"], + [-1e21, "-1e+21"], + [1.5e300, "1.5e+300"], + [5e-324, "5e-324"], + [-5e-324, "-5e-324"], + [2.2250738585072014e-308, "2.2250738585072014e-308"], + [-2.2250738585072014e-308, "-2.2250738585072014e-308"], + [1.7976931348623157e308, "1.7976931348623157e+308"], + [-1.7976931348623157e308, "-1.7976931348623157e+308"], +]; + +for (var i = 0; i < cases.length; i++) { + var value = cases[i][0]; + var expected = cases[i][1]; + + assert.sameValue(JSON.stringify(value), expected, "top level: " + expected); + assert.sameValue(JSON.stringify([value]), "[" + expected + "]", + "array element: " + expected); + assert.sameValue(JSON.stringify([value, value]), + "[" + expected + "," + expected + "]", "array elements: " + expected); + assert.sameValue(JSON.stringify({ key: value }), '{"key":' + expected + "}", + "property value: " + expected); + assert.sameValue(JSON.stringify({ a: [value], b: { c: value } }), + '{"a":[' + expected + '],"b":{"c":' + expected + "}}", + "nested: " + expected); +}