Source code

Revision control

Copy as Markdown

Other Tools

// 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);
}