| // Copyright (C) 2016 and later: Unicode, Inc. and others. |
| // License & terms of use: http://www.unicode.org/copyright.html |
| // Copyright (C) 2015-2016, International Business Machines |
| // Corporation and others. All Rights Reserved. |
| // |
| // This file is divided into test suites separated by whitespace. Each test |
| // suite starts with the name of the test followed by global field settings |
| // for that test suite. After the global settings, comes "begin", the |
| // per-test field names, and finally the test specific field values, 1 test |
| // per line. |
| // |
| // Field names: |
| // H = ICU4J 58 (archive) |
| // J = ICU4J (current) |
| // K = JDK (ignored if not OpenJDK 1.8) |
| // C = ICU4C (current) |
| // P = Properties-based ICU4J (bypasses DecimalFormat wrapper) |
| // |
| // For more information on the format of this file, including all the available |
| // field names, please see |
| // https://docs.google.com/document/d/1T2P0p953_Lh1pRwo-5CuPVrHlIBa_wcXElG-Hhg_WHM/edit?usp=sharing |
| |
| test plus sign |
| set locale ar-EG |
| set pattern +0;-# |
| begin |
| format output breaks |
| 6 \u061C+\u0666 HK |
| -6 \u061C-\u0666 K |
| |
| test basic patterns |
| set locale fr_FR |
| set format 1234.567 |
| begin |
| pattern output breaks |
| // K does not use \u202f narrow space |
| #,##0.## 1\u202f234,57 K |
| 0.## 1234,57 |
| 0 1235 |
| #,##0.### 1\u202f234,567 K |
| ###0.###### 1234,567 |
| ###0.0000# 1234,5670 |
| 00000.0000 01234,5670 |
| #,##0.00 \u00a4 1\u202f234,57 \u20ac K |
| 'tick''bitten '0.00 tick'bitten 1234,57 |
| 'tick' 'bitten '0.00 tick bitten 1234,57 |
| |
| |
| test minimum and maximum fraction digits |
| set locale en |
| set minIntegerDigits 2 |
| set maxIntegerDigits 4 |
| set minFractionDigits 3 |
| set maxFractionDigits 5 |
| begin |
| format output |
| 6 06.000 |
| 6.000005 06.000 |
| 6.000006 06.00001 |
| 1002003004005 4005.000 |
| -1002003004005 -4005.000 |
| 12 12.000 |
| 12345 2345.000 |
| 72.1234 72.1234 |
| |
| test patterns with no '0' symbols |
| set locale en_US |
| begin |
| pattern format output breaks |
| # 514.23 514 |
| # 0.23 0 |
| # 0 0 |
| # 1 1 |
| ##.# 514.23 514.2 |
| ##.# 0.23 0.2 |
| ##.# 0 0 |
| ##.# 1 1 |
| #.# 514.23 514.2 |
| #.# 0.23 0.2 |
| #.# 0 0 |
| #.# 1 1 |
| .# 514.23 514.2 |
| .# 0.23 .2 |
| .# 0 .0 |
| .# 1 1.0 |
| #. 514.23 514. |
| #. 0.23 0. |
| #. 0 0. |
| #. 1 1. |
| . 514.23 514. |
| . 0.23 0. |
| . 0 0. |
| . 1 1. |
| |
| test behavior on numbers approaching zero |
| set locale en |
| begin |
| pattern format output breaks |
| #.## 0.01 0.01 |
| #.## 0.001 0 |
| #.## 0 0 |
| #.00 0.01 .01 |
| #.00 0.001 .00 |
| #.00 0 .00 |
| 0.00 0.01 0.01 |
| 0.00 0.001 0.00 |
| 0.00 0 0.00 |
| |
| // Not in official spec, but needed for backwards compatibility |
| test patterns with leading grouping separator |
| set locale en_US |
| begin |
| pattern format output breaks |
| ,##0 1234.56 1,235 |
| '#',## 3456 #34,56 |
| |
| test patterns with valid and invalid quote marks |
| set locale et |
| begin |
| pattern format output breaks |
| '# 1 fail |
| ''# 1 '1 |
| '''# 1 fail |
| ''''# 1 ''1 |
| '''''# 1 fail |
| '-''-'# 1 -'-1 |
| // K doesn't know the locale symbol for et |
| -'-'# 1 −-1 K |
| '#'# 1 #1 |
| ''#'' 1 '1' |
| ''#- 1 '1− K |
| '-'#- 1 -1− K |
| -#'-' 1 −1- K |
| |
| test int64 |
| set locale en |
| begin |
| format output |
| 1002003004005 1002003004005 |
| -1002003004005 -1002003004005 |
| |
| test rounding |
| set locale fr |
| begin |
| pattern format output breaks |
| 0.5 1.25 1,0 K |
| 0.5 1.75 2,0 K |
| 0.5 -1.25 -1,0 K |
| 00.5 -1.75 -02,0 K |
| 4 2.0 0 K |
| 4 6.0 8 K |
| 4 10.0 8 K |
| 2.70 99.0 99,90 K |
| 2.73 272.0 273,00 K |
| #,#3.70 104.0 1\u202f03,60 K |
| |
| test significant digits |
| set locale en |
| set pattern #,#@,@### |
| begin |
| format output breaks |
| 7 7.0 K |
| 23 23 K |
| 100 100 K |
| 1000 1000 K |
| 10000 1,0000 K |
| 10001 1,0001 K |
| 10001.5 1,0002 K |
| 1234567 1,23,4600 K |
| -1234567 -1,23,4600 K |
| 3.14159 3.1416 K |
| |
| test scientific notation |
| set locale fr |
| begin |
| pattern format output breaks |
| 0.00E0 12345 1,23E4 |
| 000.00E0 12300 123,00E2 |
| 000.0#E0 12300 123,0E2 |
| 000.0#E0 12300.1 123,0E2 |
| 000.0#E0 12301.0 123,01E2 |
| // JDK does not support exponent signs |
| 000.0#E+00 12301.0 123,01E+02 K |
| // JDK gives 12,345E3. JDK seems to include the hashes in significant digits |
| ##0.00E0 12345 12,3E3 K |
| // JDK gives 12,3001E3 |
| ##0.0000E0 12300.1 12,300E3 K |
| // JDK gives 12,3001E3 |
| ##0.000#E0 12300.1 12,30E3 K |
| ##0.000#E0 12301 12,301E3 |
| 0.05E0 12301.2 1,25E4 HK |
| ##0.000#E0 0.17 170,0E-3 |
| // JDK doesn't support significant digits in exponents |
| @@@E0 6.235 6,24E0 K |
| @@@E0 6235 6,24E3 K |
| @@@#E0 6200 6,20E3 K |
| @@@#E0 6201 6,201E3 K |
| @@@#E0 6201.7 6,202E3 K |
| @@@#E00 6201.7 6,202E03 K |
| @@@#E+00 6201.7 6,202E+03 K |
| // If no zeros are specified, significant digits is fraction length plus 1 |
| #.##E0 52413 5,24E4 |
| ###.##E0 52413 52,4E3 K |
| #E0 52413 5,2413E4 K |
| 0E0 52413 5E4 |
| |
| test scientific infinite precision |
| // ICU-11511, ICU-7460, CLDR-10103 |
| set locale en |
| begin |
| pattern format output breaks |
| // From the spec: |
| // "0.##E0 means a max of 3 significant digits." |
| 0.##E0 98760 9.88E4 |
| // "#.##E0 also means a max of 3 significant digits." |
| #.##E0 98760 9.88E4 |
| // "#.0#E0 means a max of 2 significant digits." |
| #.0#E0 98760 9.9E4 K |
| // "0E0 means a max of 1 significant digit." |
| 0E0 98760 1E5 |
| // "#E0 means infinite precision." |
| #E0 98760 9.876E4 K |
| // "###E0 means engineering notation with infinite precision." |
| ###E0 98760 98.76E3 K |
| // Additional tests: |
| ##0.#E0 98760 99E3 K |
| ###.#E0 98760 99E3 K |
| ##0E0 98760 100E3 K |
| |
| test percents |
| set locale fr |
| begin |
| pattern format output breaks |
| 0.0% 0.573 57,3% |
| %0.0 0.573 %57,3 |
| p%p0.0 0.573 p%p57,3 |
| p'%'p0.0 0.573 p%p0,6 |
| %@@@@ 0.0326 %3,260 K |
| %#,@@@ 15.43 %1\u202f540 K |
| // JDK does not support rounding increments |
| %#,##4.1 16.55 %1\u202f656,4 K |
| // JDK gives %16,255E3 |
| %##0.00E0 162.55 %16,3E3 K |
| |
| test permille |
| set locale fr |
| begin |
| pattern format output breaks |
| 0.0\u2030 0.573 573,0‰ |
| \u20300.0 0.573 \u2030573,0 |
| p\u2030p0.0 0.573 p\u2030p573,0 |
| p'\u2030'p0.0 0.573 p\u2030p0,6 |
| \u2030@@@@ 0.0326 \u203032,60 K |
| \u2030#,@@@ 15.43 \u203015\u202f400 K |
| \u2030#,##4.1 16.55 \u203016\u202f551,7 K |
| // JDK gives \u2030162,55E3 |
| \u2030##0.00E0 162.55 \u2030163E3 K |
| |
| test padding |
| set locale fr_FR |
| begin |
| pattern format output breaks |
| // JDK does not seem to support padding |
| $**####,##0 1234 $***1\u202f234 K |
| *x$####,##0 1234 xxx$1\u202f234 K |
| ####,##0*x$ 1234 1\u202f234xxx$ K |
| ####,##0$*x 1234 1\u202f234$xxx K |
| // JDK doesn't seem to handle suffixes correctly dropping the 'nx' entirely |
| ####,##0$*x;ne#n -1234 ne1\u202f234nx K |
| ####,##0$*x;n#'*' -1234 n1\u202f234*xx K |
| *y%4.2###### 4.33 yyyy%432,6 K |
| // In J ICU adds padding as if 'EUR' is only 2 chars (2 * 0xa4) |
| \u00a4\u00a4 **####0.00 433.0 EUR *433,00 HK |
| // In H ICU adds padding as if 'EUR' is only 2 chars (2 * 0xa4) |
| // P fails this one because the test code bypasses CurrencyUsage |
| \u00a4\u00a4 **#######0 433.0 EUR *433,00 HKP |
| |
| test padding and currencies |
| begin |
| locale currency pattern format output breaks |
| // In J, JPY is considered 2 char (2 * 0xa4) even though padding is done |
| // after prefix. In C this test works. |
| fr JPY \u00a4\u00a4 **#######0 433.22 JPY ****433 HK |
| // JDK doesn't correct rounding for currency, shows USD (433 |
| en USD \u00a4\u00a4 **#######0;\u00a4\u00a4 (#) -433.22 USD (433.22) K |
| |
| test currencies |
| set locale fr |
| set format 1234.567 |
| begin |
| pattern currency output breaks |
| // JDK gives shows EUR instead of the euro symbol in this case |
| #,##0.00 \u00a4 EUR 1\u202f234,57 \u20ac K |
| // JDK gives 1\u00A0234,57. JDK doesn't seem to correct rounding |
| // based on currency. |
| #,##0.00 \u00a4 JPY 1\u202f235 JPY K |
| |
| test prefixes and suffixes |
| set locale en |
| set pattern 0.00+;(#) |
| begin |
| format output breaks |
| 7 7.00+ |
| // JDK does not support negative suffixes |
| -3.5 (3.50) K |
| |
| test minimum grouping digits |
| set locale en |
| set pattern #,##0 |
| set minGroupingDigits 2 |
| begin |
| format output breaks |
| // min grouping digits not supported in any existing implementation |
| // but could be easily added to the new DecimalFormat C code. |
| 1000 1000 HK |
| 10000 10,000 |
| 100000 100,000 |
| 1000000 1,000,000 |
| |
| test min max fraction digits |
| set locale en |
| set pattern #,##0.### |
| set format 1234.567 |
| begin |
| minFractionDigits maxFractionDigits output |
| 0 0 1,235 |
| 0 2 1,234.57 |
| 4 5 1,234.5670 |
| |
| test min max integer digits |
| set locale en |
| set pattern #,##0.### |
| set format 1234.567 |
| begin |
| minIntegerDigits maxIntegerDigits output |
| 0 0 .567 |
| 0 3 234.567 |
| 5 5 01,234.567 |
| |
| test min max fraction digits scientific |
| set locale en |
| set pattern #E0 |
| set format 299792458.0 |
| begin |
| minIntegerDigits maxIntegerDigits minFractionDigits maxFractionDigits output breaks |
| // JDK gives 2.99792458E8 (maxInt + maxFrac instead of minInt + maxFrac) |
| 1 99 0 5 2.99792E8 K |
| // JDK gives .3E9 instead of unlimited precision. |
| 0 1 0 0 2.99792458E8 K |
| 1 1 0 0 3E8 |
| // JDK gives E0 instead of allowing for unlimited precision |
| 0 0 0 0 2.99792458E8 K |
| // J gives 2.9979E8 |
| 0 1 0 5 2.99792E8 HK |
| // JDK gives 300E6 |
| 0 3 0 0 299.792458E6 K |
| // JDK gives 299.8E6 (maybe maxInt + maxFrac instead of minInt + maxFrac)? |
| 0 3 0 1 300E6 K |
| // JDK gives 299.7925E6 |
| 2 3 0 4 299.792E6 K |
| // JDK gives 299.79246E6 |
| 2 3 0 5 299.7925E6 K |
| 3 3 0 5 299.79246E6 |
| 3 3 0 4 299.7925E6 |
| 2 2 0 3 29.979E7 |
| 4 4 0 0 2998E5 |
| 0 0 1 5 .29979E9 |
| // JDK gives E0 |
| 0 0 1 0 2.99792458E8 K |
| // J gives 2.998E8 |
| 0 0 0 4 .29979E9 HK |
| // According to the spec, if maxInt>minInt and minInt>1, then set |
| // Context: #13289 |
| 2 8 1 6 2.9979246E8 K |
| // Treat max int digits > 8 as being the same as min int digits. |
| // This behavior is not spelled out in the specification. |
| // JDK fails here because it tries to use 9 + 6 = 15 sig digits. |
| 2 9 1 6 29.979246E7 K |
| |
| test ticket 20058 |
| set locale en |
| begin |
| pattern format output breaks |
| #00.0##E0 0 0.0E0 K |
| #00.0##E0 1.2 1.2E0 K |
| #00.0E0 0 0.0E0 K |
| #00.0E0 1.2 1.2E0 K |
| |
| test significant digits scientific |
| set locale en |
| set pattern #E0 |
| set format 290000000.0 |
| begin |
| minSigDigits maxSigDigits output breaks |
| 0 1 3E8 K |
| 0 2 2.9E8 K |
| 0 3 2.9E8 K |
| 1 1 3E8 K |
| 1 2 2.9E8 K |
| 1 3 2.9E8 K |
| 2 2 2.9E8 K |
| 2 3 2.9E8 K |
| 3 3 2.90E8 K |
| 3 4 2.90E8 K |
| |
| test min max fraction digits scientific 2 |
| set locale en |
| set pattern #E0 |
| set format 29979245.0 |
| begin |
| minIntegerDigits maxIntegerDigits minFractionDigits maxFractionDigits output breaks |
| // JDK gives E0 |
| 0 0 0 0 2.9979245E7 K |
| // JDK gives .3E8 |
| 0 1 0 0 2.9979245E7 K |
| // JDK gives 2998E4. |
| 0 4 0 0 2997.9245E4 K |
| |
| test ticket 11524 |
| set locale en |
| set pattern #,##0.### |
| begin |
| format maxIntegerDigits output breaks |
| 123 1 3 |
| // C obeys maxIntegerDigits and prints after the decimal place |
| 0 0 .0 HKP |
| // CJP ignore max integer if it is less than zero and prints "123" |
| 123 -2147483648 0 CJP |
| 12345 1 5 |
| 12345 -2147483648 0 CJP |
| 5.3 1 5.3 |
| 5.3 -2147483648 .3 CJP |
| |
| test patterns with zero |
| set locale en |
| set format 0 |
| begin |
| pattern output breaks |
| #.# 0 |
| #. 0. |
| .# .0 |
| # 0 |
| #,##0.00 0.00 |
| #,###.00 .00 |
| 00.000E00 00.000E00 |
| 0.####E0 0E0 |
| ##0.######E000 0E000 |
| |
| test significant digits manually set |
| set locale en_US |
| set pattern 0.0 |
| set useSigDigits 1 |
| set minSigDigits 3 |
| set maxSigDigits 5 |
| begin |
| format output breaks |
| 0.0012 0.00120 K |
| 0.00123 0.00123 K |
| 0.001234 0.001234 K |
| 0.0012345 0.0012345 K |
| 0.00123456 0.0012346 K |
| -43 -43.0 |
| -43.7 -43.7 |
| -43.76 -43.76 K |
| -43.762 -43.762 K |
| -43.7626 -43.763 K |
| |
| test grouping used setters |
| set locale en_US |
| set pattern #,##0 |
| set format 12345 |
| begin |
| output useGrouping |
| 12,345 |
| 12,345 1 |
| 12345 0 |
| |
| test grouping used setters in parsing |
| set pattern #,##0 |
| begin |
| locale useGrouping parse output breaks |
| en_US 1 123,456 123456 |
| en_US 0 123,456 123 |
| en_US 1 123.456 123.456 |
| en_US 0 123.456 123.456 |
| it_IT 1 123,456 123.456 |
| it_IT 0 123,456 123.456 |
| it_IT 1 123.456 123456 |
| it_IT 0 123.456 123 |
| |
| test no grouping in pattern with parsing |
| set pattern 0 |
| begin |
| locale parse output breaks |
| en_US 123,456 123 |
| en_US 123.456 123.456 |
| fr_FR 123,456 123.456 |
| fr_FR 123.456 123 |
| |
| test grouping setters |
| set locale en_US |
| set pattern 0 |
| set format 123456789 |
| set useGrouping 1 |
| begin |
| output grouping grouping2 breaks |
| 1,2345,6789 4 |
| 1,23,45,6789 4 2 K |
| |
| test grouping setters with min grouping digits |
| set locale en_US |
| set pattern 0 |
| set format 123456789 |
| set useGrouping 1 |
| begin |
| output grouping grouping2 minGroupingDigits breaks |
| 1,23,45,6789 4 2 2 K |
| 123,456789 6 6 3 |
| 123456789 6 6 4 HK |
| |
| test multiplier setters |
| set locale en_US |
| begin |
| format multiplier output breaks |
| 23 -12 -276 |
| 23 -1 -23 |
| // H (ICU4J 58) and J (current ICU4J) throw exception on zero multiplier. |
| // ICU4C prints 23. |
| // Q multiplies by zero and prints 0. |
| 23 0 0 CHJ |
| 23 1 23 |
| 23 12 276 |
| -23 12 -276 |
| -23 -12 276 |
| |
| test rounding setters |
| set locale en_US |
| set pattern 0.0# |
| set roundingIncrement 0.25 |
| begin |
| format output breaks |
| -0.35 -0.25 K |
| 0.35 0.25 K |
| // P doesn't support mixing minFrac with roundingIncrement (prints 0.50). |
| 0.39 0.5 JKP |
| 0.62 0.5 JKP |
| 0.63 0.75 K |
| |
| test padding setters |
| set locale en_US |
| set pattern bill0 |
| set format 1357 |
| begin |
| padCharacter formatWidth output breaks |
| * 8 bill1357 |
| * 9 *bill1357 K |
| ^ 10 ^^bill1357 K |
| |
| test use scientific setter |
| set locale en_US |
| set pattern 0.00 |
| set format 186283 |
| begin |
| output useScientific breaks |
| 186283.00 |
| 1.86E5 1 K |
| 186283.00 0 |
| |
| test rounding mode setters |
| set locale en_US |
| set pattern 0.5 |
| begin |
| format roundingMode output breaks |
| 1.24 halfUp 1.0 K |
| 1.25 halfUp 1.5 |
| 1.25 halfDown 1.0 K |
| 1.26 halfDown 1.5 |
| 1.25 halfEven 1.0 K |
| -1.01 up -1.5 |
| -1.49 down -1.0 K |
| 1.01 up 1.5 |
| 1.49 down 1.0 K |
| -1.01 ceiling -1.0 K |
| -1.49 floor -1.5 |
| |
| test currency usage setters |
| set locale CH |
| set pattern \u00a4\u00a4 0 |
| begin |
| format currency currencyUsage output breaks |
| 0.37 CHF standard CHF 0.37 K |
| 0.37 CHF cash CHF 0.35 K |
| 1.234 CZK standard CZK 1.23 K |
| 1.234 CZK cash CZK 1 |
| |
| test currency usage to pattern |
| set locale en |
| begin |
| currency currencyUsage toPattern breaks |
| // These work in J, but it prepends an extra hash sign to the pattern. |
| // K does not support this feature. |
| USD standard 0.00 HK |
| CHF standard 0.00 HK |
| CZK standard 0.00 HK |
| USD cash 0.00 HK |
| CHF cash 0.05 HK |
| CZK cash 0 HK |
| |
| test currency rounding |
| set locale en |
| set currency USD |
| begin |
| pattern format output breaks |
| # 123 123 P |
| // Currency rounding should always override the pattern. |
| // K prints the currency in ISO format for some reason. |
| \u00a4# 123 $123.00 K |
| \u00a4#.000 123 $123.00 K |
| \u00a4#.## 123 $123.00 K |
| |
| test exponent parameter setters |
| set locale en_US |
| set pattern 0.##E0 |
| set format 299792458 |
| begin |
| decimalSeparatorAlwaysShown exponentSignAlwaysShown minimumExponentDigits output breaks |
| 0 0 2 3E08 K |
| 0 1 3 3E+008 K |
| // decimalSeparatorAlwaysShown K=JDK; C=ICU4C; J=ICU4J |
| // See ticket 11621 |
| 1 0 2 3.E08 K |
| 1 1 3 3.E+008 K |
| 1 0 1 3.E8 |
| 0 0 1 3E8 |
| |
| test exponent decimalSeparatorAlwaysShown default |
| set locale en_US |
| set pattern 0.##E0 |
| begin |
| format output decimalSeparatorAlwaysShown breaks |
| // decimalSeparatorAlwaysShown off by default |
| 299792458 3E8 |
| 299000000 2.99E8 |
| 299792458 3.E8 1 |
| |
| test pad position setters |
| set locale en_US |
| set pattern **[#####0.##];((#)) |
| begin |
| format padPosition output breaks |
| 12.34 beforePrefix ****[12.34] K |
| 12.34 afterPrefix [****12.34] K |
| 12.34 beforeSuffix [12.34****] K |
| 12.34 afterSuffix [12.34]**** K |
| -12.34 beforePrefix **((12.34)) K |
| -12.34 afterPrefix ((**12.34)) K |
| -12.34 beforeSuffix ((12.34**)) K |
| -12.34 afterSuffix ((12.34))** K |
| |
| test affix setters |
| set locale fr_FR |
| set currency EUR |
| set pattern 0.00 |
| begin |
| format positivePrefix positiveSuffix negativePrefix negativeSuffix output |
| 12.34 % %12,34 |
| 12.34 \u00a4\u00a4 12,34\u00a4\u00a4 |
| 12.34 - + 12,34 |
| -12.34 - + -12,34+ |
| -12.34 \u00a4 \u00a412,34 |
| 12.34 \u00a4 12,34 |
| -12.34 % 12,34% |
| 12.34 % 12,34 |
| |
| test more affix setters |
| set locale fr_FR |
| set pattern %0.00 |
| begin |
| format positivePrefix negativePrefix output |
| 0.648 booya cooya booya64,80 |
| |
| test nan and infinity |
| set locale en_US |
| set pattern [0.00];(#) |
| begin |
| format output breaks |
| Inf [\u221e] |
| -Inf (\u221e) K |
| // J does not print the affixes |
| // K prints \uFFFD |
| NaN [NaN] HK |
| |
| test nan and infinity with multiplication |
| set locale en |
| set multiplier 100 |
| begin |
| format output breaks |
| Inf \u221e |
| -Inf -\u221e |
| NaN NaN K |
| |
| test nan and infinity with padding |
| set locale en_US |
| set pattern $$$0.00$ |
| set formatWidth 8 |
| begin |
| format padPosition output breaks |
| Inf beforePrefix $$$\u221e$ K |
| Inf afterPrefix $$$ \u221e$ K |
| Inf beforeSuffix $$$\u221e $ K |
| Inf afterSuffix $$$\u221e$ K |
| // J does not print the affixes |
| // K prints \uFFFD |
| NaN beforePrefix $$$NaN$ HK |
| NaN afterPrefix $$$ NaN$ HK |
| NaN beforeSuffix $$$NaN $ HK |
| NaN afterSuffix $$$NaN$ HK |
| |
| test apply formerly localized patterns |
| begin |
| // documentation says localizedPattern is not supported, change to pattern |
| locale pattern format output breaks |
| en #0% 0.4376 44% |
| // This next test breaks JDK. JDK doesn't multiply by 100. |
| fa \u0025\u00a0\u0023\u0030 0.4376 \u066a\u00a0\u06f4\u06f4 K |
| |
| test localized pattern basic symbol coverage |
| begin |
| locale localizedPattern toPattern breaks |
| it #.##0,00 #,##0.00 |
| // JDK either doesn't know sl uses this character for minus sign |
| // or doesn't support minus sign in localized pattern |
| sl #.##0;#.##0− #,##0;#,##0- K |
| // JDK does not have data for "×10^" in this locale |
| en_SE 0,00×10^0;0,00×10^0- 0.00E0;0.00E0- K |
| // JDK does not seem to transform the digits in localized patterns |
| ar_SA #\u066C##\u0660\u066B\u0660\u0660;a# #,##0.00;a#,##0.00 K |
| |
| test toPattern |
| set locale en |
| begin |
| pattern toPattern breaks |
| // All of the C and S failures in this section are because of functionally equivalent patterns |
| // JDK doesn't support any patterns with padding or both negative prefix and suffix |
| // Breaks ICU4J See ticket 11671 |
| **0,000 **0,000 HK |
| **##0,000 **##0,000 K |
| **###0,000 **###0,000 K |
| **####0,000 **#,##0,000 CJKP |
| ###,000. #,000. |
| 0,000 #0,000 CJP |
| .00 #.00 |
| 000 #000 CJP |
| 000,000 #,000,000 CJP |
| pp#,000 pp#,000 |
| 00.## #00.## CJP |
| #,#00.025 #,#00.025 |
| // No secondary grouping in JDK |
| #,##,###.02500 #,##,###.02500 K |
| pp#,000;(#) pp#,000;(#,000) K |
| **####,##,##0.0##;(#) **#,##,##,##0.0##;**(##,##,##0.0##) CJKP |
| // No significant digits in JDK |
| @@### @@### K |
| @,@#,### @,@#,### K |
| 0.00E0 0.00E0 |
| // The following one works in JDK, probably because |
| // it just returns the same string |
| @@@##E0 @@@##E0 |
| ###0.00#E0 ###0.00#E0 |
| ##00.00#E0 ##00.00#E0 |
| 0.00E+00 0.00E+00 K |
| 000.00E00 000.00E00 |
| ###0.00#E00 ###0.00#E00 |
| |
| test parse |
| set locale en |
| set pattern +#,##0.0###;(#) |
| begin |
| parse output breaks |
| +5,347.25 5347.25 |
| +5,347,.25 5347.25 |
| +5,347, 5347 |
| +5347,,, 5347 |
| +5347,,,d8 5347 |
| (5,347.25) -5347.25 |
| // H requires prefix and suffix for lenient parsing, but C doesn't |
| 5,347.25 5347.25 HK |
| (5,347.25 -5347.25 H |
| // S is successful at parsing this as -5347.25 in lenient mode |
| -5,347.25 -5347.25 HK |
| +3.52E4 35200 |
| (34.8E-3) -0.0348 |
| // JDK stops parsing at the spaces. JDK doesn't see space as a grouping separator |
| (34 25E-1) -342.5 K |
| (34,,25E-1) -342.5 |
| // Trailing grouping separators are not OK. |
| // H fails; C/J/P stop at the offending separator. |
| (34,,25,E-1) fail CJKP |
| (34,,25,E-1) -3425 HK |
| (34 25 E-1) -342.5 HK |
| (34,,25 E-1) -342.5 HK |
| // Spaces are not allowed after exponent symbol |
| // C parses up to the E but H bails |
| (34 25E -1) -3425 HK |
| +3.52EE4 3.52 |
| +1,234,567.8901 1234567.8901 |
| +1,23,4567.8901 1234567.8901 |
| // Fraction grouping is disabled by default |
| +1,23,4567.89,01 1234567.89 |
| +1,23,456.78.9 123456.78 |
| +12.34,56 12.34 |
| +79,,20,33 792033 |
| // JDK gets 79 |
| +79 20 33 792033 K |
| // Parsing stops at comma as it is different from other separators |
| +79 20,33 7920 K |
| +79,,20 33 7920 |
| + 79 79 K |
| +,79,,20,33 792033 |
| +7920d3 7920 |
| // Whitespace immediately after prefix doesn't count as digit separator |
| // in C but is does in H |
| + ,79,,20,33 792033 HK |
| ( 19 45) -1945 K |
| // C allows trailing separators when there is a prefix and suffix. |
| // H allows trailing separators only when there is just a prefix. |
| // In this case, H just bails |
| ( 19 45 ) -1945 HK |
| (,,19,45) -1945 |
| // C parses to the space, but H bails |
| (,,19 45) -19 H |
| // H bails b/c comma different separator than space. C doesn't treat leading spaces |
| // as a separator. |
| ( 19,45) -1945 HK |
| // H bails. Doesn't allow trailing separators when there is prefix and suffix. |
| (,,19,45,) -1945 H |
| // H bails on next 4 because H doesn't allow letters inside prefix and suffix. |
| // C will parse up to the letter. |
| (,,19,45,d1) -1945 H |
| (,,19,45d1) -1945 H |
| ( 19 45 d1) -1945 HK |
| ( 19 45d1) -1945 HK |
| // H does allow trailing separator before a decimal point |
| (19,45,.25) -1945.25 |
| // 2nd decimal points are ignored |
| +4.12.926 4.12 |
| |
| test parse suffix |
| set locale en |
| set pattern #,##0.0###+;#- |
| begin |
| parse output breaks |
| // J and K just bail. |
| 3426 3426 HK |
| 3426+ 3426 |
| // J bails; K sees -34 |
| 34 d1+ 34 HK |
| // JDK sees this as -1234 for some reason |
| // H bails b/c of trailing separators |
| 1,234,,,+ 1234 HK |
| 1,234- -1234 |
| // H, C, and P bail because of trailing separators |
| 1,234,- -1234 CHJP |
| // J bails here too |
| 1234 - -1234 H |
| |
| |
| |
| test parse strict |
| set locale en |
| set pattern +#,##,##0.0###;(#) |
| set lenient 0 |
| set minGroupingDigits 2 |
| begin |
| parse output breaks |
| +123d5 123 |
| +5347.25 5347.25 |
| // separators in wrong place cause failure, no separators ok. |
| +65,347.25 65347.25 |
| (65347.25) -65347.25 |
| (65,347.25) -65347.25 |
| // JDK does allow separators in the wrong place and parses as -5347.25 |
| (53,47.25) fail K |
| // strict requires prefix or suffix, except in C |
| 65,347.25 fail |
| +3.52E4 35200 |
| (34.8E-3) -0.0348 |
| (3425E-1) -342.5 |
| // Strict doesn't allow separators in sci notation. |
| (63,425) -63425 |
| // H does not allow grouping separators in scientific notation. |
| (63,425E-1) -6342.5 H |
| // Both prefix and suffix needed for strict. |
| // JDK accepts this and parses as -342.5 |
| (3425E-1 fail K |
| +3.52EE4 3.52 |
| +12,34,567.8901 1234567.8901 |
| // With strict digit separators don't have to be the right type |
| // JDK doesn't acknowledge space as a separator |
| +12 34 567.8901 1234567.8901 K |
| // In general the grouping separators have to match their expected |
| // location exactly. The only exception is when string being parsed |
| // have no separators at all. |
| +12,345.67 12345.67 |
| // JDK doesn't require separators to be in the right place. |
| +1,23,4567.8901 fail K |
| +1,234,567.8901 fail K |
| +1234,567.8901 fail K |
| +1,234567.8901 fail K |
| +1234567.8901 1234567.8901 |
| // Minimum grouping is not satisfied below, but that's ok |
| // because minimum grouping is optional. |
| +1,234.5 1234.5 |
| // Comma after decimal means parse to a comma |
| +1,23,456.78,9 123456.78 |
| // H fails upon seeing the second decimal point |
| +1,23,456.78.9 123456.78 H |
| +79 79 |
| +79 79 |
| + 79 fail |
| // JDK parses as -1945 |
| (1,945d1) fail K |
| |
| test parse strict scientific |
| // See #13737: Old behavior should be retained in this case |
| set locale en |
| set pattern #E0 |
| set lenient 0 |
| begin |
| parse output breaks |
| 123 123 |
| 123E1 1230 |
| 123E0 123 |
| 123E 123 |
| |
| test parse strict without prefix/suffix |
| set locale en |
| set pattern # |
| set lenient 0 |
| begin |
| parse output breaks |
| 12.34 12.34 |
| -12.34 -12.34 |
| // The following case passes only when setSignAlwaysShown is enabled |
| +12.34 fail |
| $12.34 fail |
| |
| test parse integer only |
| set locale en |
| set pattern 0.00 |
| set parseIntegerOnly 1 |
| begin |
| parse output breaks |
| 35 35 |
| // S accepts leading plus signs |
| +35 35 HK |
| -35 -35 |
| 2.63 2 |
| -39.99 -39 |
| |
| test parse no exponent flag |
| set pattern 0 |
| set locale en |
| begin |
| parseNoExponent parse output breaks |
| // JDK doesn't allow lowercase exponent but ICU4J and ICU4C do. |
| 0 5e2 500 K |
| 0 5.3E2 530 |
| // See ticket 11725 |
| 1 5e2 5 H |
| 1 5.3E2 5.3 HK |
| |
| test parse currency fail |
| set pattern 0 |
| set locale en |
| begin |
| parse output outputCurrency breaks |
| // Fixed in ticket 11735 |
| 53.45 fail USD |
| |
| test parse strange prefix |
| set locale en |
| set positivePrefix dd |
| set negativePrefix ddd |
| begin |
| parse output |
| dd4582 4582 |
| ddd4582 -4582 |
| |
| test parse strange suffix |
| set locale en |
| set positiveSuffix dd |
| set negativePrefix |
| set negativeSuffix ddd |
| begin |
| parse output |
| 4582dd 4582 |
| 4582ddd -4582 |
| |
| test really strange suffix |
| set locale en |
| set positiveSuffix 9K |
| set negativePrefix |
| set negativeSuffix 9N |
| begin |
| parse output breaks |
| // A non-greedy parse is required to pass these cases. |
| // All of the implementations being tested are greedy. |
| 6549K 654 CHJKP |
| 6549N -654 CHJKP |
| |
| test really strange prefix |
| set locale en |
| set positivePrefix 82 |
| set negativePrefix 28 |
| begin |
| parse output |
| 8245 45 |
| 2845 -45 |
| |
| test parse pattern with quotes |
| set locale en |
| set pattern '-'#y |
| begin |
| parse output breaks |
| -45y 45 |
| |
| test parse with locale symbols |
| // The grouping separator in it_CH is an apostrophe |
| set locale it_CH |
| set pattern #,##0 |
| begin |
| parse output breaks |
| १३ 13 |
| १३.३१ 13.31 |
| 123'456 123456 |
| 524'11.3 52411.3 |
| ३'११ 311 |
| |
| test parse with European-style comma/period |
| set locale pt |
| set pattern #,##0 |
| begin |
| parse output breaks |
| 123.456 123456 |
| 123,456 123.456 |
| 987,654.321 987.654 |
| 987,654 321 987.654 |
| 987.654,321 987654.321 |
| |
| test select |
| set locale sr |
| begin |
| format pattern plural |
| Inf 0 other |
| -Inf 0 other |
| NaN 0 other |
| Inf 0.0 other |
| -Inf 0.0 other |
| NaN 0.0 other |
| 1 0 one |
| 1 0.0 other |
| 2 0 few |
| 2 0.0 other |
| 2 0E0 other |
| 5.1 0.0 one |
| 5.09 0.0 one |
| |
| test parse currency ISO |
| set pattern 0.00 \u00a4\u00a4;(#) \u00a4\u00a4 |
| set locale en_GB |
| begin |
| parse output outputCurrency breaks |
| 53.45 fail GBP |
| £53.45 53.45 GBP |
| $53.45 53.45 USD C |
| 53.45 USD 53.45 USD |
| 53.45 GBP 53.45 GBP |
| USD 53.45 53.45 USD H |
| 53.45USD 53.45 USD H |
| USD53.45 53.45 USD |
| (7.92) USD -7.92 USD |
| (7.92) GBP -7.92 GBP |
| (7.926) USD -7.926 USD |
| (7.926 USD) -7.926 USD H |
| (USD 7.926) -7.926 USD H |
| USD (7.926) -7.926 USD H |
| USD (7.92) -7.92 USD H |
| (7.92)USD -7.92 USD H |
| USD(7.92) -7.92 USD H |
| (8) USD -8 USD |
| -8 USD -8 USD |
| 67 USD 67 USD |
| 53.45$ 53.45 USD CH |
| US Dollars 53.45 53.45 USD H |
| 53.45 US Dollars 53.45 USD |
| US Dollar 53.45 53.45 USD H |
| 53.45 US Dollar 53.45 USD |
| US Dollars53.45 53.45 USD |
| 53.45US Dollars 53.45 USD H |
| US Dollar53.45 53.45 USD |
| US Dollat53.45 fail USD |
| 53.45US Dollar 53.45 USD H |
| US Dollars (53.45) -53.45 USD H |
| (53.45) US Dollars -53.45 USD |
| (53.45) Euros -53.45 EUR |
| US Dollar (53.45) -53.45 USD H |
| (53.45) US Dollar -53.45 USD |
| US Dollars(53.45) -53.45 USD H |
| (53.45)US Dollars -53.45 USD H |
| US Dollar(53.45) -53.45 USD H |
| US Dollat(53.45) fail USD |
| (53.45)US Dollar -53.45 USD H |
| |
| |
| test parse currency ISO negative |
| set pattern 0.00 \u00a4\u00a4;-# \u00a4\u00a4 |
| set locale en_GB |
| begin |
| parse output outputCurrency breaks |
| 53.45 fail GBP |
| £53.45 53.45 GBP |
| $53.45 53.45 USD C |
| 53.45 USD 53.45 USD |
| 53.45 GBP 53.45 GBP |
| USD 53.45 53.45 USD H |
| 53.45USD 53.45 USD H |
| USD53.45 53.45 USD |
| -7.92 USD -7.92 USD |
| -7.92 GBP -7.92 GBP |
| -7.926 USD -7.926 USD |
| USD -7.926 -7.926 USD H |
| -7.92USD -7.92 USD H |
| USD-7.92 -7.92 USD H |
| -8 USD -8 USD |
| 67 USD 67 USD |
| 53.45$ 53.45 USD CH |
| US Dollars 53.45 53.45 USD H |
| 53.45 US Dollars 53.45 USD |
| US Dollar 53.45 53.45 USD H |
| 53.45 US Dollar 53.45 USD |
| US Dollars53.45 53.45 USD |
| 53.45US Dollars 53.45 USD H |
| US Dollar53.45 53.45 USD |
| US Dollat53.45 fail USD |
| 53.45US Dollar 53.45 USD H |
| |
| |
| test parse currency long |
| set pattern 0.00 \u00a4\u00a4\u00a4;(#) \u00a4\u00a4\u00a4 |
| set locale en_GB |
| begin |
| parse output outputCurrency breaks |
| // H throws a NullPointerException on the first case |
| 53.45 fail GBP |
| £53.45 53.45 GBP |
| $53.45 53.45 USD C |
| 53.45 USD 53.45 USD |
| 53.45 GBP 53.45 GBP |
| USD 53.45 53.45 USD H |
| 53.45USD 53.45 USD H |
| USD53.45 53.45 USD |
| (7.92) USD -7.92 USD |
| (7.92) GBP -7.92 GBP |
| (7.926) USD -7.926 USD |
| (7.926 USD) -7.926 USD H |
| (USD 7.926) -7.926 USD H |
| USD (7.926) -7.926 USD H |
| USD (7.92) -7.92 USD H |
| (7.92)USD -7.92 USD H |
| USD(7.92) -7.92 USD H |
| (8) USD -8 USD |
| -8 USD -8 USD |
| 67 USD 67 USD |
| // H throws a NullPointerException on the next case |
| 53.45$ 53.45 USD CH |
| US Dollars 53.45 53.45 USD H |
| 53.45 US Dollars 53.45 USD |
| US Dollar 53.45 53.45 USD H |
| 53.45 US Dollar 53.45 USD |
| US Dollars53.45 53.45 USD |
| 53.45US Dollars 53.45 USD H |
| US Dollar53.45 53.45 USD |
| US Dollat53.45 fail USD |
| 53.45US Dollar 53.45 USD H |
| |
| |
| test parse currency short |
| set pattern 0.00 \u00a4;(#) \u00a4 |
| set locale en_GB |
| begin |
| parse output outputCurrency breaks |
| 53.45 fail GBP |
| £53.45 53.45 GBP |
| $53.45 53.45 USD C |
| 53.45 USD 53.45 USD |
| 53.45 GBP 53.45 GBP |
| USD 53.45 53.45 USD H |
| 53.45USD 53.45 USD H |
| USD53.45 53.45 USD |
| (7.92) USD -7.92 USD |
| (7.92) GBP -7.92 GBP |
| (7.926) USD -7.926 USD |
| (7.926 USD) -7.926 USD H |
| (USD 7.926) -7.926 USD H |
| USD (7.926) -7.926 USD H |
| USD (7.92) -7.92 USD H |
| (7.92)USD -7.92 USD H |
| USD(7.92) -7.92 USD H |
| (8) USD -8 USD |
| -8 USD -8 USD |
| 67 USD 67 USD |
| 53.45$ 53.45 USD CH |
| US Dollars 53.45 53.45 USD H |
| 53.45 US Dollars 53.45 USD |
| US Dollar 53.45 53.45 USD H |
| 53.45 US Dollar 53.45 USD |
| US Dollars53.45 53.45 USD |
| 53.45US Dollars 53.45 USD H |
| US Dollar53.45 53.45 USD |
| US Dollat53.45 fail USD |
| 53.45US Dollar 53.45 USD H |
| |
| |
| test parse currency short prefix |
| set pattern \u00a40.00;(\u00a4#) |
| set locale en_GB |
| begin |
| parse output outputCurrency breaks |
| 53.45 fail GBP |
| £53.45 53.45 GBP |
| $53.45 53.45 USD C |
| 53.45 USD 53.45 USD |
| 53.45 GBP 53.45 GBP |
| USD 53.45 53.45 USD H |
| 53.45USD 53.45 USD H |
| USD53.45 53.45 USD |
| // C and P fail these because '(' is an incomplete prefix. |
| (7.92) USD -7.92 USD CHJP |
| (7.92) GBP -7.92 GBP CHJP |
| (7.926) USD -7.926 USD CHJP |
| (7.926 USD) -7.926 USD CHJP |
| (USD 7.926) -7.926 USD H |
| USD (7.926) -7.926 USD CHJP |
| USD (7.92) -7.92 USD CHJP |
| (7.92)USD -7.92 USD CHJP |
| USD(7.92) -7.92 USD CHJP |
| (8) USD -8 USD CHJP |
| -8 USD -8 USD |
| 67 USD 67 USD |
| 53.45$ 53.45 USD CH |
| US Dollars 53.45 53.45 USD H |
| 53.45 US Dollars 53.45 USD |
| US Dollar 53.45 53.45 USD H |
| 53.45 US Dollar 53.45 USD |
| US Dollars53.45 53.45 USD |
| 53.45US Dollars 53.45 USD H |
| US Dollar53.45 53.45 USD |
| 53.45US Dollar 53.45 USD H |
| |
| test format foreign currency |
| set locale fa_IR |
| set currency IRR |
| begin |
| pattern format output breaks |
| \u00a4\u00a4\u00a4 0.00;\u00a4\u00a4\u00a4 # 1235 \u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 \u06F1\u06F2\u06F3\u06F5 K |
| \u00a4\u00a4 0.00;\u00a4\u00a4 -# 1235 IRR \u06F1\u06F2\u06F3\u06F5 K |
| \u00a4 0.00;\u00a4 -# 1235 \u0631\u06cc\u0627\u0644 \u06F1\u06F2\u06F3\u06F5 K |
| |
| test parse foreign currency symbol |
| set pattern \u00a4 0.00;\u00a4 -# |
| set locale fa_IR |
| begin |
| parse output outputCurrency breaks |
| \u0631\u06cc\u0627\u0644 \u06F1\u06F2\u06F3\u06F5 1235 IRR |
| IRR \u06F1\u06F2\u06F3\u06F5 1235 IRR |
| // P fails here because this currency name is in the Trie only, but it has the same prefix as the non-Trie currency |
| \u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 \u06F1\u06F2\u06F3\u06F5 1235 IRR CJP |
| IRR 1235 1235 IRR |
| \u0631\u06cc\u0627\u0644 1235 1235 IRR |
| \u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 1235 1235 IRR CJP |
| |
| test parse foreign currency ISO |
| set pattern \u00a4\u00a4 0.00;\u00a4\u00a4 -# |
| set locale fa_IR |
| begin |
| parse output outputCurrency breaks |
| \u0631\u06cc\u0627\u0644 \u06F1\u06F2\u06F3\u06F5 1235 IRR |
| IRR \u06F1\u06F2\u06F3\u06F5 1235 IRR |
| \u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 \u06F1\u06F2\u06F3\u06F5 1235 IRR CJP |
| IRR 1235 1235 IRR |
| \u0631\u06cc\u0627\u0644 1235 1235 IRR |
| \u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 1235 1235 IRR CJP |
| |
| test parse foreign currency full |
| set pattern \u00a4\u00a4\u00a4 0.00;\u00a4\u00a4\u00a4 -# |
| set locale fa_IR |
| begin |
| parse output outputCurrency breaks |
| \u0631\u06cc\u0627\u0644 \u06F1\u06F2\u06F3\u06F5 1235 IRR |
| IRR \u06F1\u06F2\u06F3\u06F5 1235 IRR |
| \u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 \u06F1\u06F2\u06F3\u06F5 1235 IRR CJP |
| IRR 1235 1235 IRR |
| \u0631\u06cc\u0627\u0644 1235 1235 IRR |
| \u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 1235 1235 IRR CJP |
| |
| test parse currency with foreign symbols symbol english |
| set pattern \u00a4 0.00;\u00a4 (#) |
| set locale en_US |
| begin |
| parse output outputCurrency |
| EUR 7.82 7.82 EUR |
| \u20ac 7.82 7.82 EUR |
| Euro 7.82 7.82 EUR |
| Euros 7.82 7.82 EUR |
| |
| test parse currency with foreign symbols ISO english |
| set pattern \u00a4\u00a4 0.00;\u00a4\u00a4 (#) |
| set locale en_US |
| begin |
| parse output outputCurrency |
| EUR 7.82 7.82 EUR |
| \u20ac 7.82 7.82 EUR |
| Euro 7.82 7.82 EUR |
| Euros 7.82 7.82 EUR |
| |
| test parse currency with foreign symbols full english |
| set pattern \u00a4\u00a4\u00a4 0.00;\u00a4\u00a4\u00a4 (#) |
| set locale en_US |
| begin |
| parse output outputCurrency |
| EUR 7.82 7.82 EUR |
| \u20ac 7.82 7.82 EUR |
| Euro 7.82 7.82 EUR |
| Euros 7.82 7.82 EUR |
| |
| test parse currency without currency mode |
| // Should accept a symbol associated with the currency specified by the API, |
| // but should not traverse the full currency data. |
| set locale en_US |
| set pattern \u00a4#,##0.00 |
| begin |
| parse currency output breaks |
| $52.41 USD 52.41 |
| USD52.41 USD 52.41 K |
| \u20ac52.41 USD fail |
| EUR52.41 USD fail |
| $52.41 EUR fail |
| USD52.41 EUR fail |
| \u20ac52.41 EUR 52.41 K |
| EUR52.41 EUR 52.41 |
| |
| test parse currency ISO strict |
| set pattern 0.00 \u00a4\u00a4;(#) \u00a4\u00a4 |
| set locale en_US |
| set lenient 0 |
| begin |
| parse output outputCurrency breaks |
| $53.45 53.45 USD CJP |
| 53.45 USD 53.45 USD |
| USD 53.45 fail USD |
| 53.45USD fail USD |
| USD53.45 53.45 USD CJP |
| (7.92) USD -7.92 USD |
| (7.92) EUR -7.92 EUR |
| (7.926) USD -7.926 USD |
| (7.926 USD) fail USD |
| (USD 7.926) fail USD |
| USD (7.926) fail USD |
| USD (7.92) fail USD |
| (7.92)USD fail USD |
| USD(7.92) fail USD |
| (8) USD -8 USD |
| -8 USD fail USD H |
| 67 USD 67 USD |
| 53.45$ fail USD |
| US Dollars 53.45 fail USD |
| 53.45 US Dollars 53.45 USD |
| US Dollar 53.45 fail USD |
| 53.45 US Dollar 53.45 USD |
| US Dollars53.45 53.45 USD CJP |
| 53.45US Dollars fail USD |
| US Dollar53.45 53.45 USD CJP |
| US Dollat53.45 fail USD |
| 53.45US Dollar fail USD |
| US Dollars (53.45) fail USD |
| (53.45) US Dollars -53.45 USD |
| US Dollar (53.45) fail USD |
| (53.45) US Dollar -53.45 USD |
| US Dollars(53.45) fail USD |
| (53.45)US Dollars fail USD |
| US Dollar(53.45) fail USD |
| US Dollat(53.45) fail USD |
| (53.45)US Dollar fail USD |
| |
| test ticket 10436 |
| set locale en |
| set roundingMode ceiling |
| set minFractionDigits 0 |
| set maxFractionDigits 0 |
| begin |
| format output breaks |
| -0.99 -0 HK |
| |
| test parse decimalPatternMatchRequired |
| set locale en |
| set decimalPatternMatchRequired 1 |
| begin |
| pattern parse output breaks |
| // K doesn't support this feature. |
| 0 123 123 |
| 0 123. fail HK |
| 0 1.23 fail HK |
| 0 -513 -513 |
| 0 -513. fail HK |
| 0 -5.13 fail HK |
| 0.0 123 fail K |
| 0.0 123. 123 |
| 0.0 1.23 1.23 |
| 0.0 -513 fail K |
| 0.0 -513. -513 |
| 0.0 -5.13 -5.13 |
| |
| test parse minus sign |
| set locale en |
| set pattern # |
| begin |
| pattern parse output breaks |
| # -123 -123 |
| # - 123 -123 HK |
| # -123 -123 HK |
| # - 123 -123 HK |
| # 123- 123 |
| # 123 - 123 |
| #;#- 123- -123 |
| #;#- 123 - -123 HK |
| |
| test parse case sensitive |
| set locale en |
| set lenient 1 |
| set pattern Aa# |
| begin |
| parse parseCaseSensitive output breaks |
| Aa1.23 1 1.23 |
| Aa1.23 0 1.23 |
| AA1.23 1 fail |
| // H and K do not support case-insensitive parsing for prefix/suffix. |
| // H supports it for the exponent separator, but not K. |
| AA1.23 0 1.23 HK |
| aa1.23 1 fail |
| aa1.23 0 1.23 HK |
| Aa1.23E3 1 1230 |
| Aa1.23E3 0 1230 |
| Aa1.23e3 1 1.23 H |
| Aa1.23e3 0 1230 K |
| NaN 1 NaN K |
| NaN 0 NaN K |
| nan 1 fail |
| nan 0 NaN HK |
| |
| test parse infinity and scientific notation overflow |
| set locale en |
| set lenient 1 |
| begin |
| parse output breaks |
| NaN NaN K |
| // JDK returns zero |
| 1E999999999999999 Inf K |
| -1E999999999999999 -Inf K |
| 1E-99999999999999 0.0 |
| // Note: The test suite code doesn't properly check for 0.0 vs. -0.0 |
| -1E-99999999999999 -0.0 |
| 1E2147483648 Inf K |
| 1E2147483647 Inf K |
| // H, J and K get Infinity |
| 1E2147483646 1E+2147483646 HJK |
| 1E-2147483649 0 |
| 1E-2147483648 0 |
| // H and K return zero here |
| 1E-2147483647 1E-2147483647 HJK |
| 1E-2147483646 1E-2147483646 HJK |
| |
| test format push limits |
| set locale en |
| set minFractionDigits 2 |
| set roundingMode halfDown |
| begin |
| maxFractionDigits format output breaks |
| 100 987654321987654321 987654321987654321.00 |
| 100 987654321.987654321 987654321.987654321 |
| 100 9999999999999.9950000000001 9999999999999.9950000000001 |
| 2 9999999999999.9950000000001 10000000000000.00 |
| 2 9999999.99499999 9999999.99 |
| // K doesn't support halfDown rounding mode? |
| 2 9999999.995 9999999.99 K |
| 2 9999999.99500001 10000000.00 |
| 100 56565656565656565656565656565656565656565656565656565656565656 56565656565656565656565656565656565656565656565656565656565656.00 |
| 100 454545454545454545454545454545.454545454545454545454545454545 454545454545454545454545454545.454545454545454545454545454545 |
| 100 0.0000000000000000000123 0.0000000000000000000123 |
| 100 -78787878787878787878787878787878 -78787878787878787878787878787878.00 |
| 100 -8989898989898989898989.8989898989898989 -8989898989898989898989.8989898989898989 |
| |
| test ticket 11230 |
| set locale en |
| begin |
| pattern lenient parse output breaks |
| // Groups after the first group need 2 digits to be accepted. |
| // JDK does not see space as grouping and parses most of these as 9. |
| #,##0 1 9 9 9 H |
| #,##0 1 9 99 999 K |
| #,##0 1 9 999 9999 K |
| #,##0 1 9 9 9 9 H |
| #,##0 1 ,9 9 |
| #,##0 1 99,.0 99 |
| #,##0 1 9 9. 9 H |
| #,##0 1 9 99. 999 K |
| 0 1 9 9 9 |
| 0 1 9 99 9 |
| 0 1 9 999 9 |
| 0 1 9 9 9 9 |
| 0 1 ,9 fail |
| 0 1 99,.0 99 |
| 0 1 9 9. 9 |
| 0 1 9 99. 9 |
| #,##0 0 9 9 fail K |
| #,##0 0 9 99 fail K |
| #,##0 0 9 999 9999 K |
| #,##0 0 9 9 9 fail K |
| #,##0 0 ,9 fail K |
| #,##0 0 99,.0 fail K |
| #,##0 0 9 9. fail K |
| #,##0 0 9 99. fail K |
| 0 0 9 9 9 |
| 0 0 9 99 9 |
| 0 0 9 999 9 |
| 0 0 9 9 9 9 |
| 0 0 ,9 fail |
| 0 0 99,.0 99 |
| 0 0 9 9. 9 |
| 0 0 9 99. 9 |
| |
| test more strict grouping parse |
| set locale en |
| set pattern #,##,##0 |
| begin |
| lenient parse output breaks |
| 1 1,23,, 123 |
| 0 9999, 9999 |
| 0 1,23,, fail K |
| |
| test parse ignorables |
| set locale ar |
| // Note: Prefixes contain RLMs, as do some of the test cases. |
| set pattern x ab0c df |
| set negativePrefix y gh |
| set negativeSuffix i jk |
| begin |
| parse output breaks |
| x ab56c df 56 |
| x ab56c df 56 K |
| x ab56c df 56 K |
| x ab56c df 56 HK |
| x ab56c df 56 K |
| x ab56 56 HK |
| x a b56 56 HK |
| 56cdf 56 HK |
| 56c df 56 HK |
| 56cd f 56 HK |
| 56cdf 56 HK |
| 56cdf 56 HK |
| 56c df 56 HK |
| 56c df 56 HK |
| y gh56i jk -56 |
| y gh56i jk -56 K |
| y gh56i jk -56 K |
| y gh56i jk -56 HK |
| y gh56i jk -56 K |
| y gh56 -56 HK |
| y g h56 -56 HK |
| // S stops parsing after the 'i' for these and returns -56 |
| // C stops before the 'i' and gets 56 |
| 56ijk -56 HK |
| 56i jk -56 HK |
| 56ij k -56 HK |
| 56ijk -56 HK |
| 56ijk -56 HK |
| 56i jk -56 HK |
| 56i jk -56 HK |
| // S and C get 56 (accepts ' ' gs grouping); H and K get null |
| 5 6 fail CJP |
| 56 5 HK |
| |
| test parse spaces in grouping |
| // This test gives the ideal behavior of these cases, which |
| // none of the implementations currently support. |
| // Similar to the test above for ticket #11230 |
| set locale en |
| set pattern #,##0 |
| begin |
| parse output breaks |
| 1 2 1 H |
| 1 23 123 K |
| // K gets 1 here; doesn't pick up the grouping separator |
| 1 234 1234 K |
| |
| test rounding increment significant digits |
| // This test is for #13111 |
| set locale en |
| set pattern 0.1 |
| set useSigDigits 1 |
| set maxSigDigits 2 |
| begin |
| format output breaks |
| // C and J get "1" |
| // P gets "1.0" |
| // K gets "1.1" (??) |
| 0.975 0.98 CHJKP |
| |
| test lenient parse currency match |
| // This test is for #13112 |
| set locale en |
| set pattern ¤#,##0.00 |
| begin |
| parse output breaks |
| // H and K get null |
| 1.23!@#$%^ 1.23 HK |
| |
| test percentage parsing multiplier |
| // This test is for #13114 |
| set locale en |
| set pattern 0% |
| begin |
| parse output breaks |
| 55% 0.55 |
| // H and K get null |
| // C and P scale by 100 even if the percent sign is not present |
| 55 0.55 HK |
| |
| test trailing grouping separators in pattern |
| // This test is for #13115 |
| set locale en |
| begin |
| pattern format output breaks |
| $0M 123456 $123456M |
| // The following patterns are rejected as malformed. |
| $0,M 123456 fail |
| $0,,M 123456 fail |
| |
| test empty negative subpattern |
| // This test is for #13117 |
| set locale en |
| begin |
| pattern format output breaks |
| 0 -15 -15 |
| 0; -15 -15 |
| // H and K still prepend a '-' even though the pattern says otherwise |
| 0;0 -15 15 HK |
| |
| test percentage multiplier parsing |
| // This test is for #13129 |
| set locale en |
| set pattern 0% |
| begin |
| parse output breaks |
| 9223372036854775807% 92233720368547758.07 K |
| |
| test sign always shown |
| set locale en |
| set pattern 0 |
| set signAlwaysShown 1 |
| begin |
| format output breaks |
| // H and K do not support this feature |
| 42 +42 HK |
| 0 +0 HK |
| -42 -42 |
| |
| test parse strict with plus sign |
| set locale en |
| set pattern 0 |
| set signAlwaysShown 1 |
| begin |
| lenient parse output breaks |
| 1 42 42 |
| 1 -42 -42 |
| 1 +42 42 HK |
| 1 0 0 |
| 1 +0 0 HK |
| 0 42 fail HK |
| 0 -42 -42 |
| 0 +42 42 HK |
| 0 0 fail HK |
| 0 +0 0 HK |
| |
| test parse with scientific-separator-affix overlap |
| set locale en |
| begin |
| pattern lenient parse output breaks |
| 0E0','x 1 5E3,x 5000 |
| 0E0','x 0 5E3,x 5000 |
| 0E0'.'x 1 5E3.x 5000 |
| 0E0'.'x 0 5E3.x 5000 |
| |
| test parse() lowercase currency |
| set locale en |
| set pattern ¤¤0 |
| set currency USD |
| begin |
| parse output breaks |
| USD123 123 |
| USD 123 123 HK |
| usd123 123 K |
| usd 123 123 HK |
| Usd123 123 K |
| Usd 123 123 HK |
| // US$ is not used for US dollars in en-US |
| US$123 fail H |
| us$123 fail |
| Us$123 fail |
| 123 US dollars 123 K |
| 123 US DOLLARS 123 K |
| 123 us dollars 123 K |
| // Foreign currencies are not accepted in .parse() |
| GBP123 fail |
| gbp123 fail |
| British pounds 123 fail |
| british POUNDS 123 fail |
| |
| test parseCurrency() lowercase currency |
| set locale en |
| set pattern ¤¤0 |
| set currency USD |
| begin |
| parse output outputCurrency breaks |
| USD123 123 USD |
| USD 123 123 USD H |
| usd123 123 USD |
| usd 123 123 USD H |
| Usd123 123 USD |
| Usd 123 123 USD H |
| US$123 123 USD C |
| us$123 fail fail |
| Us$123 fail fail |
| 123 US dollars 123 USD |
| 123 US DOLLARS 123 USD |
| 123 us dollars 123 USD |
| GBP123 123 GBP |
| gbp123 123 GBP C |
| British pounds 123 123 GBP H |
| british POUNDS 123 123 GBP H |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |