mirror of
https://github.com/mongodb/mongo.git
synced 2024-12-01 09:32:32 +01:00
186 lines
8.9 KiB
JavaScript
186 lines
8.9 KiB
JavaScript
/**
|
|
* Derived from test cases at https://github.com/mongodb/specifications
|
|
*/
|
|
|
|
(function() {
|
|
"use strict";
|
|
|
|
var testData = [
|
|
{"description": "Special - Canonical NaN", "input": "NaN"},
|
|
{"description": "Special - Negative NaN", "input": "NaN", "lossy": true},
|
|
{
|
|
"description": "Special - Negative NaN",
|
|
"expected": "NaN",
|
|
"input": "-NaN",
|
|
"lossy": true
|
|
},
|
|
{"description": "Special - Canonical SNaN", "input": "NaN", "lossy": true},
|
|
{"description": "Special - Negative SNaN", "input": "NaN", "lossy": true},
|
|
{"description": "Special - NaN with a payload", "input": "NaN", "lossy": true},
|
|
{"description": "Special - Canonical Positive Infinity", "input": "Infinity"},
|
|
{"description": "Special - Canonical Negative Infinity", "input": "-Infinity"},
|
|
{
|
|
"description": "Special - Invalid representation treated as 0",
|
|
"input": "0",
|
|
"lossy": true
|
|
},
|
|
{
|
|
"description": "Special - Invalid representation treated as -0",
|
|
"input": "-0",
|
|
"lossy": true
|
|
},
|
|
{
|
|
"description": "Special - Invalid representation treated as 0E3",
|
|
"input": "0E+3",
|
|
"lossy": true
|
|
},
|
|
{
|
|
"description": "Regular - Adjusted Exponent Limit",
|
|
"input": "0.000001234567890123456789012345678901234"
|
|
},
|
|
{"description": "Regular - Smallest", "input": "0.001234"},
|
|
{"description": "Regular - Smallest with Trailing Zeros", "input": "0.00123400000"},
|
|
{"description": "Regular - 0.1", "input": "0.1"},
|
|
{
|
|
"description": "Regular - 0.1234567890123456789012345678901234",
|
|
"input": "0.1234567890123456789012345678901234"
|
|
},
|
|
{"description": "Regular - 0", "input": "0"},
|
|
{"description": "Regular - -0", "input": "-0"},
|
|
{"description": "Regular - -0.0", "input": "-0.0"},
|
|
{"description": "Regular - 2", "input": "2"},
|
|
{"description": "Regular - 2.000", "input": "2.000"},
|
|
{"description": "Regular - Largest", "input": "1234567890123456789012345678901234"},
|
|
{
|
|
"description": "Scientific - Tiniest",
|
|
"input": "9.999999999999999999999999999999999E-6143"
|
|
},
|
|
{"description": "Scientific - Tiny", "input": "1E-6176"},
|
|
{"description": "Scientific - Negative Tiny", "input": "-1E-6176"},
|
|
{
|
|
"description": "Scientific - Adjusted Exponent Limit",
|
|
"input": "1.234567890123456789012345678901234E-7"
|
|
},
|
|
{"description": "Scientific - Fractional", "input": "-1.00E-8"},
|
|
{"description": "Scientific - 0 with Exponent", "input": "0E+6000"},
|
|
{"description": "Scientific - 0 with Negative Exponent", "input": "0E-611"},
|
|
{"description": "Scientific - No Decimal with Signed Exponent", "input": "1E+3"},
|
|
{"description": "Scientific - Trailing Zero", "input": "1.050E+4"},
|
|
{"description": "Scientific - With Decimal", "input": "1.05E+3"},
|
|
{"description": "Scientific - Full", "input": "5192296858534827628530496329220095"},
|
|
{"description": "Scientific - Large", "input": "1.000000000000000000000000000000000E+6144"},
|
|
{
|
|
"description": "Scientific - Largest",
|
|
"input": "9.999999999999999999999999999999999E+6144"
|
|
},
|
|
{
|
|
"description": "Non-Canonical Parsing - Exponent Normalization",
|
|
"input": "-100E-10",
|
|
"expected": "-1.00E-8"
|
|
},
|
|
{
|
|
"description": "Non-Canonical Parsing - Unsigned Positive Exponent",
|
|
"input": "1E3",
|
|
"expected": "1E+3"
|
|
},
|
|
{
|
|
"description": "Non-Canonical Parsing - Lowercase Exponent Identifier",
|
|
"input": "1e+3",
|
|
"expected": "1E+3"
|
|
},
|
|
{
|
|
"description": "Non-Canonical Parsing - Long Significand with Exponent",
|
|
"input": "12345689012345789012345E+12",
|
|
"expected": "1.2345689012345789012345E+34"
|
|
},
|
|
{
|
|
"description": "Non-Canonical Parsing - Positive Sign",
|
|
"input": "+1234567890123456789012345678901234",
|
|
"expected": "1234567890123456789012345678901234"
|
|
},
|
|
{
|
|
"description": "Non-Canonical Parsing - Long Decimal String",
|
|
"input":
|
|
".0000000000000000000000000000000000000000000000000000000000000000000000000000000" +
|
|
"00000000000000000000000000000000000000000000000000000000000000000000000000000000" +
|
|
"00000000000000000000000000000000000000000000000000000000000000000000000000000000" +
|
|
"00000000000000000000000000000000000000000000000000000000000000000000000000000000" +
|
|
"00000000000000000000000000000000000000000000000000000000000000000000000000000000" +
|
|
"00000000000000000000000000000000000000000000000000000000000000000000000000000000" +
|
|
"00000000000000000000000000000000000000000000000000000000000000000000000000000000" +
|
|
"00000000000000000000000000000000000000000000000000000000000000000000000000000000" +
|
|
"00000000000000000000000000000000000000000000000000000000000000000000000000000000" +
|
|
"00000000000000000000000000000000000000000000000000000000000000000000000000000000" +
|
|
"00000000000000000000000000000000000000000000000000000000000000000000000000000000" +
|
|
"00000000000000000000000000000000000000000000000000000000000000000000000000000000" +
|
|
"0000000000000000000000000000000000000001",
|
|
"expected": "1E-999"
|
|
},
|
|
{"description": "Non-Canonical Parsing - nan", "input": "nan", "expected": "NaN"},
|
|
{"description": "Non-Canonical Parsing - nAn", "input": "nAn", "expected": "NaN"},
|
|
{
|
|
"description": "Non-Canonical Parsing - +infinity",
|
|
"input": "+infinity",
|
|
"expected": "Infinity"
|
|
},
|
|
{
|
|
"description": "Non-Canonical Parsing - infinity",
|
|
"input": "infinity",
|
|
"expected": "Infinity"
|
|
},
|
|
{
|
|
"description": "Non-Canonical Parsing - infiniTY",
|
|
"input": "infiniTY",
|
|
"expected": "Infinity"
|
|
},
|
|
{"description": "Non-Canonical Parsing - inf", "input": "inf", "expected": "Infinity"},
|
|
{"description": "Non-Canonical Parsing - inF", "input": "inF", "expected": "Infinity"},
|
|
{
|
|
"description": "Non-Canonical Parsing - -infinity",
|
|
"input": "-infinity",
|
|
"expected": "-Infinity"
|
|
},
|
|
{
|
|
"description": "Non-Canonical Parsing - -infiniTy",
|
|
"input": "-infiniTy",
|
|
"expected": "-Infinity"
|
|
},
|
|
{
|
|
"description": "Non-Canonical Parsing - -Inf",
|
|
"input": "-Infinity",
|
|
"expected": "-Infinity"
|
|
},
|
|
{"description": "Non-Canonical Parsing - -inf", "input": "-inf", "expected": "-Infinity"},
|
|
{"description": "Non-Canonical Parsing - -inF", "input": "-inF", "expected": "-Infinity"},
|
|
{"description": "Rounded Subnormal number", "input": "10E-6177", "expected": "1E-6176"},
|
|
{"description": "Clamped", "input": "1E6112", "expected": "1.0E+6112"},
|
|
{
|
|
"description": "Exact rounding",
|
|
"input":
|
|
"100000000000000000000000000000000000000000000000000000000000000000000000000000000" +
|
|
"000000000000000000000000000000000000000000000000000000000000000000000000000000000" +
|
|
"000000000000000000000000000000000000000000000000000000000000000000000000000000000" +
|
|
"000000000000000000000000000000000000000000000000000000000000000000000000000000000" +
|
|
"000000000000000000000000000000000000000000000000000000000000000000000000000000000" +
|
|
"000000000000000000000000000000000000000000000000000000000000000000000000000000000" +
|
|
"000000000000000000000000000000000000000000000000000000000000000000000000000000000" +
|
|
"000000000000000000000000000000000000000000000000000000000000000000000000000000000" +
|
|
"000000000000000000000000000000000000000000000000000000000000000000000000000000000" +
|
|
"000000000000000000000000000000000000000000000000000000000000000000000000000000000" +
|
|
"000000000000000000000000000000000000000000000000000000000000000000000000000000000" +
|
|
"000000000000000000000000000000000000000000000000000000000000000000000000000000000" +
|
|
"0000000000000000000000000000",
|
|
"expected": "1.000000000000000000000000000000000E+999"
|
|
}
|
|
];
|
|
|
|
testData.forEach(function(testCase) {
|
|
print(`Test - ${testCase.description}`);
|
|
var output = NumberDecimal(testCase.input).toString();
|
|
if (testCase.expected) {
|
|
assert.eq(output, `NumberDecimal("${testCase.expected}")`);
|
|
} else {
|
|
assert.eq(output, `NumberDecimal("${testCase.input}")`);
|
|
}
|
|
});
|
|
}()); |