// Copyright 2019 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. // Flags: --harmony-intl-bigint var locales = [ "en", // "1,234,567,890,123,456" "de", // "1.234.567.890.123.456" "fr", // "1 234 567 890 123 456" "hi", // "1,23,45,67,89,01,23,456" "fa", // "۱٬۲۳۴٬۵۶۷٬۸۹۰٬۱۲۳٬۴۵۶" "th-u-nu-thai", // "๑,๒๓๔,๕๖๗,๘๙๐,๑๒๓,๔๕๖" ]; var data = [ Number.MAX_SAFE_INTEGER, -Number.MAX_SAFE_INTEGER, Math.floor(Number.MAX_SAFE_INTEGER / 2), 0, /// -0, // this case is broken now. ]; for (var locale of locales) { let nf = new Intl.NumberFormat(locale); let percentOption = {style: "percent"}; let nfPercent = new Intl.NumberFormat(locale, percentOption); for (var n of data) { let bigint = BigInt(n); // Test NumberFormat w/ number output the same as // BigInt.prototype.toLocaleString() assertEquals(nf.format(n), bigint.toLocaleString(locale)); // Test NumberFormat output the same regardless pass in as number or BigInt assertEquals(nf.format(n), nf.format(bigint)); // Test formatToParts assertEquals(nf.formatToParts(n), nf.formatToParts(bigint)); // Test output with option // Test NumberFormat w/ number output the same as // BigInt.prototype.toLocaleString() assertEquals(nfPercent.format(n), bigint.toLocaleString(locale, percentOption)); // Test NumberFormat output the same regardless pass in as number or BigInt assertEquals(nfPercent.format(n), nfPercent.format(bigint)); assertEquals(nfPercent.formatToParts(n), nfPercent.formatToParts(bigint)); } // Test very big BigInt let veryBigInt = BigInt(Number.MAX_SAFE_INTEGER) * BigInt(Number.MAX_SAFE_INTEGER) * BigInt(Number.MAX_SAFE_INTEGER); assertEquals(nf.format(veryBigInt), veryBigInt.toLocaleString(locale)); // It should output different than toString assertFalse(veryBigInt.toLocaleString(locale) == veryBigInt.toString()); assertTrue(veryBigInt.toLocaleString(locale).length > veryBigInt.toString().length); }