StringBuilder.js (1705B)
1 // |reftest| skip-if(!this.hasOwnProperty("Intl")) 2 /* This Source Code Form is subject to the terms of the Mozilla Public 3 * License, v. 2.0. If a copy of the MPL was not distributed with this 4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 5 6 // The implementation of the format function uses the C++ StringBuilder class, 7 // which changes its storage model at 32 characters, and uses it in a way which 8 // also means that there's no room for null-termination at this limit. 9 // This test makes sure that none of this affects the output. 10 11 var format = new Intl.NumberFormat("it-IT", {minimumFractionDigits: 1}); 12 13 assertEq(format.format(1123123123123123123123.1), "1.123.123.123.123.123.100.000,0"); 14 assertEq(format.format(12123123123123123123123.1), "12.123.123.123.123.122.000.000,0"); 15 assertEq(format.format(123123123123123123123123.1), "123.123.123.123.123.120.000.000,0"); 16 17 // Ensure the ICU output matches Number.prototype.toFixed. 18 function formatToFixed(x) { 19 var mfd = format.resolvedOptions().maximumFractionDigits; 20 var s = x.toFixed(mfd); 21 22 // To keep it simple we assume |s| is always in exponential form. 23 var m = s.match(/^(\d)\.(\d+)e\+(\d+)$/); 24 assertEq(m !== null, true); 25 s = m[1] + m[2].padEnd(m[3], "0"); 26 27 // Group digits and append fractional part. 28 m = s.match(/\d{1,3}(?=(?:\d{3})*$)/g); 29 assertEq(m !== null, true); 30 return m.join(".") + ",0"; 31 } 32 33 assertEq(formatToFixed(1123123123123123123123.1), "1.123.123.123.123.123.100.000,0"); 34 assertEq(formatToFixed(12123123123123123123123.1), "12.123.123.123.123.122.000.000,0"); 35 assertEq(formatToFixed(123123123123123123123123.1), "123.123.123.123.123.120.000.000,0"); 36 37 reportCompare(0, 0, "ok");