|
|
define([ |
|
|
'intern!object', |
|
|
'intern/chai!assert', |
|
|
'../../number', |
|
|
'../../i18n' |
|
|
], function (registerSuite, assert, number) { |
|
|
|
|
|
var defaultLocale = 'en-us'; |
|
|
|
|
|
function assertStrictNaN(value) { |
|
|
// reliable test for NaN (not subject to coersion) |
|
|
assert.notStrictEqual(value, value); |
|
|
} |
|
|
|
|
|
function isStrictNaN(value) { |
|
|
// reliable test for NaN (not subject to coercion) |
|
|
// isNaN(undefined) return true in Chrome 40 |
|
|
return value !== value; |
|
|
} |
|
|
|
|
|
function decimalNumberDiff(num1, num2) { |
|
|
//TODO: should be more accurate when dojo/number finish rounding in the future |
|
|
var diffBound = 1e-3; |
|
|
var diff = num1 - num2; |
|
|
|
|
|
if (Math.abs(diff) < diffBound) { |
|
|
return true; |
|
|
} |
|
|
else if (isNaN(Math.abs(diff))) { |
|
|
var s = num1.toString().split(num2)[1]; |
|
|
s = s.replace(',', '0').replace('\u066b', '0'); |
|
|
return (Number(s) < diffBound); |
|
|
} |
|
|
return false; |
|
|
} |
|
|
|
|
|
function checkFormatParseCycle(options, sourceInput, expected, backwardCheck) { |
|
|
// backwardCheck is a boolean indicating whether test needs a roundtrip, e.g. format->parse->format |
|
|
if (options == null) { |
|
|
var pattern = options.pattern; |
|
|
var locale = options.locale; |
|
|
//TODO: add more fields |
|
|
} |
|
|
|
|
|
var str = pattern == null ? 'default' : pattern; |
|
|
var result = number.format(sourceInput, options); |
|
|
if (isStrictNaN(expected)) { |
|
|
assertStrictNaN(result); |
|
|
} else { |
|
|
assert.strictEqual(result, expected); |
|
|
} |
|
|
if (backwardCheck) { |
|
|
var resultParsed = number.parse(result,options); |
|
|
if (!decimalNumberDiff(resultParsed, sourceInput)) { |
|
|
assert.strictEqual(resultParsed, sourceInput); |
|
|
} |
|
|
var resultParsedReformatted = number.format(resultParsed, options); |
|
|
if (!decimalNumberDiff(result, resultParsedReformatted)) { |
|
|
assert.strictEqual(resultParsedReformatted, result); |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
function checkParse(options, sourceInput, expected) { |
|
|
var str = 'default'; |
|
|
if (options && options.pattern != null) { |
|
|
str = options.pattern; |
|
|
} |
|
|
//print('input:' + sourceInput); |
|
|
var result = number.parse(sourceInput, options); |
|
|
//print('result :' + result); |
|
|
if (isStrictNaN(expected)) { |
|
|
assertStrictNaN(result); |
|
|
} else { |
|
|
assert.strictEqual(result, expected); |
|
|
} |
|
|
} |
|
|
|
|
|
function checkRounding(num, maxFractionDigits, expected, locale) { |
|
|
var pattern = '#0.'; |
|
|
for (var i = 0; i < maxFractionDigits; i++) { |
|
|
pattern += '#'; |
|
|
} |
|
|
var result = number.format(num,{locale: locale || defaultLocale, pattern:pattern}); |
|
|
assert.strictEqual(result, expected); |
|
|
} |
|
|
|
|
|
registerSuite({ |
|
|
name: 'dojo/number', |
|
|
|
|
|
// TODO: setup function to load locales? |
|
|
|
|
|
'.invalid': function () { |
|
|
assert.isNull(number.format(NaN)); |
|
|
assert.isNull(number.format(Number.NaN)); |
|
|
assert.isNull(number.format(Infinity)); |
|
|
assert.isNull(number.format(-Infinity)); |
|
|
}, |
|
|
|
|
|
'.round': { |
|
|
basic: function () { |
|
|
assert.strictEqual(number.round(0), 0); |
|
|
assert.strictEqual(number.round(0.5), 1); |
|
|
assert.strictEqual(number.round(-0.5), -1); |
|
|
assert.strictEqual(number.round(0.05, 1), 0.1); |
|
|
assert.strictEqual(number.round(0.09, 1), 0.1); |
|
|
assert.strictEqual(number.round(0.04999999, 1), 0.0); |
|
|
assert.strictEqual(number.round(0.09499999, 1), 0.1); |
|
|
assert.strictEqual(number.round(0.095, 1), 0.1); |
|
|
assert.strictEqual(number.round(0.09999999, 1), 0.1); |
|
|
assert.strictEqual(number.round(-0.05, 1), -0.1); |
|
|
assert.strictEqual(number.round(1.05, 1), 1.1); |
|
|
assert.strictEqual(number.round(-1.05, 1), -1.1); |
|
|
// assert.strictEqual(number.round(-162.295, 2), -162.29); // see ticket #7930, dojox.math.round |
|
|
// assert.strictEqual(number.round(162.295, 2), 162.29); // ibid |
|
|
}, |
|
|
|
|
|
multiple: function() { |
|
|
assert.strictEqual(number.round(123.4525, 2, 5), 123.455); |
|
|
assert.strictEqual(number.round(123.452, 2, 5), 123.45); |
|
|
assert.strictEqual(number.round(123.454, 2, 5), 123.455); |
|
|
assert.strictEqual(number.round(123.456, 2, 5), 123.455); |
|
|
assert.strictEqual(number.round(-123.452, 2, 5), -123.45); |
|
|
assert.strictEqual(number.round(-123.4525, 2, 5), -123.455); |
|
|
assert.strictEqual(number.round(-123.454, 2, 5), -123.455); |
|
|
assert.strictEqual(number.round(-123.456, 2, 5), -123.455); |
|
|
}, |
|
|
|
|
|
speleotrove: function() { |
|
|
// submitted Mike Cowlishaw (IBM, CCLA), see http://speleotrove.com/decimal/#testcases |
|
|
assert.strictEqual(number.round(12345 + -0.1), 12345, 'radx200'); |
|
|
assert.strictEqual(number.round(12345 + -0.01), 12345, 'radx201'); |
|
|
assert.strictEqual(number.round(12345 + -0.001), 12345, 'radx202'); |
|
|
assert.strictEqual(number.round(12345 + -0.00001), 12345, 'radx203'); |
|
|
assert.strictEqual(number.round(12345 + -0.000001), 12345, 'radx204'); |
|
|
assert.strictEqual(number.round(12345 + -0.0000001), 12345, 'radx205'); |
|
|
assert.strictEqual(number.round(12345 + 0), 12345, 'radx206'); |
|
|
assert.strictEqual(number.round(12345 + 0.0000001), 12345, 'radx207'); |
|
|
assert.strictEqual(number.round(12345 + 0.000001), 12345, 'radx208'); |
|
|
assert.strictEqual(number.round(12345 + 0.00001), 12345, 'radx209'); |
|
|
assert.strictEqual(number.round(12345 + 0.0001), 12345, 'radx210'); |
|
|
assert.strictEqual(number.round(12345 + 0.001), 12345, 'radx211'); |
|
|
assert.strictEqual(number.round(12345 + 0.01), 12345, 'radx212'); |
|
|
assert.strictEqual(number.round(12345 + 0.1), 12345, 'radx213'); |
|
|
|
|
|
assert.strictEqual(number.round(12346 + 0.49999), 12346, 'radx215'); |
|
|
assert.strictEqual(number.round(12346 + 0.5), 12347, 'radx216'); |
|
|
assert.strictEqual(number.round(12346 + 0.50001), 12347, 'radx217'); |
|
|
|
|
|
assert.strictEqual(number.round(12345 + 0.4), 12345, 'radx220'); |
|
|
assert.strictEqual(number.round(12345 + 0.49), 12345, 'radx221'); |
|
|
assert.strictEqual(number.round(12345 + 0.499), 12345, 'radx222'); |
|
|
assert.strictEqual(number.round(12345 + 0.49999), 12345, 'radx223'); |
|
|
assert.strictEqual(number.round(12345 + 0.5), 12346, 'radx224'); |
|
|
assert.strictEqual(number.round(12345 + 0.50001), 12346, 'radx225'); |
|
|
assert.strictEqual(number.round(12345 + 0.5001), 12346, 'radx226'); |
|
|
assert.strictEqual(number.round(12345 + 0.501), 12346, 'radx227'); |
|
|
assert.strictEqual(number.round(12345 + 0.51), 12346, 'radx228'); |
|
|
assert.strictEqual(number.round(12345 + 0.6), 12346, 'radx229'); |
|
|
|
|
|
//negatives |
|
|
assert.strictEqual(number.round(-12345 + -0.1), -12345, 'rsux200'); |
|
|
assert.strictEqual(number.round(-12345 + -0.01), -12345, 'rsux201'); |
|
|
assert.strictEqual(number.round(-12345 + -0.001), -12345, 'rsux202'); |
|
|
assert.strictEqual(number.round(-12345 + -0.00001), -12345, 'rsux203'); |
|
|
assert.strictEqual(number.round(-12345 + -0.000001), -12345, 'rsux204'); |
|
|
assert.strictEqual(number.round(-12345 + -0.0000001), -12345, 'rsux205'); |
|
|
assert.strictEqual(number.round(-12345 + 0), -12345, 'rsux206'); |
|
|
assert.strictEqual(number.round(-12345 + 0.0000001), -12345, 'rsux207'); |
|
|
assert.strictEqual(number.round(-12345 + 0.000001), -12345, 'rsux208'); |
|
|
assert.strictEqual(number.round(-12345 + 0.00001), -12345, 'rsux209'); |
|
|
assert.strictEqual(number.round(-12345 + 0.0001), -12345, 'rsux210'); |
|
|
assert.strictEqual(number.round(-12345 + 0.001), -12345, 'rsux211'); |
|
|
assert.strictEqual(number.round(-12345 + 0.01), -12345, 'rsux212'); |
|
|
assert.strictEqual(number.round(-12345 + 0.1), -12345, 'rsux213'); |
|
|
|
|
|
assert.strictEqual(number.round(-12346 + 0.49999), -12346, 'rsux215'); |
|
|
assert.strictEqual(number.round(-12346 + 0.5), -12346, 'rsux216'); |
|
|
assert.strictEqual(number.round(-12346 + 0.50001 ), -12345, 'rsux217'); |
|
|
|
|
|
assert.strictEqual(number.round(-12345 + 0.4), -12345, 'rsux220'); |
|
|
assert.strictEqual(number.round(-12345 + 0.49), -12345, 'rsux221'); |
|
|
assert.strictEqual(number.round(-12345 + 0.499), -12345, 'rsux222'); |
|
|
assert.strictEqual(number.round(-12345 + 0.49999), -12345, 'rsux223'); |
|
|
assert.strictEqual(number.round(-12345 + 0.5), -12345, 'rsux224'); |
|
|
assert.strictEqual(number.round(-12345 + 0.50001), -12344, 'rsux225'); |
|
|
assert.strictEqual(number.round(-12345 + 0.5001), -12344, 'rsux226'); |
|
|
assert.strictEqual(number.round(-12345 + 0.501), -12344, 'rsux227'); |
|
|
assert.strictEqual(number.round(-12345 + 0.51), -12344, 'rsux228'); |
|
|
assert.strictEqual(number.round(-12345 + 0.6), -12344, 'rsux229'); |
|
|
|
|
|
assert.strictEqual(number.round(12345 / 1), 12345, 'rdvx401'); |
|
|
assert.strictEqual(number.round(12345 / 1.0001), 12344, 'rdvx402'); |
|
|
assert.strictEqual(number.round(12345 / 1.001), 12333, 'rdvx403'); |
|
|
assert.strictEqual(number.round(12345 / 1.01), 12223, 'rdvx404'); |
|
|
assert.strictEqual(number.round(12345 / 1.1), 11223, 'rdvx405'); |
|
|
|
|
|
assert.strictEqual(number.round(12355 / 4, 1), 3088.8, 'rdvx406'); |
|
|
assert.strictEqual(number.round(12345 / 4, 1), 3086.3, 'rdvx407'); |
|
|
assert.strictEqual(number.round(12355 / 4.0001, 1), 3088.7, 'rdvx408'); |
|
|
assert.strictEqual(number.round(12345 / 4.0001, 1), 3086.2, 'rdvx409'); |
|
|
assert.strictEqual(number.round(12345 / 4.9, 1), 2519.4, 'rdvx410'); |
|
|
assert.strictEqual(number.round(12345 / 4.99, 1), 2473.9, 'rdvx411'); |
|
|
assert.strictEqual(number.round(12345 / 4.999, 1), 2469.5, 'rdvx412'); |
|
|
assert.strictEqual(number.round(12345 / 4.9999, 1), 2469.0, 'rdvx413'); |
|
|
assert.strictEqual(number.round(12345 / 5, 1), 2469, 'rdvx414'); |
|
|
assert.strictEqual(number.round(12345 / 5.0001, 1), 2469.0, 'rdvx415'); |
|
|
assert.strictEqual(number.round(12345 / 5.001, 1), 2468.5, 'rdvx416'); |
|
|
assert.strictEqual(number.round(12345 / 5.01, 1), 2464.1, 'rdvx417'); |
|
|
assert.strictEqual(number.round(12345 / 5.1, 1), 2420.6, 'rdvx418'); |
|
|
|
|
|
assert.strictEqual(number.round(12345 * 1), 12345, 'rmux401'); |
|
|
assert.strictEqual(number.round(12345 * 1.0001), 12346, 'rmux402'); |
|
|
assert.strictEqual(number.round(12345 * 1.001), 12357, 'rmux403'); |
|
|
assert.strictEqual(number.round(12345 * 1.01), 12468, 'rmux404'); |
|
|
assert.strictEqual(number.round(12345 * 1.1), 13580, 'rmux405'); |
|
|
assert.strictEqual(number.round(12345 * 4), 49380, 'rmux406'); |
|
|
assert.strictEqual(number.round(12345 * 4.0001), 49381, 'rmux407'); |
|
|
assert.strictEqual(number.round(12345 * 4.9), 60491, 'rmux408'); |
|
|
assert.strictEqual(number.round(12345 * 4.99), 61602, 'rmux409'); |
|
|
assert.strictEqual(number.round(12345 * 4.999), 61713, 'rmux410'); |
|
|
assert.strictEqual(number.round(12345 * 4.9999), 61724, 'rmux411'); |
|
|
assert.strictEqual(number.round(12345 * 5), 61725, 'rmux412'); |
|
|
assert.strictEqual(number.round(12345 * 5.0001), 61726, 'rmux413'); |
|
|
assert.strictEqual(number.round(12345 * 5.001), 61737, 'rmux414'); |
|
|
assert.strictEqual(number.round(12345 * 5.01), 61848, 'rmux415'); |
|
|
|
|
|
// assert.strictEqual(number.round(12345 * 12), 1.4814E+5, 'rmux416'); |
|
|
// assert.strictEqual(number.round(12345 * 13), 1.6049E+5, 'rmux417'); |
|
|
// assert.strictEqual(number.round(12355 * 12), 1.4826E+5, 'rmux418'); |
|
|
// assert.strictEqual(number.round(12355 * 13), 1.6062E+5, 'rmux419'); |
|
|
} |
|
|
}, |
|
|
|
|
|
'.format': { |
|
|
'old tests': function () { |
|
|
assert.strictEqual(number.format(123, {pattern: '0000'}), '0123'); |
|
|
assert.strictEqual(number.format(-1234567.89, {pattern: '#,##,##0.000##', locale: 'en-us'}), '-12,34,567.890'); |
|
|
assert.strictEqual(number.format(-1234567.890123, {pattern: '#,##,##0.000##', locale: 'en-us'}), '-12,34,567.89012'); |
|
|
assert.strictEqual(number.format(-1234567.890123, {pattern: '#,##0.000##;(#,##0.000##)', locale: 'en-us'}), '(1,234,567.89012)'); |
|
|
assert.strictEqual(number.format(-1234567.890123, {pattern: '#,##0.000##;(#)', locale: 'en-us'}), '(1,234,567.89012)'); |
|
|
assert.strictEqual(number.format(0.501, {pattern: '#0.#%', locale: 'en-us'}), '50.1%'); |
|
|
assert.strictEqual(number.format(1998, {pattern: '00'}), '98'); |
|
|
assert.strictEqual(number.format(1998, {pattern: '00000'}), '01998'); |
|
|
assert.strictEqual(number.format(0.125, {pattern: '0.##', locale: 'en-us'}), '0.13'); //NOTE: expects round_half_up, not round_half_even |
|
|
assert.strictEqual(number.format(0.125, {pattern: '0.0000', locale: 'en-us'}), '0.1250'); |
|
|
assert.strictEqual(number.format(0.100004, {pattern: '0.####', locale: 'en-us'}), '0.1'); |
|
|
|
|
|
assert.strictEqual(number.format(-12.3, {places:0, locale: 'en-us'}), '-12'); |
|
|
assert.strictEqual(number.format(-1234567.89, {locale: 'en-us'}), '-1,234,567.89'); |
|
|
// assert.strictEqual(number.format(-1234567.89, {locale: 'en-in'}), '-12,34,567.89'); |
|
|
assert.strictEqual(number.format(-1234567.89, {places:0, locale: 'en-us'}), '-1,234,568'); |
|
|
// assert.strictEqual(number.format(-1234567.89, {places:0, locale: 'en-in'}), '-12,34,568'); |
|
|
assert.strictEqual(number.format(-1000.1, {places:2, locale: 'fr-fr'}), '-1 000,10'); |
|
|
assert.strictEqual(number.format(-1000.1, {places:2, locale: 'en-us'}), '-1,000.10'); |
|
|
assert.strictEqual(number.format(-1000.1, {places:2, locale: 'fr-fr'}), '-1 000,10'); |
|
|
assert.strictEqual(number.format(-1234.56, {places:2, locale: 'de-de'}), '-1.234,56'); |
|
|
assert.strictEqual(number.format(-1000.1, {places:2, locale: 'en-us'}), '-1,000.10'); |
|
|
assert.strictEqual(number.format(1.23456, {places:2, locale: 'en-us', type: 'percent'}), '123.46%'); |
|
|
assert.strictEqual(number.format(123.4, {places:'1,3', locale: 'en-us'}), '123.4'); |
|
|
assert.strictEqual(number.format(123.45, {places:'1,3', locale: 'en-us'}), '123.45'); |
|
|
assert.strictEqual(number.format(123.456, {places:'1,3', locale: 'en-us'}), '123.456'); |
|
|
|
|
|
// rounding |
|
|
assert.strictEqual(number.format(-1234567.89, {places:0, locale: 'en-us'}), '-1,234,568'); |
|
|
// assert.strictEqual(number.format(-1234567.89, {places:0, locale: 'en-in'}), '-12,34,568'); |
|
|
assert.strictEqual(number.format(-1000.114, {places:2, locale: 'en-us'}), '-1,000.11'); |
|
|
assert.strictEqual(number.format(-1000.115, {places:2, locale: 'en-us'}), '-1,000.12'); |
|
|
assert.strictEqual(number.format(-1000.116, {places:2, locale: 'en-us'}), '-1,000.12'); |
|
|
assert.strictEqual(number.format(-0.0001, {places:2, locale: 'en-us'}), '-0.00'); |
|
|
assert.strictEqual(number.format(0, {places:2, locale: 'en-us'}), '0.00'); |
|
|
|
|
|
// change decimal places |
|
|
assert.strictEqual(number.format(-1000.1, {places:3, locale: 'fr-fr'}), '-1 000,100'); |
|
|
assert.strictEqual(number.format(-1000.1, {places:3, locale: 'en-us'}), '-1,000.100'); |
|
|
}, |
|
|
|
|
|
patterns: function() { |
|
|
var patterns = ([ '#0.#', '#0.', '#.0', '#' ]); |
|
|
var patternsLength = patterns.length; |
|
|
var num = ([ '0', '0', '0.0', '0' ]); |
|
|
var options; |
|
|
//icu4j result seems doesn't work as: |
|
|
//var num = (['0','0.', '.0', '0']); |
|
|
for (var i=0; i<patternsLength; ++i) { |
|
|
options = {pattern:patterns[i], locale: 'en-us'}; |
|
|
checkFormatParseCycle(options, 0, num[i], false); |
|
|
} |
|
|
}, |
|
|
|
|
|
rounding: function() { |
|
|
checkRounding(0.000179999, 5, '0.00018'); |
|
|
checkRounding(0.00099, 4, '0.001'); |
|
|
checkRounding(17.6995, 3, '17.7'); |
|
|
checkRounding(15.3999, 0, '15'); |
|
|
checkRounding(-29.6, 0, '-30'); |
|
|
}, |
|
|
|
|
|
perMill: function() { |
|
|
var result = number.format(0.4857,{pattern: '###.###\u2030', locale: 'en-us'}); |
|
|
assert.strictEqual(result, '485.7\u2030'); |
|
|
}, |
|
|
|
|
|
grouping: function() { |
|
|
var options = {pattern:'#,##,###',locale:'en-us'}; |
|
|
//step1: 123456789 formated=> 12,34,56,789 |
|
|
//step2:12,34,56,789 parsed=> 123456789 => formated => 12,34,56,789 |
|
|
checkFormatParseCycle(options, 123456789, '12,34,56,789', true); |
|
|
} |
|
|
}, |
|
|
|
|
|
'.parse': { |
|
|
'old tests': function() { |
|
|
assert.strictEqual(number.parse('1000', {locale: 'en-us'}), 1000); |
|
|
assert.strictEqual(number.parse('1000.123', {locale: 'en-us'}), 1000.123); |
|
|
assert.strictEqual(number.parse('1,000', {locale: 'en-us'}), 1000); |
|
|
assert.strictEqual(number.parse('-1000', {locale: 'en-us'}), -1000); |
|
|
assert.strictEqual(number.parse('-1000.123', {locale: 'en-us'}), -1000.123); |
|
|
assert.strictEqual(number.parse('-1,234,567.89', {locale: 'en-us'}), -1234567.89); |
|
|
assert.strictEqual(number.parse('-1 234 567,89', {locale: 'fr-fr'}), -1234567.89); |
|
|
assertStrictNaN(number.parse('-1 234 567,89', {locale: 'en-us'})); |
|
|
|
|
|
assert.strictEqual(number.parse('0123', {pattern: '0000'}), 123); |
|
|
|
|
|
assertStrictNaN(number.parse('10,00', {locale: 'en-us'})); |
|
|
assertStrictNaN(number.parse('1000.1', {locale: 'fr-fr'})); |
|
|
|
|
|
assertStrictNaN(number.parse('')); |
|
|
assertStrictNaN(number.parse('abcd')); |
|
|
|
|
|
// should allow unlimited precision, by default |
|
|
assert.strictEqual(number.parse('1.23456789', {locale: 'en-us'}), 1.23456789); |
|
|
|
|
|
// test whitespace |
|
|
// assert.strictEqual(-1234567, number.parse(' -1,234,567 ', {locale: 'en-us'})); |
|
|
|
|
|
// assert.ok(number.parse('9.1093826E-31')); |
|
|
assert.strictEqual(number.parse('123%', {locale: 'en-us', type: 'percent'}), 1.23); |
|
|
assert.strictEqual(number.parse('123%', {places:0, locale: 'en-us', type: 'percent'}), 1.23); |
|
|
assertStrictNaN(number.parse('123.46%', {places:0, locale: 'en-us', type: 'percent'})); |
|
|
assert.strictEqual(number.parse('123.46%', {places:2, locale: 'en-us', type: 'percent'}), 1.2346); |
|
|
assert.strictEqual(number.parse('50.1%', {pattern: '#0.#%', locale: 'en-us'}), 0.501); |
|
|
|
|
|
assert.strictEqual(number.parse('123.4', {pattern: '#0.#', locale: 'en-us'}), 123.4); |
|
|
assert.strictEqual(number.parse('-123.4', {pattern: '#0.#', locale: 'en-us'}), -123.4); |
|
|
assert.strictEqual(number.parse('123.4', {pattern: '#0.#;(#0.#)', locale: 'en-us'}), 123.4); |
|
|
assert.strictEqual(number.parse('(123.4)', {pattern: '#0.#;(#0.#)', locale: 'en-us'}), -123.4); |
|
|
|
|
|
assert.isNull(number.format('abcd', {pattern: '0000'})); |
|
|
|
|
|
assert.strictEqual(number.parse('123', {places: 0}), 123); |
|
|
assert.strictEqual(number.parse('123', {places:'0'}), 123); |
|
|
assert.strictEqual(number.parse('123.4', {places:1, locale: 'en-us'}), 123.4); |
|
|
assert.strictEqual(number.parse('123.45', {places:'1,3', locale: 'en-us'}), 123.45); |
|
|
assert.strictEqual(number.parse('123.45', {places:'0,2', locale: 'en-us'}), 123.45); |
|
|
}, |
|
|
't18466': function () { |
|
|
var locale = "fr"; |
|
|
checkParse({ pattern: "#,###.00 ¤;(#,###.00) ¤", locale: locale }, "1,00 ", NaN); |
|
|
checkParse({ pattern: "#,###.00 ¤;(#,###.00) ¤", locale: locale }, "1,00", 1); |
|
|
checkParse({ pattern: "#,###.00¤;(#,###.00)¤", locale: locale }, "1,00 ", NaN); |
|
|
checkParse({ pattern: "#,###.00¤;(#,###.00)¤", locale: locale }, "1,00", 1); |
|
|
checkParse({ pattern: "#,###.00 ¤;(#,###.00) ¤", locale: locale }, "1 000,00 ", NaN); |
|
|
checkParse({ pattern: "#,###.00 ¤;(#,###.00) ¤", locale: locale }, "1 000,00", 1000); |
|
|
checkParse({ pattern: "#,###.00¤;(#,###.00)¤", locale: locale }, "1 000,00 ", NaN); |
|
|
checkParse({ pattern: "#,###.00¤;(#,###.00)¤", locale: locale }, "1 000,00", 1000); |
|
|
checkFormatParseCycle({ pattern: "#,###.00 ¤;(#,###.00) ¤", locale: locale }, "1200", "1 200,00", true) |
|
|
checkFormatParseCycle({ pattern: "#,###.00¤;(#,###.00)¤", locale: locale }, "1200", "1 200,00", true) |
|
|
checkFormatParseCycle({ pattern: "#,###.00 ¤;(#,###.00) ¤", locale: locale }, "1200 ", "1 200,00", true) |
|
|
checkFormatParseCycle({ pattern: "#,###.00¤;(#,###.00)¤", locale: locale }, "1200 ", "1 200,00", true) |
|
|
|
|
|
checkParse({ pattern: "¤ #,###.00;¤ (#,###.00)", locale: locale }, " 1,00", NaN); |
|
|
checkParse({ pattern: "¤ #,###.00;¤ (#,###.00)", locale: locale }, "1,00", 1); |
|
|
checkParse({ pattern: "¤#,###.00;¤(#,###.00)", locale: locale }, " 1,00", NaN); |
|
|
checkParse({ pattern: "¤#,###.00;¤(#,###.00)", locale: locale }, "1,00", 1); |
|
|
checkParse({ pattern: "¤ #,###.00;¤ (#,###.00)", locale: locale }, " 1 000,00", NaN); |
|
|
checkParse({ pattern: "¤ #,###.00;¤ (#,###.00)", locale: locale }, "1 000,00", 1000); |
|
|
checkParse({ pattern: "¤#,###.00;¤(#,###.00)", locale: locale }, " 1 000,00", NaN); |
|
|
checkParse({ pattern: "¤#,###.00;¤(#,###.00)", locale: locale }, "1 000,00", 1000); |
|
|
checkFormatParseCycle({ pattern: "¤ #,###.00;¤ (#,###.00)", locale: locale }, "1200", "1 200,00", true) |
|
|
checkFormatParseCycle({ pattern: "¤#,###.00;¤(#,###.00)", locale: locale }, "1200", "1 200,00", true) |
|
|
checkFormatParseCycle({ pattern: "¤ #,###.00;¤ (#,###.00)", locale: locale }, " 1200", "1 200,00", true) |
|
|
checkFormatParseCycle({ pattern: "¤#,###.00;¤(#,###.00)", locale: locale }, " 1200 ", "1 200,00", true) |
|
|
|
|
|
|
|
|
} |
|
|
}, |
|
|
|
|
|
// These tests refer to specific tests in ICU4J |
|
|
'ICU4J Regressions': function () { |
|
|
|
|
|
// NumberFormatRegressionTest.Test4161100 |
|
|
checkFormatParseCycle({ pattern: '#0.#', locale: 'en-us' }, -0.09, '-0.1', false); |
|
|
|
|
|
|
|
|
// NumberRegression.Test4087535, NumberRegression.Test4243108 |
|
|
checkFormatParseCycle({ places: 0 }, 0, '0', false); |
|
|
// TODO: in icu4j,0.1 should be formatted to '.1' when minimumIntegerDigits=0 |
|
|
checkFormatParseCycle({ places: 0 }, 0.1, '0', false); |
|
|
checkParse({ pattern: '#0.#####', locale: 'en-us'}, 123.55456,123.55456); |
|
|
//!! fails because default pattern only has 3 decimal places |
|
|
// checkParse(null, 123.55456, 123.55456); |
|
|
|
|
|
// See whether it fails first format 0.0 ,parse '99.99',and then reformat 0.0 |
|
|
checkFormatParseCycle({ pattern: '#.#' }, 0.0, '0', false); |
|
|
checkParse({ locale: 'en-us' }, '99.99', 99.99); |
|
|
checkFormatParseCycle({ pattern: '#.#' }, 0.0, '0', false); |
|
|
|
|
|
|
|
|
// NumberRegression.Test4088503, NumberRegression.Test4106658 |
|
|
checkFormatParseCycle({ places: 0 }, 123, '123', false); |
|
|
|
|
|
// TODO: differernt from ICU where -0.0 is formatted to '-0' |
|
|
checkFormatParseCycle({ locale: 'en-us' }, -0.0, '0', false); |
|
|
|
|
|
// TODO: differernt from ICU where -0.0001 is formatted to '-0' |
|
|
checkFormatParseCycle({ locale: 'en-us', places: 6 }, -0.0001, '-0.000100', false); |
|
|
|
|
|
|
|
|
// NumberRegression.Test4086575 |
|
|
var locale = 'fr'; |
|
|
var pattern = '###.00;(###.00)'; |
|
|
var options = { pattern:pattern,locale: locale }; |
|
|
|
|
|
// no group separator |
|
|
checkFormatParseCycle(options, 1234, '1234,00', false); |
|
|
checkFormatParseCycle(options, -1234, '(1234,00)', false); |
|
|
|
|
|
// space as group separator |
|
|
pattern = '#,###.00;(#,###.00)'; |
|
|
options = { pattern: pattern, locale: locale }; |
|
|
checkFormatParseCycle(options, 1234, '1 234,00', false); // Expect 1 234,00 |
|
|
checkFormatParseCycle(options, -1234, '(1 234,00)', false); // Expect (1 234,00) |
|
|
|
|
|
|
|
|
// NumberRegression.Test4092480, NumberRegression.Test4074454 |
|
|
var patterns = ([ '#0000', '#000', '#00', '#0', '#' ]); |
|
|
var expected = ([ '0042', '042', '42', '42', '42' ]); |
|
|
|
|
|
for (var i = 0; i < patterns.length; i ++) { |
|
|
checkFormatParseCycle({ pattern: patterns[i] }, 42, expected[i], false); |
|
|
checkFormatParseCycle({ pattern: patterns[i] }, -42, '-' + expected[i], false); |
|
|
} |
|
|
|
|
|
checkFormatParseCycle({ pattern : '#,#00.00;-#.#', locale: 'en-us' },3456.78,'3,456.78',false); |
|
|
//!!Failed case |
|
|
// checkFormatParseCycle({pattern:'#,#00.00 p''ieces;-#,#00.00 p''ieces'},3456.78,'3,456.78 p'ieces',false); |
|
|
// checkFormatParseCycle({pattern:'000.0#0'},3456.78,null,false); |
|
|
// checkFormatParseCycle({pattern:'0#0.000'},3456.78,null,false); |
|
|
|
|
|
|
|
|
// NumberRegression.Test4052223 |
|
|
checkParse({ pattern: '#,#00.00' }, 'abc3', NaN); |
|
|
|
|
|
//TODO: got NaN instead of 1.222, is it ok? |
|
|
//checkParse({pattern:'#,##0.###',locale:'en-us'},'1.222,111',1.222); |
|
|
//checkParse({pattern:'#,##0.###',locale:'en-us'},'1.222x111',1.222); |
|
|
|
|
|
//got NaN for illegal input, ok |
|
|
checkParse(null,'hello: ,.#$@^&**10x', NaN); |
|
|
|
|
|
|
|
|
// NumberRegression.Test4125885 |
|
|
checkFormatParseCycle({ pattern: '000.00', locale: 'en-us' }, 12.34, '012.34', false); |
|
|
checkFormatParseCycle({ pattern: '+000.00%;-000.00%', locale: 'en-us' }, 0.1234, '+012.34%', false); |
|
|
checkFormatParseCycle({ pattern: '##,###,###.00', locale: 'en-us'}, 9.02, '9.02', false); |
|
|
|
|
|
var patterns = ([ '#.00', '0.00', '00.00', '#0.0#', '#0.00' ]); |
|
|
var expected = ([ '1.20', '1.20', '01.20', '1.2', '1.20' ]); |
|
|
for (var i = 0; i < patterns.length; i++){ |
|
|
checkFormatParseCycle({ pattern: patterns[i], locale: 'en-us' }, 1.2, expected[i], false); |
|
|
} |
|
|
} |
|
|
}); |
|
|
});
|
|
|
|