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 22test plus sign 23set locale ar-EG 24set pattern +0;-# 25begin 26format output breaks 276 \u061C+\u0666 K 28-6 \u061C-\u0666 K 29 30test basic patterns 31set locale fr_FR 32set format 1234.567 33begin 34pattern output breaks 35// K does not use \u202f narrow space 36#,##0.## 1\u202f234,57 K 370.## 1234,57 380 1235 39#,##0.### 1\u202f234,567 K 40###0.###### 1234,567 41###0.0000# 1234,5670 4200000.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 48test minimum and maximum fraction digits 49set locale en 50set minIntegerDigits 2 51set maxIntegerDigits 4 52set minFractionDigits 3 53set maxFractionDigits 5 54begin 55format output 566 06.000 576.000005 06.000 586.000006 06.00001 591002003004005 4005.000 60-1002003004005 -4005.000 6112 12.000 6212345 2345.000 6372.1234 72.1234 64 65test patterns with no '0' symbols 66set locale en_US 67begin 68pattern 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 94test behavior on numbers approaching zero 95set locale en 96begin 97pattern 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 1040.00 0.01 0.01 1050.00 0.001 0.00 1060.00 0 0.00 107 108// Not in official spec, but needed for backwards compatibility 109test patterns with leading grouping separator 110set locale en_US 111begin 112pattern format output breaks 113,##0 1234.56 1,235 114'#',## 3456 #34,56 115 116test patterns with valid and invalid quote marks 117set locale et 118begin 119pattern 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 133test int64 134set locale en 135begin 136format output 1371002003004005 1002003004005 138-1002003004005 -1002003004005 139 140test rounding 141set locale fr 142begin 143pattern format output breaks 1440.5 1.25 1,0 K 1450.5 1.75 2,0 K 1460.5 -1.25 -1,0 K 14700.5 -1.75 -02,0 K 1484 2.0 0 K 1494 6.0 8 K 1504 10.0 8 K 1512.70 99.0 99,90 K 1522.73 272.0 273,00 K 153#,#3.70 104.0 1\u202f03,60 K 154 155test significant digits 156set locale en 157set pattern #,#@,@### 158begin 159format output breaks 1607 7.0 K 16123 23 K 162100 100 K 1631000 1000 K 16410000 1,0000 K 16510001 1,0001 K 16610001.5 1,0002 K 1671234567 1,23,4600 K 168-1234567 -1,23,4600 K 1693.14159 3.1416 K 170 171test scientific notation 172set locale fr 173begin 174pattern format output breaks 1750.00E0 12345 1,23E4 176000.00E0 12300 123,00E2 177000.0#E0 12300 123,0E2 178000.0#E0 12300.1 123,0E2 179000.0#E0 12301.0 123,01E2 180// JDK does not support exponent signs 181000.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 1890.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 2030E0 52413 5E4 204 205test scientific infinite precision 206// ICU-11511, ICU-7460, CLDR-10103 207set locale en 208begin 209pattern format output breaks 210// From the spec: 211// "0.##E0 means a max of 3 significant digits." 2120.##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." 2180E0 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 228test percents 229set locale fr 230begin 231pattern format output breaks 2320.0% 0.573 57,3% 233%0.0 0.573 %57,3 234p%p0.0 0.573 p%p57,3 235p'%'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 243test permille 244set locale fr 245begin 246pattern format output breaks 2470.0\u2030 0.573 573,0‰ 248\u20300.0 0.573 \u2030573,0 249p\u2030p0.0 0.573 p\u2030p573,0 250p'\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 257test padding 258set locale fr_FR 259begin 260pattern 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 275test padding and currencies 276begin 277locale 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. 280fr JPY \u00a4\u00a4 **#######0 433.22 JPY ****433 K 281// JDK doesn't correct rounding for currency, shows USD (433 282en USD \u00a4\u00a4 **#######0;\u00a4\u00a4 (#) -433.22 USD (433.22) K 283 284test currencies 285set locale fr 286set format 1234.567 287begin 288pattern 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 295test prefixes and suffixes 296set locale en 297set pattern 0.00+;(#) 298begin 299format output breaks 3007 7.00+ 301-3.5 (3.50) 302 303test minimum grouping digits 304set locale en 305set pattern #,##0 306set minGroupingDigits 2 307begin 308format output breaks 3091000 1000 K 31010000 10,000 311100000 100,000 3121000000 1,000,000 313 314test min max fraction digits 315set locale en 316set pattern #,##0.### 317set format 1234.567 318begin 319minFractionDigits maxFractionDigits output 3200 0 1,235 3210 2 1,234.57 3224 5 1,234.5670 323 324test min max integer digits 325set locale en 326set pattern #,##0.### 327set format 1234.567 328begin 329minIntegerDigits maxIntegerDigits output 3300 0 .567 3310 3 234.567 3325 5 01,234.567 333 334test min max fraction digits scientific 335set locale en 336set pattern #E0 337set format 299792458.0 338begin 339minIntegerDigits maxIntegerDigits minFractionDigits maxFractionDigits output breaks 340// JDK gives 2.99792458E8 (maxInt + maxFrac instead of minInt + maxFrac) 3411 99 0 5 2.99792E8 K 342// JDK gives .3E9 instead of unlimited precision. 3430 1 0 0 2.99792458E8 K 3441 1 0 0 3E8 345// JDK gives E0 instead of allowing for unlimited precision 3460 0 0 0 2.99792458E8 K 347// J gives 2.9979E8 3480 1 0 5 2.99792E8 K 349// JDK gives 300E6 3500 3 0 0 299.792458E6 K 351// JDK gives 299.8E6 (maybe maxInt + maxFrac instead of minInt + maxFrac)? 3520 3 0 1 300E6 K 353// JDK gives 299.7925E6 3542 3 0 4 299.792E6 K 355// JDK gives 299.79246E6 3562 3 0 5 299.7925E6 K 3573 3 0 5 299.79246E6 3583 3 0 4 299.7925E6 3592 2 0 3 29.979E7 3604 4 0 0 2998E5 3610 0 1 5 .29979E9 362// JDK gives E0 3630 0 1 0 2.99792458E8 K 364// J gives 2.998E8 3650 0 0 4 .29979E9 K 366// According to the spec, if maxInt>minInt and minInt>1, then set 367// Context: #13289 3682 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. 3722 9 1 6 29.979246E7 K 373 374test ticket 20058 375set locale en 376begin 377pattern 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 383test significant digits scientific 384set locale en 385set pattern #E0 386set format 290000000.0 387begin 388minSigDigits maxSigDigits output breaks 3890 1 3E8 K 3900 2 2.9E8 K 3910 3 2.9E8 K 3921 1 3E8 K 3931 2 2.9E8 K 3941 3 2.9E8 K 3952 2 2.9E8 K 3962 3 2.9E8 K 3973 3 2.90E8 K 3983 4 2.90E8 K 399 400test min max fraction digits scientific 2 401set locale en 402set pattern #E0 403set format 29979245.0 404begin 405minIntegerDigits maxIntegerDigits minFractionDigits maxFractionDigits output breaks 406// JDK gives E0 4070 0 0 0 2.9979245E7 K 408// JDK gives .3E8 4090 1 0 0 2.9979245E7 K 410// JDK gives 2998E4. 4110 4 0 0 2997.9245E4 K 412 413test ticket 11524 414set locale en 415set pattern #,##0.### 416begin 417format maxIntegerDigits output breaks 418123 1 3 419// C obeys maxIntegerDigits and prints after the decimal place 4200 0 .0 KP 421// CJP ignore max integer if it is less than zero and prints "123" 422123 -2147483648 0 CJP 42312345 1 5 42412345 -2147483648 0 CJP 4255.3 1 5.3 4265.3 -2147483648 .3 CJP 427 428test patterns with zero 429set locale en 430set format 0 431begin 432pattern output breaks 433#.# 0 434#. 0. 435.# .0 436# 0 437#,##0.00 0.00 438#,###.00 .00 43900.000E00 00.000E00 4400.####E0 0E0 441##0.######E000 0E000 442 443test significant digits manually set 444set locale en_US 445set pattern 0.0 446set useSigDigits 1 447set minSigDigits 3 448set maxSigDigits 5 449begin 450format output breaks 4510.0012 0.00120 K 4520.00123 0.00123 K 4530.001234 0.001234 K 4540.0012345 0.0012345 K 4550.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 462test grouping used setters 463set locale en_US 464set pattern #,##0 465set format 12345 466begin 467output useGrouping 46812,345 46912,345 1 47012345 0 471 472test grouping used setters in parsing 473set pattern #,##0 474begin 475locale useGrouping parse output breaks 476en_US 1 123,456 123456 477en_US 0 123,456 123 478en_US 1 123.456 123.456 479en_US 0 123.456 123.456 480it_IT 1 123,456 123.456 481it_IT 0 123,456 123.456 482it_IT 1 123.456 123456 483it_IT 0 123.456 123 484 485test no grouping in pattern with parsing 486set pattern 0 487begin 488locale parse output breaks 489en_US 123,456 123 490en_US 123.456 123.456 491fr_FR 123,456 123.456 492fr_FR 123.456 123 493 494test grouping setters 495set locale en_US 496set pattern 0 497set format 123456789 498set useGrouping 1 499begin 500output grouping grouping2 breaks 5011,2345,6789 4 5021,23,45,6789 4 2 K 503 504test grouping setters with min grouping digits 505set locale en_US 506set pattern 0 507set format 123456789 508set useGrouping 1 509begin 510output grouping grouping2 minGroupingDigits breaks 5111,23,45,6789 4 2 2 K 512123,456789 6 6 3 513123456789 6 6 4 K 514 515test multiplier setters 516set locale en_US 517begin 518format multiplier output breaks 51923 -12 -276 52023 -1 -23 521// J (current ICU4J) throws exception on zero multiplier. 522// ICU4C prints 23. 523// Q multiplies by zero and prints 0. 52423 0 0 CJ 52523 1 23 52623 12 276 527-23 12 -276 528-23 -12 276 529 530test rounding setters 531set locale en_US 532set pattern 0.0# 533set roundingIncrement 0.25 534begin 535format output breaks 536-0.35 -0.25 K 5370.35 0.25 K 538// P doesn't support mixing minFrac with roundingIncrement (prints 0.50). 5390.39 0.5 JKP 5400.62 0.5 JKP 5410.63 0.75 K 542 543test padding setters 544set locale en_US 545set pattern bill0 546set format 1357 547begin 548padCharacter formatWidth output breaks 549* 8 bill1357 550* 9 *bill1357 K 551^ 10 ^^bill1357 K 552 553test use scientific setter 554set locale en_US 555set pattern 0.00 556set format 186283 557begin 558output useScientific breaks 559186283.00 5601.86E5 1 K 561186283.00 0 562 563test rounding mode setters 564set locale en_US 565set pattern 0.5 566begin 567format roundingMode output breaks 5681.24 halfUp 1.0 K 5691.25 halfUp 1.5 5701.25 halfDown 1.0 K 5711.26 halfDown 1.5 5721.25 halfEven 1.0 K 573-1.01 up -1.5 574-1.49 down -1.0 K 5751.01 up 1.5 5761.49 down 1.0 K 577-1.01 ceiling -1.0 K 578-1.49 floor -1.5 579 580test currency usage setters 581set locale CH 582set pattern \u00a4\u00a4 0 583begin 584format currency currencyUsage output breaks 5850.37 CHF standard CHF 0.37 K 5860.37 CHF cash CHF 0.35 K 5871.234 CZK standard CZK 1.23 K 5881.234 CZK cash CZK 1 589 590test currency usage to pattern 591set locale en 592begin 593currency 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. 596USD standard 0.00 K 597CHF standard 0.00 K 598CZK standard 0.00 K 599USD cash 0.00 K 600CHF cash 0.05 K 601CZK cash 0 K 602 603test currency rounding 604set locale en 605set currency USD 606begin 607pattern 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 615test exponent parameter setters 616set locale en_US 617set pattern 0.##E0 618set format 299792458 619begin 620decimalSeparatorAlwaysShown exponentSignAlwaysShown minimumExponentDigits output breaks 6210 0 2 3E08 K 6220 1 3 3E+008 K 623// decimalSeparatorAlwaysShown K=JDK; C=ICU4C; J=ICU4J 624// See ticket 11621 6251 0 2 3.E08 K 6261 1 3 3.E+008 K 6271 0 1 3.E8 6280 0 1 3E8 629 630test exponent decimalSeparatorAlwaysShown default 631set locale en_US 632set pattern 0.##E0 633begin 634format output decimalSeparatorAlwaysShown breaks 635// decimalSeparatorAlwaysShown off by default 636299792458 3E8 637299000000 2.99E8 638299792458 3.E8 1 639 640test pad position setters 641set locale en_US 642set pattern **[#####0.##];((#)) 643begin 644format padPosition output breaks 64512.34 beforePrefix ****[12.34] K 64612.34 afterPrefix [****12.34] K 64712.34 beforeSuffix [12.34****] K 64812.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 654test affix setters 655set locale fr_FR 656set currency EUR 657set pattern 0.00 658begin 659format positivePrefix positiveSuffix negativePrefix negativeSuffix output 66012.34 % %12,34 66112.34 \u00a4\u00a4 12,34\u00a4\u00a4 66212.34 - + 12,34 663-12.34 - + -12,34+ 664-12.34 \u00a4 \u00a412,34 66512.34 \u00a4 12,34 666-12.34 % 12,34% 66712.34 % 12,34 668 669test more affix setters 670set locale fr_FR 671set pattern %0.00 672begin 673format positivePrefix negativePrefix output 6740.648 booya cooya booya64,80 675 676test nan and infinity 677set locale en_US 678set pattern [0.00];(#) 679begin 680format output breaks 681Inf [\u221e] 682-Inf (\u221e) 683// J does not print the affixes 684// K prints \uFFFD 685NaN [NaN] K 686 687test nan and infinity with multiplication 688set locale en 689set multiplier 100 690begin 691format output breaks 692Inf \u221e 693-Inf -\u221e 694NaN NaN 695 696test nan and infinity with padding 697set locale en_US 698set pattern $$$0.00$ 699set formatWidth 8 700begin 701format padPosition output breaks 702Inf beforePrefix $$$\u221e$ K 703Inf afterPrefix $$$ \u221e$ K 704Inf beforeSuffix $$$\u221e $ K 705Inf afterSuffix $$$\u221e$ K 706// J does not print the affixes 707// K prints \uFFFD 708NaN beforePrefix $$$NaN$ K 709NaN afterPrefix $$$ NaN$ K 710NaN beforeSuffix $$$NaN $ K 711NaN afterSuffix $$$NaN$ K 712 713test apply formerly localized patterns 714begin 715// documentation says localizedPattern is not supported, change to pattern 716locale pattern format output breaks 717en #0% 0.4376 44% 718fa \u0025\u00a0\u0023\u0030 0.4376 \u066a\u00a0\u06f4\u06f4 719 720test localized pattern basic symbol coverage 721begin 722locale localizedPattern toPattern breaks 723it #.##0,00 #,##0.00 724sl #.##0;#.##0− #,##0;#,##0- 725en_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 727ar_SA #\u066C##\u0660\u066B\u0660\u0660;a# #,##0.00;a#,##0.00 K 728 729test toPattern 730set locale en 731begin 732pattern 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. 7400,000 #0,000 CJP 741.00 #.00 742000 #000 CJP 743000,000 #,000,000 CJP 744pp#,000 pp#,000 74500.## #00.## CJP 746#,#00.025 #,#00.025 747// No secondary grouping in JDK 748#,##,###.02500 #,##,###.02500 K 749pp#,000;(#) pp#,000;(#,000) 750**####,##,##0.0##;(#) **#,##,##,##0.0##;**(##,##,##0.0##) CJKP 751// No significant digits in JDK 752@@### @@### K 753@,@#,### @,@#,### K 7540.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 7600.00E+00 0.00E+00 K 761000.00E00 000.00E00 762###0.00#E00 ###0.00#E00 763 764test parse 765set locale en 766set pattern +#,##0.0###;(#) 767begin 768parse 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 7755,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 831test parse suffix 832set locale en 833set pattern #,##0.0###+;#- 834begin 835parse output breaks 836// J and K just bail. 8373426 3426 K 8383426+ 3426 839// J bails; K sees -34 84034 d1+ 34 K 841// JDK sees this as -1234 for some reason 8421,234,,,+ 1234 K 8431,234- -1234 844// C and P bail because of trailing separators 8451,234,- -1234 CJKP 8461234 - -1234 K 847 848 849 850test parse strict 851set locale en 852set pattern +#,##,##0.0###;(#) 853set lenient 0 854set minGroupingDigits 2 855begin 856parse 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 86665,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 1234567.8901 K 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 901test parse strict scientific 902// See #13737: Old behavior should be retained in this case 903set locale en 904set pattern #E0 905set lenient 0 906begin 907parse output breaks 908123 123 909123E1 1230 910123E0 123 911123E 123 912 913test parse strict without prefix/suffix 914set locale en 915set pattern # 916set lenient 0 917begin 918parse output breaks 91912.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 925test parse integer only 926set locale en 927set pattern 0.00 928set parseIntegerOnly 1 929begin 930parse output breaks 93135 35 932+35 35 K 933-35 -35 9342.63 2 935-39.99 -39 936 937test parse no exponent flag 938set pattern 0 939set locale en 940begin 941parseNoExponent parse output breaks 942// JDK doesn't allow lowercase exponent but ICU4J and ICU4C do. 9430 5e2 500 K 9440 5.3E2 530 945// See ticket 11725 9461 5e2 5 9471 5.3E2 5.3 K 948 949test parse currency fail 950set pattern 0 951set locale en 952begin 953parse output outputCurrency breaks 954// Fixed in ticket 11735 95553.45 fail USD 956 957test parse strange prefix 958set locale en 959set positivePrefix dd 960set negativePrefix ddd 961begin 962parse output 963dd4582 4582 964ddd4582 -4582 965 966test parse strange suffix 967set locale en 968set positiveSuffix dd 969set negativePrefix 970set negativeSuffix ddd 971begin 972parse output 9734582dd 4582 9744582ddd -4582 975 976test really strange suffix 977set locale en 978set positiveSuffix 9K 979set negativePrefix 980set negativeSuffix 9N 981begin 982parse output breaks 983// A non-greedy parse is required to pass these cases. 984// All of the implementations being tested are greedy. 9856549K 654 CJKP 9866549N -654 CJKP 987 988test really strange prefix 989set locale en 990set positivePrefix 82 991set negativePrefix 28 992begin 993parse output 9948245 45 9952845 -45 996 997test parse pattern with quotes 998set locale en 999set pattern '-'#y 1000begin 1001parse output breaks 1002-45y 45 1003 1004test parse with locale symbols 1005// The grouping separator in it_CH is an apostrophe 1006set locale it_CH 1007set pattern #,##0 1008begin 1009parse output breaks 1010१३ 13 1011१३.३१ 13.31 1012// JDK 11 parses this as 123 1013123'456 123456 K 1014524'11.3 52411.3 K 1015३'११ 311 K 1016 1017test parse with European-style comma/period 1018set locale pt 1019set pattern #,##0 1020begin 1021parse output breaks 1022123.456 123456 1023123,456 123.456 1024987,654.321 987.654 1025987,654 321 987.654 1026987.654,321 987654.321 1027 1028test select 1029set locale sr 1030begin 1031format pattern plural 1032Inf 0 other 1033-Inf 0 other 1034NaN 0 other 1035Inf 0.0 other 1036-Inf 0.0 other 1037NaN 0.0 other 10381 0 one 10391 0.0 other 10402 0 few 10412 0.0 other 10422 0E0 other 10435.1 0.0 one 10445.09 0.0 one 1045 1046test parse currency ISO 1047set pattern 0.00 \u00a4\u00a4;(#) \u00a4\u00a4 1048set locale en_GB 1049begin 1050parse output outputCurrency breaks 105153.45 fail GBP 1052£53.45 53.45 GBP 1053$53.45 53.45 USD C 105453.45 USD 53.45 USD 105553.45 GBP 53.45 GBP 1056USD 53.45 53.45 USD 105753.45USD 53.45 USD 1058USD53.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 1064USD (7.926) -7.926 USD 1065USD (7.92) -7.92 USD 1066(7.92)USD -7.92 USD 1067USD(7.92) -7.92 USD 1068(8) USD -8 USD 1069-8 USD -8 USD 107067 USD 67 USD 107153.45$ 53.45 USD C 1072US Dollars 53.45 53.45 USD 107353.45 US Dollars 53.45 USD 1074US Dollar 53.45 53.45 USD 107553.45 US Dollar 53.45 USD 1076US Dollars53.45 53.45 USD 107753.45US Dollars 53.45 USD 1078US Dollar53.45 53.45 USD 1079US Dollat53.45 fail USD 108053.45US Dollar 53.45 USD 1081US Dollars (53.45) -53.45 USD 1082(53.45) US Dollars -53.45 USD 1083(53.45) Euros -53.45 EUR 1084US Dollar (53.45) -53.45 USD 1085(53.45) US Dollar -53.45 USD 1086US Dollars(53.45) -53.45 USD 1087(53.45)US Dollars -53.45 USD 1088US Dollar(53.45) -53.45 USD 1089US Dollat(53.45) fail USD 1090(53.45)US Dollar -53.45 USD 1091 1092 1093test parse currency ISO negative 1094set pattern 0.00 \u00a4\u00a4;-# \u00a4\u00a4 1095set locale en_GB 1096begin 1097parse output outputCurrency breaks 109853.45 fail GBP 1099£53.45 53.45 GBP 1100$53.45 53.45 USD C 110153.45 USD 53.45 USD 110253.45 GBP 53.45 GBP 1103USD 53.45 53.45 USD 110453.45USD 53.45 USD 1105USD53.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 1109USD -7.926 -7.926 USD 1110-7.92USD -7.92 USD 1111USD-7.92 -7.92 USD 1112-8 USD -8 USD 111367 USD 67 USD 111453.45$ 53.45 USD C 1115US Dollars 53.45 53.45 USD 111653.45 US Dollars 53.45 USD 1117US Dollar 53.45 53.45 USD 111853.45 US Dollar 53.45 USD 1119US Dollars53.45 53.45 USD 112053.45US Dollars 53.45 USD 1121US Dollar53.45 53.45 USD 1122US Dollat53.45 fail USD 112353.45US Dollar 53.45 USD 1124 1125 1126test parse currency long 1127set pattern 0.00 \u00a4\u00a4\u00a4;(#) \u00a4\u00a4\u00a4 1128set locale en_GB 1129begin 1130parse output outputCurrency breaks 113153.45 fail GBP 1132£53.45 53.45 GBP 1133$53.45 53.45 USD C 113453.45 USD 53.45 USD 113553.45 GBP 53.45 GBP 1136USD 53.45 53.45 USD 113753.45USD 53.45 USD 1138USD53.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 1144USD (7.926) -7.926 USD 1145USD (7.92) -7.92 USD 1146(7.92)USD -7.92 USD 1147USD(7.92) -7.92 USD 1148(8) USD -8 USD 1149-8 USD -8 USD 115067 USD 67 USD 115153.45$ 53.45 USD C 1152US Dollars 53.45 53.45 USD 115353.45 US Dollars 53.45 USD 1154US Dollar 53.45 53.45 USD 115553.45 US Dollar 53.45 USD 1156US Dollars53.45 53.45 USD 115753.45US Dollars 53.45 USD 1158US Dollar53.45 53.45 USD 1159US Dollat53.45 fail USD 116053.45US Dollar 53.45 USD 1161 1162 1163test parse currency short 1164set pattern 0.00 \u00a4;(#) \u00a4 1165set locale en_GB 1166begin 1167parse output outputCurrency breaks 116853.45 fail GBP 1169£53.45 53.45 GBP 1170$53.45 53.45 USD C 117153.45 USD 53.45 USD 117253.45 GBP 53.45 GBP 1173USD 53.45 53.45 USD 117453.45USD 53.45 USD 1175USD53.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 1181USD (7.926) -7.926 USD 1182USD (7.92) -7.92 USD 1183(7.92)USD -7.92 USD 1184USD(7.92) -7.92 USD 1185(8) USD -8 USD 1186-8 USD -8 USD 118767 USD 67 USD 118853.45$ 53.45 USD C 1189US Dollars 53.45 53.45 USD 119053.45 US Dollars 53.45 USD 1191US Dollar 53.45 53.45 USD 119253.45 US Dollar 53.45 USD 1193US Dollars53.45 53.45 USD 119453.45US Dollars 53.45 USD 1195US Dollar53.45 53.45 USD 1196US Dollat53.45 fail USD 119753.45US Dollar 53.45 USD 1198 1199 1200test parse currency short prefix 1201set pattern \u00a40.00;(\u00a4#) 1202set locale en_GB 1203begin 1204parse output outputCurrency breaks 120553.45 fail GBP 1206£53.45 53.45 GBP 1207$53.45 53.45 USD C 120853.45 USD 53.45 USD 120953.45 GBP 53.45 GBP 1210USD 53.45 53.45 USD 121153.45USD 53.45 USD 1212USD53.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 1219USD (7.926) -7.926 USD CJP 1220USD (7.92) -7.92 USD CJP 1221(7.92)USD -7.92 USD CJP 1222USD(7.92) -7.92 USD CJP 1223(8) USD -8 USD CJP 1224-8 USD -8 USD 122567 USD 67 USD 122653.45$ 53.45 USD C 1227US Dollars 53.45 53.45 USD 122853.45 US Dollars 53.45 USD 1229US Dollar 53.45 53.45 USD 123053.45 US Dollar 53.45 USD 1231US Dollars53.45 53.45 USD 123253.45US Dollars 53.45 USD 1233US Dollar53.45 53.45 USD 123453.45US Dollar 53.45 USD 1235 1236test format foreign currency 1237set locale fa_IR 1238set currency IRR 1239begin 1240pattern 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 1245test parse foreign currency symbol 1246set pattern \u00a4 0.00;\u00a4 -# 1247set locale fa_IR 1248begin 1249parse output outputCurrency breaks 1250\u0631\u06cc\u0627\u0644 \u06F1\u06F2\u06F3\u06F5 1235 IRR 1251IRR \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 1254IRR 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 1258test parse foreign currency ISO 1259set pattern \u00a4\u00a4 0.00;\u00a4\u00a4 -# 1260set locale fa_IR 1261begin 1262parse output outputCurrency breaks 1263\u0631\u06cc\u0627\u0644 \u06F1\u06F2\u06F3\u06F5 1235 IRR 1264IRR \u06F1\u06F2\u06F3\u06F5 1235 IRR 1265\u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 \u06F1\u06F2\u06F3\u06F5 1235 IRR CJP 1266IRR 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 1270test parse foreign currency full 1271set pattern \u00a4\u00a4\u00a4 0.00;\u00a4\u00a4\u00a4 -# 1272set locale fa_IR 1273begin 1274parse output outputCurrency breaks 1275\u0631\u06cc\u0627\u0644 \u06F1\u06F2\u06F3\u06F5 1235 IRR 1276IRR \u06F1\u06F2\u06F3\u06F5 1235 IRR 1277\u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 \u06F1\u06F2\u06F3\u06F5 1235 IRR CJP 1278IRR 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 1282test parse currency with foreign symbols symbol english 1283set pattern \u00a4 0.00;\u00a4 (#) 1284set locale en_US 1285begin 1286parse output outputCurrency 1287EUR 7.82 7.82 EUR 1288\u20ac 7.82 7.82 EUR 1289Euro 7.82 7.82 EUR 1290Euros 7.82 7.82 EUR 1291 1292test parse currency with foreign symbols ISO english 1293set pattern \u00a4\u00a4 0.00;\u00a4\u00a4 (#) 1294set locale en_US 1295begin 1296parse output outputCurrency 1297EUR 7.82 7.82 EUR 1298\u20ac 7.82 7.82 EUR 1299Euro 7.82 7.82 EUR 1300Euros 7.82 7.82 EUR 1301 1302test parse currency with foreign symbols full english 1303set pattern \u00a4\u00a4\u00a4 0.00;\u00a4\u00a4\u00a4 (#) 1304set locale en_US 1305begin 1306parse output outputCurrency 1307EUR 7.82 7.82 EUR 1308\u20ac 7.82 7.82 EUR 1309Euro 7.82 7.82 EUR 1310Euros 7.82 7.82 EUR 1311 1312test 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. 1315set locale en_US 1316set pattern \u00a4#,##0.00 1317begin 1318parse currency output breaks 1319$52.41 USD 52.41 1320USD52.41 USD 52.41 K 1321\u20ac52.41 USD fail 1322EUR52.41 USD fail 1323$52.41 EUR fail 1324USD52.41 EUR fail 1325\u20ac52.41 EUR 52.41 1326EUR52.41 EUR 52.41 K 1327 1328test parse currency ISO strict 1329set pattern 0.00 \u00a4\u00a4;(#) \u00a4\u00a4 1330set locale en_US 1331set lenient 0 1332begin 1333parse output outputCurrency breaks 1334$53.45 53.45 USD CJP 133553.45 USD 53.45 USD 1336USD 53.45 fail USD 133753.45USD fail USD 1338USD53.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 1344USD (7.926) fail USD 1345USD (7.92) fail USD 1346(7.92)USD fail USD 1347USD(7.92) fail USD 1348(8) USD -8 USD 1349-8 USD fail USD 135067 USD 67 USD 135153.45$ fail USD 1352US Dollars 53.45 fail USD 135353.45 US Dollars 53.45 USD 1354US Dollar 53.45 fail USD 135553.45 US Dollar 53.45 USD 1356US Dollars53.45 53.45 USD CJP 135753.45US Dollars fail USD 1358US Dollar53.45 53.45 USD CJP 1359US Dollat53.45 fail USD 136053.45US Dollar fail USD 1361US Dollars (53.45) fail USD 1362(53.45) US Dollars -53.45 USD 1363US Dollar (53.45) fail USD 1364(53.45) US Dollar -53.45 USD 1365US Dollars(53.45) fail USD 1366(53.45)US Dollars fail USD 1367US Dollar(53.45) fail USD 1368US Dollat(53.45) fail USD 1369(53.45)US Dollar fail USD 1370 1371test ticket 10436 1372set locale en 1373set roundingMode ceiling 1374set minFractionDigits 0 1375set maxFractionDigits 0 1376begin 1377format output breaks 1378-0.99 -0 K 1379 1380// JDK seems to always round halfEven! Why? Bug in JDK or bug in test? 1381test rounding mode ceil 1382set locale en 1383set roundingMode ceiling 1384begin 1385format output breaks 1386-1.5 -1 K 13870.4 1 K 13880.5 1 K 13890.6 1 13901.5 2 1391 1392// JDK seems to always round halfEven! Why? Bug in JDK or bug in test? 1393test rounding mode floor 1394set locale en 1395set roundingMode floor 1396begin 1397format output breaks 1398-1.5 -2 13990.4 0 14000.5 0 14010.6 0 K 14021.5 1 K 1403 1404// JDK seems to always round halfEven! Why? Bug in JDK or bug in test? 1405test rounding mode expand 1406set locale en 1407set roundingMode up 1408begin 1409format output breaks 1410-1.5 -2 14110.4 1 K 14120.5 1 K 14130.6 1 14141.5 2 1415 1416// JDK seems to always round halfEven! Why? Bug in JDK or bug in test? 1417test rounding mode trunc 1418set locale en 1419set roundingMode down 1420begin 1421format output breaks 1422-1.5 -1 K 14230.4 0 14240.5 0 14250.6 0 K 14261.5 1 K 1427 1428// Not supported in Java BigDecimal 1429test rounding mode halfCeil 1430set locale en 1431set roundingMode halfCeiling 1432begin 1433format output breaks 1434-1.5 -1 JKP 14350.4 0 JP 14360.5 1 JKP 14370.6 1 JP 14381.5 2 JP 1439 1440// Not supported in Java BigDecimal 1441test rounding mode halfFloor 1442set locale en 1443set roundingMode halfFloor 1444begin 1445format output breaks 1446-1.5 -2 JP 14470.4 0 JP 14480.5 0 JP 14490.6 1 JP 14501.5 1 JKP 1451 1452// JDK seems to always round halfEven! Why? Bug in JDK or bug in test? 1453test rounding mode halfExpand 1454set locale en 1455set roundingMode halfUp 1456begin 1457format output breaks 1458-1.5 -2 14590.4 0 14600.5 1 K 14610.6 1 14621.5 2 1463 1464// JDK seems to always round halfEven! Why? Bug in JDK or bug in test? 1465test rounding mode halfTrunc 1466set locale en 1467set roundingMode halfDown 1468begin 1469format output breaks 1470-1.5 -1 K 14710.4 0 14720.5 0 14730.6 1 14741.5 1 K 1475 1476test rounding mode halfEven 1477set locale en 1478set roundingMode halfEven 1479begin 1480format output breaks 1481-1.5 -2 14820.4 0 14830.5 0 14840.6 1 14851.5 2 1486 1487// Not supported in Java BigDecimal 1488test rounding mode halfOdd 1489set locale en 1490set roundingMode halfOdd 1491begin 1492format output breaks 1493-1.5 -1 JKP 14940.4 0 JP 14950.5 1 JKP 14960.6 1 JP 14971.5 1 JKP 1498 1499test parse decimalPatternMatchRequired 1500set locale en 1501set decimalPatternMatchRequired 1 1502begin 1503pattern parse output breaks 1504// K doesn't support this feature. 15050 123 123 15060 123. fail K 15070 1.23 fail K 15080 -513 -513 15090 -513. fail K 15100 -5.13 fail K 15110.0 123 fail K 15120.0 123. 123 15130.0 1.23 1.23 15140.0 -513 fail K 15150.0 -513. -513 15160.0 -5.13 -5.13 1517 1518test parse minus sign 1519set locale en 1520set pattern # 1521begin 1522pattern 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 1532test parse case sensitive 1533set locale en 1534set lenient 1 1535set pattern Aa# 1536begin 1537parse parseCaseSensitive output breaks 1538Aa1.23 1 1.23 1539Aa1.23 0 1.23 1540AA1.23 1 fail 1541// K does not support case-insensitive parsing for prefix/suffix. 1542AA1.23 0 1.23 K 1543aa1.23 1 fail 1544aa1.23 0 1.23 K 1545Aa1.23E3 1 1230 1546Aa1.23E3 0 1230 1547Aa1.23e3 1 1.23 1548Aa1.23e3 0 1230 K 1549NaN 1 NaN 1550NaN 0 NaN 1551nan 1 fail 1552nan 0 NaN K 1553 1554test parse infinity and scientific notation overflow 1555set locale en 1556set lenient 1 1557begin 1558parse output breaks 1559NaN NaN 1560// JDK returns zero 15611E999999999999999 Inf K 1562-1E999999999999999 -Inf K 15631E-99999999999999 0.0 1564// Note: The test suite code doesn't properly check for 0.0 vs. -0.0 1565-1E-99999999999999 -0.0 15661E2147483648 Inf K 15671E2147483647 Inf K 1568// J and K get Infinity 15691E2147483646 1E+2147483646 JK 15701E-2147483649 0 15711E-2147483648 0 1572// K returns zero here 15731E-2147483647 1E-2147483647 JK 15741E-2147483646 1E-2147483646 JK 1575 1576test format push limits 1577set locale en 1578set minFractionDigits 2 1579set roundingMode halfDown 1580begin 1581maxFractionDigits format output breaks 1582100 987654321987654321 987654321987654321.00 1583100 987654321.987654321 987654321.987654321 1584100 9999999999999.9950000000001 9999999999999.9950000000001 15852 9999999999999.9950000000001 10000000000000.00 15862 9999999.99499999 9999999.99 1587// K doesn't support halfDown rounding mode? 15882 9999999.995 9999999.99 K 15892 9999999.99500001 10000000.00 1590100 56565656565656565656565656565656565656565656565656565656565656 56565656565656565656565656565656565656565656565656565656565656.00 1591100 454545454545454545454545454545.454545454545454545454545454545 454545454545454545454545454545.454545454545454545454545454545 1592100 0.0000000000000000000123 0.0000000000000000000123 1593100 -78787878787878787878787878787878 -78787878787878787878787878787878.00 1594100 -8989898989898989898989.8989898989898989 -8989898989898989898989.8989898989898989 1595 1596test ticket 11230 1597set locale en 1598begin 1599pattern 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 16100 1 9 9 9 16110 1 9 99 9 16120 1 9 999 9 16130 1 9 9 9 9 16140 1 ,9 fail 16150 1 99,.0 99 16160 1 9 9. 9 16170 1 9 99. 9 1618#,##0 0 9 9 fail K 1619#,##0 0 9 99 fail K 1620#,##0 0 9 999 9999 K 1621#,##0 0 9 9 9 fail K 1622#,##0 0 ,9 fail K 1623#,##0 0 99,.0 fail K 1624#,##0 0 9 9. fail K 1625#,##0 0 9 99. fail K 16260 0 9 9 9 16270 0 9 99 9 16280 0 9 999 9 16290 0 9 9 9 9 16300 0 ,9 fail 16310 0 99,.0 99 16320 0 9 9. 9 16330 0 9 99. 9 1634 1635test more strict grouping parse 1636set locale en 1637set pattern #,##,##0 1638begin 1639lenient parse output breaks 16401 1,23,, 123 16410 9999, 9999 16420 1,23,, fail K 1643 1644test parse ignorables 1645set locale ar 1646// Note: Prefixes contain RLMs, as do some of the test cases. 1647set pattern x ab0c df 1648set negativePrefix y gh 1649set negativeSuffix i jk 1650begin 1651parse output breaks 1652x ab56c df 56 1653x ab56c df 56 K 1654x ab56c df 56 K 1655x ab56c df 56 K 1656x ab56c df 56 K 1657x ab56 56 K 1658x a b56 56 K 165956cdf 56 K 166056c df 56 K 166156cd f 56 K 166256cdf 56 K 166356cdf 56 K 166456c df 56 K 166556c df 56 K 1666y gh56i jk -56 1667y gh56i jk -56 K 1668y gh56i jk -56 K 1669y gh56i jk -56 K 1670y gh56i jk -56 K 1671y gh56 -56 K 1672y 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 167556ijk -56 K 167656i jk -56 K 167756ij k -56 K 167856ijk -56 K 167956ijk -56 K 168056i jk -56 K 168156i jk -56 K 1682// S and C get 56 (accepts ' ' gs grouping); K gets null 16835 6 fail CJP 168456 5 K 1685 1686test 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 1690set locale en 1691set pattern #,##0 1692begin 1693parse output breaks 16941 2 1 16951 23 123 K 1696// K gets 1 here; doesn't pick up the grouping separator 16971 234 1234 K 1698 1699test rounding increment significant digits 1700// This test is for #13111 1701set locale en 1702set pattern 0.1 1703set useSigDigits 1 1704set maxSigDigits 2 1705begin 1706format output breaks 1707// C and J get "1" 1708// P gets "1.0" 1709// K gets "1.1" (??) 17100.975 0.98 CJKP 1711 1712test lenient parse currency match 1713// This test is for #13112 1714set locale en 1715set pattern ¤#,##0.00 1716begin 1717parse output breaks 1718// K gets null 17191.23!@#$%^ 1.23 K 1720 1721test percentage parsing multiplier 1722// This test is for #13114 1723set locale en 1724set pattern 0% 1725begin 1726parse output breaks 172755% 0.55 1728// K gets null 1729// C and P scale by 100 even if the percent sign is not present 173055 0.55 K 1731 1732test trailing grouping separators in pattern 1733// This test is for #13115 1734set locale en 1735begin 1736pattern 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 1742test empty negative subpattern 1743// This test is for #13117 1744set locale en 1745begin 1746pattern format output breaks 17470 -15 -15 17480; -15 -15 1749// K still prepends a '-' even though the pattern says otherwise 17500;0 -15 15 K 1751 1752test percentage multiplier parsing 1753// This test is for #13129 1754set locale en 1755set pattern 0% 1756begin 1757parse output breaks 17589223372036854775807% 92233720368547758.07 K 1759 1760test sign always shown 1761set locale en 1762set pattern 0 1763set signAlwaysShown 1 1764begin 1765format output breaks 1766// K does not support this feature 176742 +42 K 17680 +0 K 1769-42 -42 1770 1771test parse strict with plus sign 1772set locale en 1773set pattern 0 1774set signAlwaysShown 1 1775begin 1776lenient parse output breaks 17771 42 42 17781 -42 -42 17791 +42 42 K 17801 0 0 17811 +0 0 K 17820 42 fail K 17830 -42 -42 17840 +42 42 K 17850 0 fail K 17860 +0 0 K 1787 1788test parse with scientific-separator-affix overlap 1789set locale en 1790begin 1791pattern lenient parse output breaks 17920E0','x 1 5E3,x 5000 17930E0','x 0 5E3,x 5000 17940E0'.'x 1 5E3.x 5000 17950E0'.'x 0 5E3.x 5000 1796 1797test parse() lowercase currency 1798set locale en 1799set pattern ¤¤0 1800set currency USD 1801begin 1802parse output breaks 1803USD123 123 1804USD 123 123 K 1805usd123 123 K 1806usd 123 123 K 1807Usd123 123 K 1808Usd 123 123 K 1809// US$ is not used for US dollars in en-US 1810US$123 fail 1811us$123 fail 1812Us$123 fail 1813123 US dollars 123 K 1814123 US DOLLARS 123 K 1815123 us dollars 123 K 1816// Foreign currencies are not accepted in .parse() 1817GBP123 fail 1818gbp123 fail 1819British pounds 123 fail 1820british POUNDS 123 fail 1821 1822test parseCurrency() lowercase currency 1823set locale en 1824set pattern ¤¤0 1825set currency USD 1826begin 1827parse output outputCurrency breaks 1828USD123 123 USD 1829USD 123 123 USD 1830usd123 123 USD 1831usd 123 123 USD 1832Usd123 123 USD 1833Usd 123 123 USD 1834US$123 123 USD C 1835us$123 fail fail 1836Us$123 fail fail 1837123 US dollars 123 USD 1838123 US DOLLARS 123 USD 1839123 us dollars 123 USD 1840GBP123 123 GBP 1841gbp123 123 GBP C 1842British pounds 123 123 GBP 1843british POUNDS 123 123 GBP 1844 1845test parse scientific with bidi marks 1846begin 1847locale parse output breaks 1848en 4E\u200E+02 400 K 1849en 4E+02 400 K 1850he 4E\u200E+02 400 K 1851he 4E+02 400 K 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892