f7d357b20a
It was shipped in Chrome 67. Bug: v8:6791, v8:8238 Cq-Include-Trybots: luci.chromium.try:linux_chromium_headless_rel;luci.chromium.try:linux_chromium_rel_ng;luci.v8.try:v8_linux_noi18n_rel_ng;master.tryserver.blink:linux_trusty_blink_rel Change-Id: I94d8f0aa18570452403a35dea270b18f155c970a Reviewed-on: https://chromium-review.googlesource.com/1253604 Reviewed-by: Georg Neis <neis@chromium.org> Commit-Queue: Mathias Bynens <mathias@chromium.org> Cr-Commit-Position: refs/heads/master@{#56310}
51 lines
2.0 KiB
JavaScript
51 lines
2.0 KiB
JavaScript
// Copyright 2017 the V8 project authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
function Check(bigint, number_string) {
|
|
var number = Number(bigint);
|
|
if (number_string.substring(0, 2) === "0x") {
|
|
assertEquals(number_string.substring(2), number.toString(16));
|
|
} else {
|
|
assertEquals(number_string, number.toString());
|
|
}
|
|
}
|
|
|
|
// Values in Smi range.
|
|
Check(0n, "0");
|
|
Check(1n, "1");
|
|
Check(-1n, "-1");
|
|
|
|
// Values in double range.
|
|
Check(12345678912n, "12345678912");
|
|
Check(-12345678912345n, "-12345678912345");
|
|
Check(0xfffffffffffffn, "0xfffffffffffff"); // 52 bits.
|
|
Check(0x1fffffffffffffn, "0x1fffffffffffff"); // 53 bits.
|
|
Check(0x3fffffffffffffn, "0x40000000000000"); // 54 bits, rounding up.
|
|
Check(0x3ffffffffffffen, "0x3ffffffffffffe"); // 54 bits, rounding down.
|
|
Check(0x7ffffffffffffdn, "0x7ffffffffffffc"); // 55 bits, rounding down.
|
|
Check(0x7ffffffffffffen, "0x80000000000000"); // 55 bits, tie to even.
|
|
Check(0x7fffffffffffffn, "0x80000000000000"); // 55 bits, rounding up.
|
|
Check(0x1ffff0000ffff0000n, "0x1ffff0000ffff0000"); // 65 bits.
|
|
Check(100000000000000008192n, "100000000000000000000"); // Tie to even.
|
|
|
|
// Check the cornercase where the most significant cut-off bit is 1.
|
|
// If a digit beyond the mantissa is non-zero, we must round up;
|
|
// otherwise tie to even.
|
|
// ...digit2 ][ digit1 ][ digit0 ]
|
|
// [ mantissa ]
|
|
Check(0x01000000000000080000000000000000001000n,
|
|
"0x1000000000000100000000000000000000000");
|
|
Check(0x01000000000000080000000000000000000000n,
|
|
"0x1000000000000000000000000000000000000");
|
|
Check(0x01000000000000180000000000000000000000n,
|
|
"0x1000000000000200000000000000000000000");
|
|
|
|
// Values near infinity.
|
|
Check(1n << 1024n, "Infinity");
|
|
Check(-1n << 1024n, "-Infinity");
|
|
Check(1n << 1023n, "8.98846567431158e+307");
|
|
Check((1n << 1024n) - (1n << 972n), "1.7976931348623155e+308");
|
|
Check((1n << 1024n) - (1n << 971n), "1.7976931348623157e+308");
|
|
Check((1n << 1024n) - (1n << 970n), "Infinity"); // Rounding up overflows.
|