blob: 019c3083ac472568f2d03c0097c19a51b96383f2 [file] [log] [blame]
//-------------------------------------------------------------------------------------------------------
// Copyright (C) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
//-------------------------------------------------------------------------------------------------------
for (var numDigitsAfterDecimal = -1; numDigitsAfterDecimal <= 2; ++numDigitsAfterDecimal) {
for (var lastDigit = 0; lastDigit <= (numDigitsAfterDecimal <= 0 ? 0 : 1); ++lastDigit) {
for (var numDigits = 20; numDigits <= 23; ++numDigits) {
var s = generateNumberString(numDigits - Math.max(0, numDigitsAfterDecimal), numDigitsAfterDecimal, lastDigit);
echo(numDigits + " digits");
echo(s);
echo(eval(s).toString());
echo("");
}
}
}
function generateNumberString(numDigitsBeforeDecimal, numDigitsAfterDecimal, lastDigit) {
if (numDigitsBeforeDecimal < 1)
throw new Error("Invalid numDigits");
var useDecimal = numDigitsAfterDecimal >= 0;
if (numDigitsAfterDecimal < 0)
numDigitsAfterDecimal = 0;
var s = "1";
for (var i = 1; i < numDigitsBeforeDecimal; ++i)
s += "0";
if (useDecimal)
s += ".";
if (numDigitsAfterDecimal !== 0) {
for (var i = 0; i < numDigitsAfterDecimal - 1; ++i)
s += "0";
s += lastDigit;
}
return s;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function toString(o, quoteStrings) {
switch (o) {
case null:
case undefined:
return "" + o;
}
switch (typeof o) {
case "boolean":
case "number":
{
var s = "" + o;
var e = s.indexOf("e");
for (var i = (e == -1 ? s.length : e) - 3; i > 0; i -= 3)
s = s.substring(0, i) + "," + s.substring(i);
return s;
}
case "string":
{
var hex = "0123456789abcdef";
var s = "";
for (var i = 0; i < o.length; ++i) {
var c = o.charCodeAt(i);
if (c === 0)
s += "\\0";
else if (c >= 0x20 && c < 0x7f)
s += quoteStrings && o.charAt(i) === "\"" ? "\\\"" : o.charAt(i);
else if (c <= 0xff)
s += "\\x" + hex.charAt((c >> 4) & 0xf) + hex.charAt(c & 0xf);
else
s += "\\u" + hex.charAt((c >> 12) & 0xf) + hex.charAt((c >> 8) & 0xf) + hex.charAt((c >> 4) & 0xf) + hex.charAt(c & 0xf);
}
if (quoteStrings)
s = "\"" + s + "\"";
return s;
}
case "object":
case "function":
break;
default:
return "<unknown type '" + typeof o + "'>";
}
if (o instanceof Array) {
var s = "[";
for (var i = 0; i < o.length; ++i) {
if (i)
s += ", ";
s += toString(o[i], true);
}
return s + "]";
}
if (o instanceof Error)
return o.name + ": " + o.message;
if (o instanceof RegExp)
return o.toString() + (o.lastIndex === 0 ? "" : " (lastIndex: " + o.lastIndex + ")");
return "" + o;
}
function echo(o) {
var s = toString(o);
try {
document.write(s + "<br/>");
} catch (ex) {
try {
WScript.Echo(s);
} catch (ex2) {
print(s);
}
}
}
function safeCall(f) {
var args = [];
for (var a = 1; a < arguments.length; ++a)
args.push(arguments[a]);
try {
return f.apply(this, args);
} catch (ex) {
echo(ex);
}
}