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 ab0c df 1648 set negativePrefix y gh 1649 set negativeSuffix i jk 1650 begin 1651 parse output breaks 1652 x ab56c df 56 1653 x ab56c 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 56cdf 56 K 1663 56cdf 56 K 1664 56c df 56 K 1665 56c df 56 K 1666 y gh56i jk -56 1667 y gh56i 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 56ijk -56 K 1679 56ijk -56 K 1680 56i jk -56 K 1681 56i jk -56 K 1682 // S and C get 56 (accepts ' ' gs grouping); K gets null 1683 5 6 fail CJP 1684 56 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