tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

numberformattestspecification.txt (39817B)


      1 // Copyright (C) 2016 and later: Unicode, Inc. and others.
      2 // License & terms of use: http://www.unicode.org/copyright.html
      3 // Copyright (C) 2015-2016, International Business Machines
      4 // Corporation and others.  All Rights Reserved.
      5 //
      6 // This file is divided into test suites separated by whitespace. Each test
      7 // suite starts with the name of the test followed by global field settings
      8 // for that test suite. After the global settings, comes "begin", the
      9 // per-test field names, and finally the test specific field values, 1 test
     10 // per line.
     11 //
     12 // Field names:
     13 //  J = ICU4J (current)
     14 //  K = JDK (ignored if not OpenJDK 1.8)
     15 //  C = ICU4C (current)
     16 //  P = Properties-based ICU4J (bypasses DecimalFormat wrapper)
     17 //
     18 // For more information on the format of this file, including all the available
     19 // field names, please see
     20 // https://docs.google.com/document/d/1T2P0p953_Lh1pRwo-5CuPVrHlIBa_wcXElG-Hhg_WHM/edit?usp=sharing
     21 
     22 test plus sign
     23 set locale ar-EG
     24 set pattern +0;-#
     25 begin
     26 format	output	breaks
     27 6	\u061C+\u0666	K
     28 -6	\u061C-\u0666	K
     29 
     30 test basic patterns
     31 set locale fr_FR
     32 set format 1234.567
     33 begin
     34 pattern	output	breaks
     35 // K does not use \u202f narrow space
     36 #,##0.##	1\u202f234,57	K
     37 0.##	1234,57
     38 0	1235
     39 #,##0.###	1\u202f234,567	K
     40 ###0.######	1234,567
     41 ###0.0000#	1234,5670
     42 00000.0000	01234,5670
     43 #,##0.00 \u00a4	1\u202f234,57 \u20ac	K
     44 'tick''bitten '0.00	tick'bitten 1234,57
     45 'tick' 'bitten '0.00	tick bitten 1234,57
     46 
     47 
     48 test minimum and maximum fraction digits
     49 set locale en
     50 set minIntegerDigits 2
     51 set maxIntegerDigits 4
     52 set minFractionDigits 3
     53 set maxFractionDigits 5
     54 begin
     55 format	output
     56 6	06.000
     57 6.000005	06.000
     58 6.000006	06.00001
     59 1002003004005	4005.000
     60 -1002003004005	-4005.000
     61 12	12.000
     62 12345	2345.000
     63 72.1234	72.1234
     64 
     65 test patterns with no '0' symbols
     66 set locale en_US
     67 begin
     68 pattern	format	output	breaks
     69 #	514.23	514
     70 #	0.23	0
     71 #	0	0
     72 #	1	1
     73 ##.#	514.23	514.2
     74 ##.#	0.23	0.2
     75 ##.#	0	0
     76 ##.#	1	1
     77 #.#	514.23	514.2
     78 #.#	0.23	0.2
     79 #.#	0	0
     80 #.#	1	1
     81 .#	514.23	514.2
     82 .#	0.23	.2
     83 .#	0	.0
     84 .#	1	1.0
     85 #.	514.23	514.
     86 #.	0.23	0.
     87 #.	0	0.
     88 #.	1	1.
     89 .	514.23	514.
     90 .	0.23	0.
     91 .	0	0.
     92 .	1	1.
     93 
     94 test behavior on numbers approaching zero
     95 set locale en
     96 begin
     97 pattern	format	output	breaks
     98 #.##	0.01	0.01
     99 #.##	0.001	0
    100 #.##	0	0
    101 #.00	0.01	.01
    102 #.00	0.001	.00
    103 #.00	0	.00
    104 0.00	0.01	0.01
    105 0.00	0.001	0.00
    106 0.00	0	0.00
    107 
    108 // Not in official spec, but needed for backwards compatibility
    109 test patterns with leading grouping separator
    110 set locale en_US
    111 begin
    112 pattern	format	output	breaks
    113 ,##0	1234.56	1,235
    114 '#',##	3456	#34,56
    115 
    116 test patterns with valid and invalid quote marks
    117 set locale et
    118 begin
    119 pattern	format	output	breaks
    120 '#	1	fail
    121 ''#	1	'1
    122 '''#	1	fail
    123 ''''#	1	''1
    124 '''''#	1	fail
    125 '-''-'#	1	-'-1
    126 -'-'#	1	−-1
    127 '#'#	1	#1
    128 ''#''	1	'1'
    129 ''#-	1	'1−
    130 '-'#-	1	-1−
    131 -#'-'	1	−1-
    132 
    133 test int64
    134 set locale en
    135 begin
    136 format	output
    137 1002003004005	1002003004005
    138 -1002003004005	-1002003004005
    139 
    140 test rounding
    141 set locale fr
    142 begin
    143 pattern	format	output	breaks
    144 0.5	1.25	1,0	K
    145 0.5	1.75	2,0	K
    146 0.5	-1.25	-1,0	K
    147 00.5	-1.75	-02,0	K
    148 4	2.0	0	K
    149 4	6.0	8	K
    150 4	10.0	8	K
    151 2.70	99.0	99,90	K
    152 2.73	272.0	273,00	K
    153 #,#3.70	104.0	1\u202f03,60	K
    154 
    155 test significant digits
    156 set locale en
    157 set pattern #,#@,@###
    158 begin
    159 format	output	breaks
    160 7	7.0	K
    161 23	23	K
    162 100	100	K
    163 1000	1000	K
    164 10000	1,0000	K
    165 10001	1,0001	K
    166 10001.5	1,0002	K
    167 1234567	1,23,4600	K
    168 -1234567	-1,23,4600	K
    169 3.14159	3.1416	K
    170 
    171 test scientific notation
    172 set locale fr
    173 begin
    174 pattern	format	output	breaks
    175 0.00E0	12345	1,23E4
    176 000.00E0	12300	123,00E2
    177 000.0#E0	12300	123,0E2
    178 000.0#E0	12300.1	123,0E2
    179 000.0#E0	12301.0	123,01E2
    180 // JDK does not support exponent signs
    181 000.0#E+00	12301.0	123,01E+02	K
    182 // JDK gives 12,345E3. JDK seems to include the hashes in significant digits
    183 ##0.00E0	12345	12,3E3	K
    184 // JDK gives 12,3001E3
    185 ##0.0000E0	12300.1	12,300E3	K
    186 // JDK gives 12,3001E3
    187 ##0.000#E0	12300.1	12,30E3	K
    188 ##0.000#E0	12301	12,301E3
    189 0.05E0	12301.2	1,25E4	K
    190 ##0.000#E0	0.17	170,0E-3
    191 // JDK doesn't support significant digits in exponents
    192 @@@E0	6.235	6,24E0	K
    193 @@@E0	6235	6,24E3	K
    194 @@@#E0	6200	6,20E3	K
    195 @@@#E0	6201	6,201E3	K
    196 @@@#E0	6201.7	6,202E3	K
    197 @@@#E00	6201.7	6,202E03	K
    198 @@@#E+00	6201.7	6,202E+03	K
    199 // If no zeros are specified, significant digits is fraction length plus 1
    200 #.##E0	52413	5,24E4
    201 ###.##E0	52413	52,4E3	K
    202 #E0	52413	5,2413E4	K
    203 0E0	52413	5E4
    204 
    205 test scientific infinite precision
    206 // ICU-11511, ICU-7460, CLDR-10103
    207 set locale en
    208 begin
    209 pattern	format	output	breaks
    210 // From the spec:
    211 // "0.##E0 means a max of 3 significant digits."
    212 0.##E0	98760	9.88E4
    213 // "#.##E0 also means a max of 3 significant digits."
    214 #.##E0	98760	9.88E4
    215 // "#.0#E0 means a max of 2 significant digits."
    216 #.0#E0	98760	9.9E4	K
    217 // "0E0 means a max of 1 significant digit."
    218 0E0	98760	1E5
    219 // "#E0 means infinite precision."
    220 #E0	98760	9.876E4	K
    221 // "###E0 means engineering notation with infinite precision."
    222 ###E0	98760	98.76E3	K
    223 // Additional tests:
    224 ##0.#E0	98760	99E3	K
    225 ###.#E0	98760	99E3	K
    226 ##0E0	98760	100E3	K
    227 
    228 test percents
    229 set locale fr
    230 begin
    231 pattern	format	output	breaks
    232 0.0%	0.573	57,3%
    233 %0.0	0.573	%57,3
    234 p%p0.0	0.573	p%p57,3
    235 p'%'p0.0	0.573	p%p0,6
    236 %@@@@	0.0326	%3,260	K
    237 %#,@@@	15.43	%1\u202f540	K
    238 // JDK does not support rounding increments
    239 %#,##4.1	16.55	%1\u202f656,4	K
    240 // JDK gives %16,255E3
    241 %##0.00E0	162.55	%16,3E3	K
    242 
    243 test permille
    244 set locale fr
    245 begin
    246 pattern	format	output	breaks
    247 0.0\u2030	0.573	573,0‰
    248 \u20300.0	0.573	\u2030573,0
    249 p\u2030p0.0	0.573	p\u2030p573,0
    250 p'\u2030'p0.0	0.573	p\u2030p0,6
    251 \u2030@@@@	0.0326	\u203032,60	K
    252 \u2030#,@@@	15.43	\u203015\u202f400	K
    253 \u2030#,##4.1	16.55	\u203016\u202f551,7	K
    254 // JDK gives \u2030162,55E3
    255 \u2030##0.00E0	162.55	\u2030163E3	K
    256 
    257 test padding
    258 set locale fr_FR
    259 begin
    260 pattern	format	output	breaks
    261 // JDK does not seem to support padding
    262 $**####,##0	1234	$***1\u202f234	K
    263 *x$####,##0	1234	xxx$1\u202f234	K
    264 ####,##0*x$	1234	1\u202f234xxx$	K
    265 ####,##0$*x	1234	1\u202f234$xxx	K
    266 // JDK doesn't seem to handle suffixes correctly dropping the 'nx' entirely
    267 ####,##0$*x;ne#n	-1234	ne1\u202f234nx	K
    268 ####,##0$*x;n#'*'	-1234	n1\u202f234*xx	K
    269 *y%4.2######	4.33	yyyy%432,6	K
    270 // In J ICU adds padding as if 'EUR' is only 2 chars (2 * 0xa4)
    271 \u00a4\u00a4 **####0.00	433.0	EUR *433,00	K
    272 // P fails this one because the test code bypasses CurrencyUsage
    273 \u00a4\u00a4 **#######0	433.0	EUR *433,00	KP
    274 
    275 test padding and currencies
    276 begin
    277 locale	currency	pattern	format	output	breaks
    278 // In J, JPY is considered 2 char (2 * 0xa4) even though padding is done
    279 // after prefix. In C this test works.
    280 fr	JPY	\u00a4\u00a4 **#######0	433.22	JPY ****433	K
    281 // JDK doesn't correct rounding for currency, shows USD (433
    282 en	USD	\u00a4\u00a4 **#######0;\u00a4\u00a4 (#)	-433.22	USD (433.22)	K
    283 
    284 test currencies
    285 set locale fr
    286 set format 1234.567
    287 begin
    288 pattern	currency	output	breaks
    289 // JDK gives shows EUR instead of the euro symbol in this case
    290 #,##0.00 \u00a4	EUR	1\u202f234,57 \u20ac	K
    291 // JDK gives 1\u00A0234,57. JDK doesn't seem to correct rounding
    292 // based on currency.
    293 #,##0.00 \u00a4	JPY	1\u202f235 JPY	K
    294 
    295 test prefixes and suffixes
    296 set locale en
    297 set pattern 0.00+;(#)
    298 begin
    299 format	output	breaks
    300 7	7.00+
    301 -3.5	(3.50)
    302 
    303 test minimum grouping digits
    304 set locale en
    305 set pattern #,##0
    306 set minGroupingDigits 2
    307 begin
    308 format	output	breaks
    309 1000	1000	K
    310 10000	10,000
    311 100000	100,000
    312 1000000	1,000,000
    313 
    314 test min max fraction digits
    315 set locale en
    316 set pattern #,##0.###
    317 set format 1234.567
    318 begin
    319 minFractionDigits	maxFractionDigits	output
    320 0	0	1,235
    321 0	2	1,234.57
    322 4	5	1,234.5670
    323 
    324 test min max integer digits
    325 set locale en
    326 set pattern #,##0.###
    327 set format 1234.567
    328 begin
    329 minIntegerDigits	maxIntegerDigits	output
    330 0	0	.567
    331 0	3	234.567
    332 5	5	01,234.567
    333 
    334 test min max fraction digits scientific
    335 set locale en
    336 set pattern #E0
    337 set format 299792458.0
    338 begin
    339 minIntegerDigits	maxIntegerDigits	minFractionDigits	maxFractionDigits	output	breaks
    340 // JDK gives 2.99792458E8 (maxInt + maxFrac instead of minInt + maxFrac)
    341 1	99	0	5	2.99792E8	K
    342 // JDK gives .3E9 instead of unlimited precision.
    343 0	1	0	0	2.99792458E8	K
    344 1	1	0	0	3E8
    345 // JDK gives E0 instead of allowing for unlimited precision
    346 0	0	0	0	2.99792458E8	K
    347 // J gives 2.9979E8
    348 0	1	0	5	2.99792E8	K
    349 // JDK gives 300E6	
    350 0	3	0	0	299.792458E6	K
    351 // JDK gives 299.8E6 (maybe maxInt + maxFrac instead of minInt + maxFrac)?
    352 0	3	0	1	300E6	K
    353 // JDK gives 299.7925E6
    354 2	3	0	4	299.792E6	K
    355 // JDK gives 299.79246E6
    356 2	3	0	5	299.7925E6	K
    357 3	3	0	5	299.79246E6
    358 3	3	0	4	299.7925E6
    359 2	2	0	3	29.979E7
    360 4	4	0	0	2998E5
    361 0	0	1	5	.29979E9
    362 // JDK gives E0
    363 0	0	1	0	2.99792458E8	K
    364 // J gives 2.998E8
    365 0	0	0	4	.29979E9	K
    366 // According to the spec, if maxInt>minInt and minInt>1, then set
    367 // Context: #13289
    368 2	8	1	6	2.9979246E8	K
    369 // Treat max int digits > 8 as being the same as min int digits.
    370 // This behavior is not spelled out in the specification.
    371 // JDK fails here because it tries to use 9 + 6 = 15 sig digits.
    372 2	9	1	6	29.979246E7	K
    373 
    374 test ticket 20058
    375 set locale en
    376 begin
    377 pattern	format	output	breaks
    378 #00.0##E0	0	0.0E0	K
    379 #00.0##E0	1.2	1.2E0	K
    380 #00.0E0	0	0.0E0	K
    381 #00.0E0	1.2	1.2E0	K
    382 
    383 test significant digits scientific
    384 set locale en
    385 set pattern #E0
    386 set format 290000000.0
    387 begin
    388 minSigDigits	maxSigDigits	output	breaks
    389 0	1	3E8	K
    390 0	2	2.9E8	K
    391 0	3	2.9E8	K
    392 1	1	3E8	K
    393 1	2	2.9E8	K
    394 1	3	2.9E8	K
    395 2	2	2.9E8	K
    396 2	3	2.9E8	K
    397 3	3	2.90E8	K
    398 3	4	2.90E8	K
    399 
    400 test min max fraction digits scientific 2
    401 set locale en
    402 set pattern #E0
    403 set format 29979245.0
    404 begin
    405 minIntegerDigits	maxIntegerDigits	minFractionDigits	maxFractionDigits	output	breaks
    406 // JDK gives E0
    407 0	0	0	0	2.9979245E7	K
    408 // JDK gives .3E8
    409 0	1	0	0	2.9979245E7	K
    410 // JDK gives 2998E4.
    411 0	4	0	0	2997.9245E4	K
    412 
    413 test ticket 11524
    414 set locale en
    415 set pattern #,##0.###
    416 begin
    417 format	maxIntegerDigits	output	breaks
    418 123	1	3	
    419 // C obeys maxIntegerDigits and prints after the decimal place
    420 0	0	.0	KP
    421 // CJP ignore max integer if it is less than zero and prints "123"
    422 123	-2147483648	0	CJP
    423 12345	1	5	
    424 12345	-2147483648	0	CJP
    425 5.3	1	5.3	
    426 5.3	-2147483648	.3	CJP
    427 
    428 test patterns with zero
    429 set locale en
    430 set format 0
    431 begin
    432 pattern	output	breaks
    433 #.#	0
    434 #.	0.
    435 .#	.0
    436 #	0
    437 #,##0.00	0.00
    438 #,###.00	.00
    439 00.000E00	00.000E00
    440 0.####E0	0E0
    441 ##0.######E000	0E000
    442 
    443 test significant digits manually set
    444 set locale en_US
    445 set pattern 0.0
    446 set useSigDigits 1
    447 set minSigDigits 3
    448 set maxSigDigits 5
    449 begin
    450 format	output	breaks
    451 0.0012	0.00120	K
    452 0.00123	0.00123	K
    453 0.001234	0.001234	K
    454 0.0012345	0.0012345	K
    455 0.00123456	0.0012346	K
    456 -43	-43.0
    457 -43.7	-43.7
    458 -43.76	-43.76	K
    459 -43.762	-43.762	K
    460 -43.7626	-43.763	K
    461 
    462 test grouping used setters
    463 set locale en_US
    464 set pattern #,##0
    465 set format 12345
    466 begin
    467 output	useGrouping
    468 12,345
    469 12,345	1
    470 12345	0
    471 
    472 test grouping used setters in parsing
    473 set pattern #,##0
    474 begin
    475 locale	useGrouping	parse	output	breaks
    476 en_US	1	123,456	123456
    477 en_US	0	123,456	123
    478 en_US	1	123.456	123.456
    479 en_US	0	123.456	123.456
    480 it_IT	1	123,456	123.456
    481 it_IT	0	123,456	123.456
    482 it_IT	1	123.456	123456
    483 it_IT	0	123.456	123
    484 
    485 test no grouping in pattern with parsing
    486 set pattern 0
    487 begin
    488 locale	parse	output	breaks
    489 en_US	123,456	123
    490 en_US	123.456	123.456
    491 fr_FR	123,456	123.456
    492 fr_FR	123.456	123
    493 
    494 test grouping setters
    495 set locale en_US
    496 set pattern 0
    497 set format 123456789
    498 set useGrouping 1
    499 begin
    500 output	grouping	grouping2	breaks
    501 1,2345,6789	4
    502 1,23,45,6789	4	2	K
    503 
    504 test grouping setters with min grouping digits
    505 set locale en_US
    506 set pattern 0
    507 set format 123456789
    508 set useGrouping 1
    509 begin
    510 output	grouping	grouping2	minGroupingDigits	breaks
    511 1,23,45,6789	4	2	2	K
    512 123,456789	6	6	3
    513 123456789	6	6	4	K
    514 
    515 test multiplier setters
    516 set locale en_US
    517 begin
    518 format	multiplier	output	breaks
    519 23	-12	-276
    520 23	-1	-23
    521 // J (current ICU4J) throws exception on zero multiplier.
    522 // ICU4C prints 23.
    523 // Q multiplies by zero and prints 0.
    524 23	0	0	CJ
    525 23	1	23
    526 23	12	276
    527 -23	12	-276
    528 -23	-12	276
    529 
    530 test rounding setters
    531 set locale en_US
    532 set pattern 0.0#
    533 set roundingIncrement 0.25
    534 begin
    535 format	output	breaks
    536 -0.35	-0.25	K
    537 0.35	0.25	K
    538 // P doesn't support mixing minFrac with roundingIncrement (prints 0.50).
    539 0.39	0.5	JKP
    540 0.62	0.5	JKP
    541 0.63	0.75	K
    542 
    543 test padding setters
    544 set locale en_US
    545 set pattern bill0
    546 set format 1357
    547 begin
    548 padCharacter	formatWidth	output	breaks
    549 *	8	bill1357
    550 *	9	*bill1357	K
    551 ^	10	^^bill1357	K
    552 
    553 test use scientific setter
    554 set locale en_US
    555 set pattern 0.00
    556 set format 186283
    557 begin
    558 output	useScientific	breaks
    559 186283.00
    560 1.86E5	1	K
    561 186283.00	0
    562 
    563 test rounding mode setters
    564 set locale en_US
    565 set pattern 0.5
    566 begin
    567 format	roundingMode	output	breaks
    568 1.24	halfUp	1.0	K
    569 1.25	halfUp	1.5
    570 1.25	halfDown	1.0	K
    571 1.26	halfDown	1.5
    572 1.25	halfEven	1.0	K
    573 -1.01	up	-1.5
    574 -1.49	down	-1.0	K
    575 1.01	up	1.5
    576 1.49	down	1.0	K
    577 -1.01	ceiling	-1.0	K
    578 -1.49	floor	-1.5
    579 
    580 test currency usage setters
    581 set locale CH
    582 set pattern \u00a4\u00a4 0
    583 begin
    584 format	currency	currencyUsage	output	breaks
    585 0.37	CHF	standard	CHF 0.37	K
    586 0.37	CHF	cash	CHF 0.35	K
    587 1.234	CZK	standard	CZK 1.23	K
    588 1.234	CZK	cash	CZK 1
    589 
    590 test currency usage to pattern
    591 set locale en
    592 begin
    593 currency	currencyUsage	toPattern	breaks
    594 // These work in J, but it prepends an extra hash sign to the pattern.
    595 // K does not support this feature.
    596 USD	standard	0.00	K
    597 CHF	standard	0.00	K
    598 CZK	standard	0.00	K
    599 USD	cash	0.00	K
    600 CHF	cash	0.05	K
    601 CZK	cash	0	K
    602 
    603 test currency rounding
    604 set locale en
    605 set currency USD
    606 begin
    607 pattern	format	output	breaks
    608 #	123	123	P
    609 // Currency rounding should always override the pattern.
    610 // K prints the currency in ISO format for some reason.
    611 \u00a4#	123	$123.00	K
    612 \u00a4#.000	123	$123.00	K
    613 \u00a4#.##	123	$123.00	K
    614 
    615 test exponent parameter setters
    616 set locale en_US
    617 set pattern 0.##E0
    618 set format 299792458
    619 begin
    620 decimalSeparatorAlwaysShown	exponentSignAlwaysShown	minimumExponentDigits	output	breaks
    621 0	0	2	3E08	K
    622 0	1	3	3E+008	K
    623 // decimalSeparatorAlwaysShown K=JDK; C=ICU4C; J=ICU4J
    624 // See ticket 11621
    625 1	0	2	3.E08	K
    626 1	1	3	3.E+008	K
    627 1	0	1	3.E8
    628 0	0	1	3E8
    629 
    630 test exponent decimalSeparatorAlwaysShown default
    631 set locale en_US
    632 set pattern 0.##E0
    633 begin
    634 format	output	decimalSeparatorAlwaysShown	breaks
    635 // decimalSeparatorAlwaysShown off by default
    636 299792458	3E8
    637 299000000	2.99E8
    638 299792458	3.E8	1
    639 
    640 test pad position setters
    641 set locale en_US
    642 set pattern **[#####0.##];((#))
    643 begin
    644 format	padPosition	output	breaks
    645 12.34	beforePrefix	****[12.34]	K
    646 12.34	afterPrefix	[****12.34]	K
    647 12.34	beforeSuffix	[12.34****]	K
    648 12.34	afterSuffix	[12.34]****	K
    649 -12.34	beforePrefix	**((12.34))	K
    650 -12.34	afterPrefix	((**12.34))	K
    651 -12.34	beforeSuffix	((12.34**))	K
    652 -12.34	afterSuffix	((12.34))**	K
    653 
    654 test affix setters
    655 set locale fr_FR
    656 set currency EUR
    657 set pattern 0.00
    658 begin
    659 format	positivePrefix	positiveSuffix	negativePrefix	negativeSuffix	output
    660 12.34	%				%12,34
    661 12.34		\u00a4\u00a4			12,34\u00a4\u00a4
    662 12.34			-	+	12,34
    663 -12.34			-	+	-12,34+
    664 -12.34			\u00a4		\u00a412,34
    665 12.34			\u00a4		12,34
    666 -12.34				%	12,34%
    667 12.34				%	12,34
    668 
    669 test more affix setters
    670 set locale fr_FR
    671 set pattern %0.00
    672 begin
    673 format	positivePrefix	negativePrefix	output
    674 0.648	booya	cooya	booya64,80
    675 
    676 test nan and infinity
    677 set locale en_US
    678 set pattern [0.00];(#)
    679 begin
    680 format	output	breaks
    681 Inf	[\u221e]
    682 -Inf	(\u221e)
    683 // J does not print the affixes
    684 // K prints \uFFFD
    685 NaN	[NaN]	K
    686 
    687 test nan and infinity with multiplication
    688 set locale en
    689 set multiplier 100
    690 begin
    691 format	output	breaks
    692 Inf	\u221e
    693 -Inf	-\u221e
    694 NaN	NaN
    695 
    696 test nan and infinity with padding
    697 set locale en_US
    698 set pattern $$$0.00$
    699 set formatWidth 8
    700 begin
    701 format	padPosition	output	breaks
    702 Inf	beforePrefix	   $$$\u221e$	K
    703 Inf	afterPrefix	$$$   \u221e$	K
    704 Inf	beforeSuffix	$$$\u221e   $	K
    705 Inf	afterSuffix	$$$\u221e$   	K
    706 // J does not print the affixes
    707 // K prints \uFFFD
    708 NaN	beforePrefix	 $$$NaN$	K
    709 NaN	afterPrefix	$$$ NaN$	K
    710 NaN	beforeSuffix	$$$NaN $	K
    711 NaN	afterSuffix	$$$NaN$ 	K
    712 
    713 test apply formerly localized patterns
    714 begin
    715 // documentation says localizedPattern is not supported, change to pattern
    716 locale	pattern	format	output	breaks
    717 en	#0%	0.4376	44%
    718 fa	\u0025\u00a0\u0023\u0030	0.4376	\u066a\u00a0\u06f4\u06f4
    719 
    720 test localized pattern basic symbol coverage
    721 begin
    722 locale	localizedPattern	toPattern	breaks
    723 it	#.##0,00	#,##0.00
    724 sl	#.##0;#.##0−	#,##0;#,##0-
    725 en_SE	0,00×10^0;0,00×10^0-	0.00E0;0.00E0-
    726 // JDK does not seem to transform the digits in localized patterns
    727 ar_SA	#\u066C##\u0660\u066B\u0660\u0660;a#	#,##0.00;a#,##0.00	K
    728 
    729 test toPattern
    730 set locale en
    731 begin
    732 pattern	toPattern	breaks
    733 // All of the C and S failures in this section are because of functionally equivalent patterns
    734 // JDK doesn't support any patterns with padding or both negative prefix and suffix
    735 **0,000	**0,000	K
    736 **##0,000	**##0,000	K
    737 **###0,000	**###0,000	K
    738 **####0,000	**#,##0,000	CJKP
    739 ###,000.	#,000.
    740 0,000	#0,000	CJP
    741 .00	#.00
    742 000	#000	CJP
    743 000,000	#,000,000	CJP
    744 pp#,000	pp#,000
    745 00.##	#00.##	CJP
    746 #,#00.025	#,#00.025
    747 // No secondary grouping in JDK
    748 #,##,###.02500	#,##,###.02500	K
    749 pp#,000;(#)	pp#,000;(#,000)
    750 **####,##,##0.0##;(#)	**#,##,##,##0.0##;**(##,##,##0.0##)	CJKP
    751 // No significant digits in JDK
    752 @@###	@@###	K
    753 @,@#,###	@,@#,###	K
    754 0.00E0	0.00E0
    755 // The following one works in JDK, probably because
    756 // it just returns the same string
    757 @@@##E0	@@@##E0
    758 ###0.00#E0	###0.00#E0
    759 ##00.00#E0	##00.00#E0
    760 0.00E+00	0.00E+00	K
    761 000.00E00	000.00E00
    762 ###0.00#E00	###0.00#E00
    763 
    764 test parse
    765 set locale en
    766 set pattern +#,##0.0###;(#)
    767 begin
    768 parse	output	breaks
    769 +5,347.25	5347.25
    770 +5,347,.25	5347.25
    771 +5,347,	5347
    772 +5347,,,	5347
    773 +5347,,,d8	5347
    774 (5,347.25)	-5347.25
    775 5,347.25	5347.25	K
    776 // JDK 11 stopped parsing this
    777 (5,347.25	-5347.25	K
    778 // S is successful at parsing this as -5347.25 in lenient mode
    779 -5,347.25	-5347.25	K
    780 +3.52E4	35200
    781 (34.8E-3)	-0.0348
    782 // JDK stops parsing at the spaces. JDK doesn't see space as a grouping separator
    783 (34  25E-1)	-342.5	K
    784 (34,,25E-1)	-342.5
    785 // Trailing grouping separators are not OK.
    786 // C/J/P stop at the offending separator.
    787 // JDK 11 gets this right
    788 (34,,25,E-1)	fail	CJP
    789 (34,,25,E-1)	-3425	K
    790 (34  25 E-1)	-342.5	K
    791 (34,,25 E-1)	-342.5	K
    792 // Spaces are not allowed after exponent symbol
    793 // C parses up to the E
    794 (34  25E -1)	-3425	K
    795 +3.52EE4	3.52
    796 +1,234,567.8901	1234567.8901
    797 +1,23,4567.8901	1234567.8901
    798 // Fraction grouping is disabled by default
    799 +1,23,4567.89,01	1234567.89
    800 +1,23,456.78.9	123456.78
    801 +12.34,56	12.34
    802 +79,,20,33	792033
    803 // JDK gets 79
    804 +79  20 33	792033	K
    805 // Parsing stops at comma as it is different from other separators
    806 +79  20,33	7920	K
    807 +79,,20 33	7920
    808 +  79	79	K
    809 +,79,,20,33	792033
    810 +7920d3	7920
    811 // Whitespace immediately after prefix doesn't count as digit separator in C
    812 + ,79,,20,33	792033	K
    813 (  19 45)	-1945	K
    814 // C allows trailing separators when there is a prefix and suffix.
    815 (  19 45 )	-1945	K
    816 (,,19,45)	-1945
    817 // C parses to the spaces
    818 // JDK 11 stopped parsing this
    819 (,,19 45)	-19	K
    820 (  19,45)	-1945	K
    821 (,,19,45,)	-1945	K
    822 // C will parse up to the letter.
    823 (,,19,45,d1)	-1945	K
    824 (,,19,45d1)	-1945	K
    825 (  19 45 d1)	-1945	K
    826 (  19 45d1)	-1945	K
    827 (19,45,.25)	-1945.25
    828 // 2nd decimal points are ignored
    829 +4.12.926	4.12
    830 
    831 test parse suffix
    832 set locale en
    833 set pattern #,##0.0###+;#-
    834 begin
    835 parse	output	breaks
    836 // J and K just bail.
    837 3426	3426	K
    838 3426+	3426
    839 // J bails; K sees -34
    840 34 d1+	34	K
    841 // JDK sees this as -1234 for some reason
    842 1,234,,,+	1234	K
    843 1,234-	-1234
    844 // C and P bail because of trailing separators
    845 1,234,-	-1234	CJKP
    846 1234  -	-1234	K
    847 
    848 
    849 
    850 test parse strict
    851 set locale en
    852 set pattern +#,##,##0.0###;(#)
    853 set lenient 0
    854 set minGroupingDigits 2
    855 begin
    856 parse	output	breaks
    857 +123d5	123
    858 +5347.25	5347.25
    859 // separators in wrong place cause failure, no separators ok.
    860 +65,347.25	65347.25
    861 (65347.25)	-65347.25
    862 (65,347.25)	-65347.25
    863 // JDK does allow separators in the wrong place and parses as -5347.25
    864 (53,47.25)	fail	K
    865 // strict requires prefix or suffix, except in C
    866 65,347.25	fail
    867 +3.52E4	35200
    868 (34.8E-3)	-0.0348
    869 (3425E-1)	-342.5
    870 // Strict doesn't allow separators in sci notation.
    871 (63,425)	-63425
    872 (63,425E-1)	-6342.5
    873 // Both prefix and suffix needed for strict.
    874 (3425E-1	fail
    875 +3.52EE4	3.52
    876 +12,34,567.8901	1234567.8901
    877 // With strict digit separators don't have to be the right type
    878 // JDK doesn't acknowledge space as a separator
    879 +12 34 567.8901	12
    880 // In general the grouping separators have to match their expected
    881 // location exactly. The only exception is when string being parsed
    882 // have no separators at all.
    883 +12,345.67	12345.67
    884 // JDK doesn't require separators to be in the right place.
    885 +1,23,4567.8901	fail	K
    886 +1,234,567.8901	fail	K
    887 +1234,567.8901	fail	K
    888 +1,234567.8901	fail	K
    889 +1234567.8901	1234567.8901
    890 // Minimum grouping is not satisfied below, but that's ok
    891 // because minimum grouping is optional.
    892 +1,234.5	1234.5
    893 // Comma after decimal means parse to a comma
    894 +1,23,456.78,9	123456.78
    895 +1,23,456.78.9	123456.78
    896 +79	79
    897 +79	79
    898 + 79	fail
    899 (1,945d1)	fail
    900 
    901 test parse strict scientific
    902 // See #13737: Old behavior should be retained in this case
    903 set locale en
    904 set pattern #E0
    905 set lenient 0
    906 begin
    907 parse	output	breaks
    908 123	123
    909 123E1	1230
    910 123E0	123
    911 123E	123
    912 
    913 test parse strict without prefix/suffix
    914 set locale en
    915 set pattern #
    916 set lenient 0
    917 begin
    918 parse	output	breaks
    919 12.34	12.34
    920 -12.34	-12.34
    921 // The following case passes only when setSignAlwaysShown is enabled
    922 +12.34	fail
    923 $12.34	fail
    924 
    925 test parse integer only
    926 set locale en
    927 set pattern 0.00
    928 set parseIntegerOnly 1
    929 begin
    930 parse	output	breaks
    931 35	35
    932 +35	35	K
    933 -35	-35
    934 2.63	2
    935 -39.99	-39
    936 
    937 test parse no exponent flag
    938 set pattern 0
    939 set locale en
    940 begin
    941 parseNoExponent	parse	output	breaks
    942 // JDK doesn't allow lowercase exponent but ICU4J and ICU4C do.
    943 0	5e2	500	K
    944 0	5.3E2	530
    945 // See ticket 11725
    946 1	5e2	5
    947 1	5.3E2	5.3	K
    948 
    949 test parse currency fail
    950 set pattern 0
    951 set locale en
    952 begin
    953 parse	output	outputCurrency	breaks
    954 // Fixed in ticket 11735
    955 53.45	fail	USD
    956 
    957 test parse strange prefix
    958 set locale en
    959 set positivePrefix dd
    960 set negativePrefix ddd
    961 begin
    962 parse	output
    963 dd4582	4582
    964 ddd4582	-4582
    965 
    966 test parse strange suffix
    967 set locale en
    968 set positiveSuffix dd
    969 set negativePrefix 
    970 set negativeSuffix ddd
    971 begin
    972 parse	output
    973 4582dd	4582
    974 4582ddd	-4582
    975 
    976 test really strange suffix
    977 set locale en
    978 set positiveSuffix 9K
    979 set negativePrefix 
    980 set negativeSuffix 9N
    981 begin
    982 parse	output	breaks
    983 // A non-greedy parse is required to pass these cases.
    984 // All of the implementations being tested are greedy.
    985 6549K	654	CJKP
    986 6549N	-654	CJKP
    987 
    988 test really strange prefix
    989 set locale en
    990 set positivePrefix 82
    991 set negativePrefix 28
    992 begin
    993 parse	output
    994 8245	45
    995 2845	-45
    996 
    997 test parse pattern with quotes
    998 set locale en
    999 set pattern '-'#y
   1000 begin
   1001 parse	output	breaks
   1002 -45y	45
   1003 
   1004 test parse with locale symbols
   1005 // The grouping separator in it_CH is an apostrophe
   1006 set locale it_CH
   1007 set pattern #,##0
   1008 begin
   1009 parse	output	breaks
   1010 १३	13	
   1011 १३.३१‍	13.31	
   1012 // JDK 11 parses this as 123
   1013 123'456	123456	K
   1014 524'11.3	52411.3	K
   1015 ३'११‍	311	K
   1016 
   1017 test parse with European-style comma/period
   1018 set locale pt
   1019 set pattern #,##0
   1020 begin
   1021 parse	output	breaks
   1022 123.456	123456
   1023 123,456	123.456
   1024 987,654.321	987.654
   1025 987,654 321	987.654
   1026 987.654,321	987654.321
   1027 
   1028 test select
   1029 set locale sr
   1030 begin
   1031 format	pattern	plural
   1032 Inf	0	other
   1033 -Inf	0	other
   1034 NaN	0	other
   1035 Inf	0.0	other
   1036 -Inf	0.0	other
   1037 NaN	0.0	other
   1038 1	0	one
   1039 1	0.0	other
   1040 2	0	few
   1041 2	0.0	other
   1042 2	0E0	other
   1043 5.1	0.0	one
   1044 5.09	0.0	one
   1045 
   1046 test parse currency ISO
   1047 set pattern 0.00 \u00a4\u00a4;(#) \u00a4\u00a4
   1048 set locale en_GB
   1049 begin
   1050 parse	output	outputCurrency	breaks
   1051 53.45	fail	GBP
   1052 £53.45	53.45	GBP
   1053 $53.45	53.45	USD	C
   1054 53.45 USD	53.45	USD
   1055 53.45 GBP	53.45	GBP
   1056 USD 53.45	53.45	USD
   1057 53.45USD	53.45	USD
   1058 USD53.45	53.45	USD
   1059 (7.92) USD	-7.92	USD
   1060 (7.92) GBP	-7.92	GBP
   1061 (7.926) USD	-7.926	USD
   1062 (7.926 USD)	-7.926	USD
   1063 (USD 7.926)	-7.926	USD
   1064 USD (7.926)	-7.926	USD
   1065 USD (7.92)	-7.92	USD
   1066 (7.92)USD	-7.92	USD
   1067 USD(7.92)	-7.92	USD
   1068 (8) USD	-8	USD
   1069 -8 USD	-8	USD
   1070 67 USD	67	USD
   1071 53.45$	53.45	USD	C
   1072 US Dollars 53.45	53.45	USD
   1073 53.45 US Dollars	53.45	USD
   1074 US Dollar 53.45	53.45	USD
   1075 53.45 US Dollar	53.45	USD
   1076 US Dollars53.45	53.45	USD
   1077 53.45US Dollars	53.45	USD
   1078 US Dollar53.45	53.45	USD
   1079 US Dollat53.45	fail	USD
   1080 53.45US Dollar	53.45	USD
   1081 US Dollars (53.45)	-53.45	USD
   1082 (53.45) US Dollars	-53.45	USD
   1083 (53.45) Euros	-53.45	EUR
   1084 US Dollar (53.45)	-53.45	USD
   1085 (53.45) US Dollar	-53.45	USD
   1086 US Dollars(53.45)	-53.45	USD
   1087 (53.45)US Dollars	-53.45	USD
   1088 US Dollar(53.45)	-53.45	USD
   1089 US Dollat(53.45)	fail	USD
   1090 (53.45)US Dollar	-53.45	USD
   1091 
   1092 
   1093 test parse currency ISO negative
   1094 set pattern 0.00 \u00a4\u00a4;-# \u00a4\u00a4
   1095 set locale en_GB
   1096 begin
   1097 parse	output	outputCurrency	breaks
   1098 53.45	fail	GBP
   1099 £53.45	53.45	GBP
   1100 $53.45	53.45	USD	C
   1101 53.45 USD	53.45	USD
   1102 53.45 GBP	53.45	GBP
   1103 USD 53.45	53.45	USD
   1104 53.45USD	53.45	USD
   1105 USD53.45	53.45	USD
   1106 -7.92 USD	-7.92	USD
   1107 -7.92 GBP	-7.92	GBP
   1108 -7.926 USD	-7.926	USD
   1109 USD -7.926	-7.926	USD
   1110 -7.92USD	-7.92	USD
   1111 USD-7.92	-7.92	USD
   1112 -8 USD	-8	USD
   1113 67 USD	67	USD
   1114 53.45$	53.45	USD	C
   1115 US Dollars 53.45	53.45	USD
   1116 53.45 US Dollars	53.45	USD
   1117 US Dollar 53.45	53.45	USD
   1118 53.45 US Dollar	53.45	USD
   1119 US Dollars53.45	53.45	USD
   1120 53.45US Dollars	53.45	USD
   1121 US Dollar53.45	53.45	USD
   1122 US Dollat53.45	fail	USD
   1123 53.45US Dollar	53.45	USD
   1124 
   1125 
   1126 test parse currency long
   1127 set pattern 0.00 \u00a4\u00a4\u00a4;(#) \u00a4\u00a4\u00a4
   1128 set locale en_GB
   1129 begin
   1130 parse	output	outputCurrency	breaks
   1131 53.45	fail	GBP
   1132 £53.45	53.45	GBP
   1133 $53.45	53.45	USD	C
   1134 53.45 USD	53.45	USD
   1135 53.45 GBP	53.45	GBP
   1136 USD 53.45	53.45	USD
   1137 53.45USD	53.45	USD
   1138 USD53.45	53.45	USD
   1139 (7.92) USD	-7.92	USD
   1140 (7.92) GBP	-7.92	GBP
   1141 (7.926) USD	-7.926	USD
   1142 (7.926 USD)	-7.926	USD
   1143 (USD 7.926)	-7.926	USD
   1144 USD (7.926)	-7.926	USD
   1145 USD (7.92)	-7.92	USD
   1146 (7.92)USD	-7.92	USD
   1147 USD(7.92)	-7.92	USD
   1148 (8) USD	-8	USD
   1149 -8 USD	-8	USD
   1150 67 USD	67	USD
   1151 53.45$	53.45	USD	C
   1152 US Dollars 53.45	53.45	USD
   1153 53.45 US Dollars	53.45	USD
   1154 US Dollar 53.45	53.45	USD
   1155 53.45 US Dollar	53.45	USD
   1156 US Dollars53.45	53.45	USD
   1157 53.45US Dollars	53.45	USD
   1158 US Dollar53.45	53.45	USD
   1159 US Dollat53.45	fail	USD
   1160 53.45US Dollar	53.45	USD
   1161 
   1162 
   1163 test parse currency short
   1164 set pattern 0.00 \u00a4;(#) \u00a4
   1165 set locale en_GB
   1166 begin
   1167 parse	output	outputCurrency	breaks
   1168 53.45	fail	GBP
   1169 £53.45	53.45	GBP
   1170 $53.45	53.45	USD	C
   1171 53.45 USD	53.45	USD
   1172 53.45 GBP	53.45	GBP
   1173 USD 53.45	53.45	USD
   1174 53.45USD	53.45	USD
   1175 USD53.45	53.45	USD
   1176 (7.92) USD	-7.92	USD
   1177 (7.92) GBP	-7.92	GBP
   1178 (7.926) USD	-7.926	USD
   1179 (7.926 USD)	-7.926	USD
   1180 (USD 7.926)	-7.926	USD
   1181 USD (7.926)	-7.926	USD
   1182 USD (7.92)	-7.92	USD
   1183 (7.92)USD	-7.92	USD
   1184 USD(7.92)	-7.92	USD
   1185 (8) USD	-8	USD
   1186 -8 USD	-8	USD
   1187 67 USD	67	USD
   1188 53.45$	53.45	USD	C
   1189 US Dollars 53.45	53.45	USD
   1190 53.45 US Dollars	53.45	USD
   1191 US Dollar 53.45	53.45	USD
   1192 53.45 US Dollar	53.45	USD
   1193 US Dollars53.45	53.45	USD
   1194 53.45US Dollars	53.45	USD
   1195 US Dollar53.45	53.45	USD
   1196 US Dollat53.45	fail	USD
   1197 53.45US Dollar	53.45	USD
   1198 
   1199 
   1200 test parse currency short prefix
   1201 set pattern \u00a40.00;(\u00a4#)
   1202 set locale en_GB
   1203 begin
   1204 parse	output	outputCurrency	breaks
   1205 53.45	fail	GBP
   1206 £53.45	53.45	GBP
   1207 $53.45	53.45	USD	C
   1208 53.45 USD	53.45	USD
   1209 53.45 GBP	53.45	GBP
   1210 USD 53.45	53.45	USD
   1211 53.45USD	53.45	USD
   1212 USD53.45	53.45	USD
   1213 // C and P fail these because '(' is an incomplete prefix.
   1214 (7.92) USD	-7.92	USD	CJP
   1215 (7.92) GBP	-7.92	GBP	CJP
   1216 (7.926) USD	-7.926	USD	CJP
   1217 (7.926 USD)	-7.926	USD	CJP
   1218 (USD 7.926)	-7.926	USD
   1219 USD (7.926)	-7.926	USD	CJP
   1220 USD (7.92)	-7.92	USD	CJP
   1221 (7.92)USD	-7.92	USD	CJP
   1222 USD(7.92)	-7.92	USD	CJP
   1223 (8) USD	-8	USD	CJP
   1224 -8 USD	-8	USD
   1225 67 USD	67	USD
   1226 53.45$	53.45	USD	C
   1227 US Dollars 53.45	53.45	USD
   1228 53.45 US Dollars	53.45	USD
   1229 US Dollar 53.45	53.45	USD
   1230 53.45 US Dollar	53.45	USD
   1231 US Dollars53.45	53.45	USD
   1232 53.45US Dollars	53.45	USD
   1233 US Dollar53.45	53.45	USD
   1234 53.45US Dollar	53.45	USD
   1235 
   1236 test format foreign currency
   1237 set locale fa_IR
   1238 set currency IRR
   1239 begin
   1240 pattern	format	output	breaks
   1241 \u00a4\u00a4\u00a4 0.00;\u00a4\u00a4\u00a4 #	1235	\u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 \u06F1\u06F2\u06F3\u06F5	K
   1242 \u00a4\u00a4 0.00;\u00a4\u00a4 -#	1235	IRR \u06F1\u06F2\u06F3\u06F5	K
   1243 \u00a4 0.00;\u00a4 -#	1235	\u0631\u06cc\u0627\u0644 \u06F1\u06F2\u06F3\u06F5	K
   1244 
   1245 test parse foreign currency symbol
   1246 set pattern \u00a4 0.00;\u00a4 -#
   1247 set locale fa_IR
   1248 begin
   1249 parse	output	outputCurrency	breaks
   1250 \u0631\u06cc\u0627\u0644 \u06F1\u06F2\u06F3\u06F5	1235	IRR
   1251 IRR \u06F1\u06F2\u06F3\u06F5	1235	IRR
   1252 // P fails here because this currency name is in the Trie only, but it has the same prefix as the non-Trie currency
   1253 \u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 \u06F1\u06F2\u06F3\u06F5	1235	IRR	CJP
   1254 IRR 1235	1235	IRR
   1255 \u0631\u06cc\u0627\u0644 1235	1235	IRR
   1256 \u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 1235	1235	IRR	CJP
   1257 
   1258 test parse foreign currency ISO
   1259 set pattern \u00a4\u00a4 0.00;\u00a4\u00a4 -#
   1260 set locale fa_IR
   1261 begin
   1262 parse	output	outputCurrency	breaks
   1263 \u0631\u06cc\u0627\u0644 \u06F1\u06F2\u06F3\u06F5	1235	IRR
   1264 IRR \u06F1\u06F2\u06F3\u06F5	1235	IRR
   1265 \u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 \u06F1\u06F2\u06F3\u06F5	1235	IRR	CJP
   1266 IRR 1235	1235	IRR
   1267 \u0631\u06cc\u0627\u0644 1235	1235	IRR
   1268 \u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 1235	1235	IRR	CJP
   1269 
   1270 test parse foreign currency full
   1271 set pattern \u00a4\u00a4\u00a4 0.00;\u00a4\u00a4\u00a4 -#
   1272 set locale fa_IR
   1273 begin
   1274 parse	output	outputCurrency	breaks
   1275 \u0631\u06cc\u0627\u0644 \u06F1\u06F2\u06F3\u06F5	1235	IRR
   1276 IRR \u06F1\u06F2\u06F3\u06F5	1235	IRR
   1277 \u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 \u06F1\u06F2\u06F3\u06F5	1235	IRR	CJP
   1278 IRR 1235	1235	IRR
   1279 \u0631\u06cc\u0627\u0644 1235	1235	IRR
   1280 \u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 1235	1235	IRR	CJP
   1281 
   1282 test parse currency with foreign symbols symbol english
   1283 set pattern \u00a4 0.00;\u00a4 (#)
   1284 set locale en_US
   1285 begin
   1286 parse	output	outputCurrency
   1287 EUR 7.82	7.82	EUR
   1288 \u20ac 7.82	7.82	EUR
   1289 Euro 7.82	7.82	EUR
   1290 Euros 7.82	7.82	EUR
   1291 
   1292 test parse currency with foreign symbols ISO english
   1293 set pattern \u00a4\u00a4 0.00;\u00a4\u00a4 (#)
   1294 set locale en_US
   1295 begin
   1296 parse	output	outputCurrency
   1297 EUR 7.82	7.82	EUR
   1298 \u20ac 7.82	7.82	EUR
   1299 Euro 7.82	7.82	EUR
   1300 Euros 7.82	7.82	EUR
   1301 
   1302 test parse currency with foreign symbols full english
   1303 set pattern \u00a4\u00a4\u00a4 0.00;\u00a4\u00a4\u00a4 (#)
   1304 set locale en_US
   1305 begin
   1306 parse	output	outputCurrency
   1307 EUR 7.82	7.82	EUR
   1308 \u20ac 7.82	7.82	EUR
   1309 Euro 7.82	7.82	EUR
   1310 Euros 7.82	7.82	EUR
   1311 
   1312 test parse currency without currency mode
   1313 // Should accept a symbol associated with the currency specified by the API,
   1314 // but should not traverse the full currency data.
   1315 set locale en_US
   1316 set pattern \u00a4#,##0.00
   1317 begin
   1318 parse	currency	output	breaks
   1319 $52.41	USD	52.41
   1320 USD52.41	USD	52.41	K
   1321 \u20ac52.41	USD	fail
   1322 EUR52.41	USD	fail
   1323 $52.41	EUR	fail
   1324 USD52.41	EUR	fail
   1325 \u20ac52.41	EUR	52.41
   1326 EUR52.41	EUR	52.41	K
   1327 
   1328 test parse currency ISO strict
   1329 set pattern 0.00 \u00a4\u00a4;(#) \u00a4\u00a4
   1330 set locale en_US
   1331 set lenient 0
   1332 begin
   1333 parse	output	outputCurrency	breaks
   1334 $53.45	53.45	USD	CJP
   1335 53.45 USD	53.45	USD
   1336 USD 53.45	fail	USD
   1337 53.45USD	fail	USD
   1338 USD53.45	53.45	USD	CJP
   1339 (7.92) USD	-7.92	USD
   1340 (7.92) EUR	-7.92	EUR
   1341 (7.926) USD	-7.926	USD
   1342 (7.926 USD)	fail	USD
   1343 (USD 7.926)	fail	USD
   1344 USD (7.926)	fail	USD
   1345 USD (7.92)	fail	USD
   1346 (7.92)USD	fail	USD
   1347 USD(7.92)	fail	USD
   1348 (8) USD	-8	USD
   1349 -8 USD	fail	USD
   1350 67 USD	67	USD
   1351 53.45$	fail	USD
   1352 US Dollars 53.45	fail	USD
   1353 53.45 US Dollars	53.45	USD
   1354 US Dollar 53.45	fail	USD
   1355 53.45 US Dollar	53.45	USD
   1356 US Dollars53.45	53.45	USD	CJP
   1357 53.45US Dollars	fail	USD
   1358 US Dollar53.45	53.45	USD	CJP
   1359 US Dollat53.45	fail	USD
   1360 53.45US Dollar	fail	USD
   1361 US Dollars (53.45)	fail	USD
   1362 (53.45) US Dollars	-53.45	USD
   1363 US Dollar (53.45)	fail	USD
   1364 (53.45) US Dollar	-53.45	USD
   1365 US Dollars(53.45)	fail	USD
   1366 (53.45)US Dollars	fail	USD
   1367 US Dollar(53.45)	fail	USD
   1368 US Dollat(53.45)	fail	USD
   1369 (53.45)US Dollar	fail	USD
   1370 
   1371 test ticket 10436
   1372 set locale en
   1373 set roundingMode ceiling
   1374 set minFractionDigits 0
   1375 set maxFractionDigits 0
   1376 begin
   1377 format	output	breaks
   1378 -0.99	-0	K
   1379 
   1380 // JDK seems to always round halfEven! Why? Bug in JDK or bug in test?
   1381 test rounding mode ceil
   1382 set locale en
   1383 set roundingMode ceiling
   1384 begin
   1385 format	output	breaks
   1386 -1.5	-1	K
   1387 0.4	1	K
   1388 0.5	1	K
   1389 0.6	1
   1390 1.5	2
   1391 
   1392 // JDK seems to always round halfEven! Why? Bug in JDK or bug in test?
   1393 test rounding mode floor
   1394 set locale en
   1395 set roundingMode floor
   1396 begin
   1397 format	output	breaks
   1398 -1.5	-2
   1399 0.4	0
   1400 0.5	0
   1401 0.6	0	K
   1402 1.5	1	K
   1403 
   1404 // JDK seems to always round halfEven! Why? Bug in JDK or bug in test?
   1405 test rounding mode expand
   1406 set locale en
   1407 set roundingMode up
   1408 begin
   1409 format	output	breaks
   1410 -1.5	-2
   1411 0.4	1	K
   1412 0.5	1	K
   1413 0.6	1
   1414 1.5	2
   1415 
   1416 // JDK seems to always round halfEven! Why? Bug in JDK or bug in test?
   1417 test rounding mode trunc
   1418 set locale en
   1419 set roundingMode down
   1420 begin
   1421 format	output	breaks
   1422 -1.5	-1	K
   1423 0.4	0
   1424 0.5	0
   1425 0.6	0	K
   1426 1.5	1	K
   1427 
   1428 // Not supported in Java BigDecimal
   1429 test rounding mode halfCeil
   1430 set locale en
   1431 set roundingMode halfCeiling
   1432 begin
   1433 format	output	breaks
   1434 -1.5	-1	JKP
   1435 0.4	0	JP
   1436 0.5	1	JKP
   1437 0.6	1	JP
   1438 1.5	2	JP
   1439 
   1440 // Not supported in Java BigDecimal
   1441 test rounding mode halfFloor
   1442 set locale en
   1443 set roundingMode halfFloor
   1444 begin
   1445 format	output	breaks
   1446 -1.5	-2	JP
   1447 0.4	0	JP
   1448 0.5	0	JP
   1449 0.6	1	JP
   1450 1.5	1	JKP
   1451 
   1452 // JDK seems to always round halfEven! Why? Bug in JDK or bug in test?
   1453 test rounding mode halfExpand
   1454 set locale en
   1455 set roundingMode halfUp
   1456 begin
   1457 format	output	breaks
   1458 -1.5	-2
   1459 0.4	0
   1460 0.5	1	K
   1461 0.6	1
   1462 1.5	2
   1463 
   1464 // JDK seems to always round halfEven! Why? Bug in JDK or bug in test?
   1465 test rounding mode halfTrunc
   1466 set locale en
   1467 set roundingMode halfDown
   1468 begin
   1469 format	output	breaks
   1470 -1.5	-1	K
   1471 0.4	0
   1472 0.5	0
   1473 0.6	1
   1474 1.5	1	K
   1475 
   1476 test rounding mode halfEven
   1477 set locale en
   1478 set roundingMode halfEven
   1479 begin
   1480 format	output	breaks
   1481 -1.5	-2
   1482 0.4	0
   1483 0.5	0
   1484 0.6	1
   1485 1.5	2
   1486 
   1487 // Not supported in Java BigDecimal
   1488 test rounding mode halfOdd
   1489 set locale en
   1490 set roundingMode halfOdd
   1491 begin
   1492 format	output	breaks
   1493 -1.5	-1	JKP
   1494 0.4	0	JP
   1495 0.5	1	JKP
   1496 0.6	1	JP
   1497 1.5	1	JKP
   1498 
   1499 test parse decimalPatternMatchRequired
   1500 set locale en
   1501 set decimalPatternMatchRequired 1
   1502 begin
   1503 pattern	parse	output	breaks
   1504 // K doesn't support this feature.
   1505 0	123	123
   1506 0	123.	fail	K
   1507 0	1.23	fail	K
   1508 0	-513	-513
   1509 0	-513.	fail	K
   1510 0	-5.13	fail	K
   1511 0.0	123	fail	K
   1512 0.0	123.	123
   1513 0.0	1.23	1.23
   1514 0.0	-513	fail	K
   1515 0.0	-513.	-513
   1516 0.0	-5.13	-5.13
   1517 
   1518 test parse minus sign
   1519 set locale en
   1520 set pattern #
   1521 begin
   1522 pattern	parse	output	breaks
   1523 #	-123	-123
   1524 #	- 123	-123	K
   1525 #	 -123	-123	K
   1526 #	 - 123	-123	K
   1527 #	123-	123
   1528 #	123 -	123
   1529 #;#-	123-	-123
   1530 #;#-	123 -	-123	K
   1531 
   1532 test parse case sensitive
   1533 set locale en
   1534 set lenient 1
   1535 set pattern Aa#
   1536 begin
   1537 parse	parseCaseSensitive	output	breaks
   1538 Aa1.23	1	1.23
   1539 Aa1.23	0	1.23
   1540 AA1.23	1	fail
   1541 // K does not support case-insensitive parsing for prefix/suffix.
   1542 AA1.23	0	1.23	K
   1543 aa1.23	1	fail
   1544 aa1.23	0	1.23	K
   1545 Aa1.23E3	1	1230
   1546 Aa1.23E3	0	1230
   1547 Aa1.23e3	1	1.23
   1548 Aa1.23e3	0	1230	K
   1549 NaN	1	NaN
   1550 NaN	0	NaN
   1551 nan	1	fail
   1552 nan	0	NaN	K
   1553 
   1554 test parse infinity and scientific notation overflow
   1555 set locale en
   1556 set lenient 1
   1557 begin
   1558 parse	output	breaks
   1559 NaN	NaN
   1560 // JDK returns zero
   1561 1E999999999999999	Inf	K
   1562 -1E999999999999999	-Inf	K
   1563 1E-99999999999999	0.0
   1564 // Note: The test suite code doesn't properly check for 0.0 vs. -0.0
   1565 -1E-99999999999999	-0.0
   1566 1E2147483648	Inf	K
   1567 1E2147483647	Inf	K
   1568 // J and K get Infinity
   1569 1E2147483646	1E+2147483646	JK
   1570 1E-2147483649	0
   1571 1E-2147483648	0
   1572 // K returns zero here
   1573 1E-2147483647	1E-2147483647	JK
   1574 1E-2147483646	1E-2147483646	JK
   1575 
   1576 test format push limits
   1577 set locale en
   1578 set minFractionDigits 2
   1579 set roundingMode halfDown
   1580 begin
   1581 maxFractionDigits	format	output	breaks
   1582 100	987654321987654321	987654321987654321.00
   1583 100	987654321.987654321	987654321.987654321
   1584 100	9999999999999.9950000000001	9999999999999.9950000000001
   1585 2	9999999999999.9950000000001	10000000000000.00
   1586 2	9999999.99499999	9999999.99
   1587 // K doesn't support halfDown rounding mode?
   1588 2	9999999.995	9999999.99	K
   1589 2	9999999.99500001	10000000.00
   1590 100	56565656565656565656565656565656565656565656565656565656565656	56565656565656565656565656565656565656565656565656565656565656.00
   1591 100	454545454545454545454545454545.454545454545454545454545454545	454545454545454545454545454545.454545454545454545454545454545
   1592 100	0.0000000000000000000123	0.0000000000000000000123
   1593 100	-78787878787878787878787878787878	-78787878787878787878787878787878.00
   1594 100	-8989898989898989898989.8989898989898989	-8989898989898989898989.8989898989898989
   1595 
   1596 test ticket 11230
   1597 set locale en
   1598 begin
   1599 pattern	lenient	parse	output	breaks
   1600 // Groups after the first group need 2 digits to be accepted.
   1601 // JDK does not see space as grouping and parses most of these as 9.
   1602 #,##0	1	9 9	9
   1603 #,##0	1	9 99	999	K
   1604 #,##0	1	9 999	9999	K
   1605 #,##0	1	9 9 9	9
   1606 #,##0	1	,9	9
   1607 #,##0	1	99,.0	99
   1608 #,##0	1	9 9.	9
   1609 #,##0	1	9 99.	999	K
   1610 0	1	9 9	9
   1611 0	1	9 99	9
   1612 0	1	9 999	9
   1613 0	1	9 9 9	9
   1614 0	1	,9	fail
   1615 0	1	99,.0	99
   1616 0	1	9 9.	9
   1617 0	1	9 99.	9
   1618 #,##0	0	9 9	9
   1619 #,##0	0	9 99	9
   1620 #,##0	0	9 999	9
   1621 #,##0	0	9 9 9	9
   1622 #,##0	0	,9	fail	K
   1623 #,##0	0	99,.0	fail	K
   1624 #,##0	0	9 9.	9
   1625 #,##0	0	9 99.	9
   1626 0	0	9 9	9
   1627 0	0	9 99	9
   1628 0	0	9 999	9
   1629 0	0	9 9 9	9
   1630 0	0	,9	fail
   1631 0	0	99,.0	99
   1632 0	0	9 9.	9
   1633 0	0	9 99.	9
   1634 
   1635 test more strict grouping parse
   1636 set locale en
   1637 set pattern #,##,##0
   1638 begin
   1639 lenient	parse	output	breaks
   1640 1	1,23,,	123
   1641 0	9999, 	9999
   1642 0	1,23,,	fail	K
   1643 
   1644 test parse ignorables
   1645 set locale ar
   1646 // Note: Prefixes contain RLMs, as do some of the test cases.
   1647 set pattern x a‎b0c df 
   1648 set negativePrefix y g‎h
   1649 set negativeSuffix i jk 
   1650 begin
   1651 parse	output	breaks
   1652 x a‎b56c df 	56
   1653 x  a‎b56c df 	56	K
   1654 x ab56c df 	56	K
   1655 x ab56c df	56	K
   1656 x ab56c df  	56	K
   1657 x ab56	56	K
   1658 x a b56	56	K
   1659 56cdf	56	K
   1660 56c df	56	K
   1661 56cd f	56	K
   1662 56c‎d‎f	56	K
   1663 56cdf 	56	K
   1664 56c d‎f 	56	K
   1665 56‎c df 	56	K
   1666 y g‎h56i jk 	-56
   1667 y  g‎h56i jk 	-56	K
   1668 y gh56i jk 	-56	K
   1669 y gh56i jk	-56	K
   1670 y gh56i jk  	-56	K
   1671 y gh56	-56	K
   1672 y g h56	-56	K
   1673 // S stops parsing after the 'i' for these and returns -56
   1674 // C stops before the 'i' and gets 56
   1675 56ijk	-56	K
   1676 56i jk	-56	K
   1677 56ij k	-56	K
   1678 56i‎j‎k	-56	K
   1679 56ijk 	-56	K
   1680 56i j‎k 	-56	K
   1681 56‎i jk 	-56	K
   1682 // S and C get 56 (accepts ' ' gs grouping); K gets null
   1683 5 6	fail	CJP
   1684 5‎6	5	K
   1685 
   1686 test parse spaces in grouping
   1687 // This test gives the ideal behavior of these cases, which
   1688 // none of the implementations currently support.
   1689 // Similar to the test above for ticket #11230
   1690 set locale en
   1691 set pattern #,##0
   1692 begin
   1693 parse	output	breaks
   1694 1 2	1
   1695 1 23	123	K
   1696 // K gets 1 here; doesn't pick up the grouping separator
   1697 1 234	1234	K
   1698 
   1699 test rounding increment significant digits
   1700 // This test is for #13111
   1701 set locale en
   1702 set pattern 0.1
   1703 set useSigDigits 1
   1704 set maxSigDigits 2
   1705 begin
   1706 format	output	breaks
   1707 // C and J get "1"
   1708 // P gets "1.0"
   1709 // K gets "1.1" (??)
   1710 0.975	0.98	CJKP
   1711 
   1712 test lenient parse currency match
   1713 // This test is for #13112
   1714 set locale en
   1715 set pattern ¤#,##0.00
   1716 begin
   1717 parse	output	breaks
   1718 // K gets null
   1719 1.23!@#$%^	1.23	K
   1720 
   1721 test percentage parsing multiplier
   1722 // This test is for #13114
   1723 set locale en
   1724 set pattern 0%
   1725 begin
   1726 parse	output	breaks
   1727 55%	0.55
   1728 // K gets null
   1729 // C and P scale by 100 even if the percent sign is not present
   1730 55	0.55	K
   1731 
   1732 test trailing grouping separators in pattern
   1733 // This test is for #13115
   1734 set locale en
   1735 begin
   1736 pattern	format	output	breaks
   1737 $0M	123456	$123456M
   1738 // The following patterns are rejected as malformed.
   1739 $0,M	123456	fail
   1740 $0,,M	123456	fail
   1741 
   1742 test empty negative subpattern
   1743 // This test is for #13117
   1744 set locale en
   1745 begin
   1746 pattern	format	output	breaks
   1747 0	-15	-15
   1748 0;	-15	-15
   1749 // K still prepends a '-' even though the pattern says otherwise
   1750 0;0	-15	15	K
   1751 
   1752 test percentage multiplier parsing
   1753 // This test is for #13129
   1754 set locale en
   1755 set pattern 0%
   1756 begin
   1757 parse	output	breaks
   1758 9223372036854775807%	92233720368547758.07	K
   1759 
   1760 test sign always shown
   1761 set locale en
   1762 set pattern 0
   1763 set signAlwaysShown 1
   1764 begin
   1765 format	output	breaks
   1766 // K does not support this feature
   1767 42	+42	K
   1768 0	+0	K
   1769 -42	-42
   1770 
   1771 test parse strict with plus sign
   1772 set locale en
   1773 set pattern 0
   1774 set signAlwaysShown 1
   1775 begin
   1776 lenient	parse	output	breaks
   1777 1	42	42
   1778 1	-42	-42
   1779 1	+42	42	K
   1780 1	0	0
   1781 1	+0	0	K
   1782 0	42	fail	K
   1783 0	-42	-42
   1784 0	+42	42	K
   1785 0	0	fail	K
   1786 0	+0	0	K
   1787 
   1788 test parse with scientific-separator-affix overlap
   1789 set locale en
   1790 begin
   1791 pattern	lenient	parse	output	breaks
   1792 0E0','x	1	5E3,x	5000
   1793 0E0','x	0	5E3,x	5000
   1794 0E0'.'x	1	5E3.x	5000
   1795 0E0'.'x	0	5E3.x	5000
   1796 
   1797 test parse() lowercase currency
   1798 set locale en
   1799 set pattern ¤¤0
   1800 set currency USD
   1801 begin
   1802 parse	output	breaks
   1803 USD123	123
   1804 USD 123	123	K
   1805 usd123	123	K
   1806 usd 123	123	K
   1807 Usd123	123	K
   1808 Usd 123	123	K
   1809 // US$ is not used for US dollars in en-US
   1810 US$123	fail
   1811 us$123	fail
   1812 Us$123	fail
   1813 123 US dollars	123	K
   1814 123 US DOLLARS	123	K
   1815 123 us dollars	123	K
   1816 // Foreign currencies are not accepted in .parse()
   1817 GBP123	fail
   1818 gbp123	fail
   1819 British pounds 123	fail
   1820 british POUNDS 123	fail
   1821 
   1822 test parseCurrency() lowercase currency
   1823 set locale en
   1824 set pattern ¤¤0
   1825 set currency USD
   1826 begin
   1827 parse	output	outputCurrency	breaks
   1828 USD123	123	USD
   1829 USD 123	123	USD
   1830 usd123	123	USD
   1831 usd 123	123	USD
   1832 Usd123	123	USD
   1833 Usd 123	123	USD
   1834 US$123	123	USD	C
   1835 us$123	fail	fail
   1836 Us$123	fail	fail
   1837 123 US dollars	123	USD
   1838 123 US DOLLARS	123	USD
   1839 123 us dollars	123	USD
   1840 GBP123	123	GBP
   1841 gbp123	123	GBP	C
   1842 British pounds 123	123	GBP
   1843 british POUNDS 123	123	GBP
   1844 
   1845 test parse scientific with bidi marks
   1846 begin
   1847 locale	parse	output	breaks
   1848 en	4E\u200E+02	400	K
   1849 en	4E+02	400	K
   1850 he	4E\u200E+02	400	K
   1851 he	4E+02	400	K