New test/java/util/Formatter/Basic-X.java.template (original) (raw)

1 /* 2 * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 / 23 24 / Type-specific source code for unit test 25 * 26 * Regenerate the BasicX classes via genBasic.sh whenever this file changes. 27 * We check in the generated source files so that the test tree can be used 28 * independently of the rest of the source tree. 29 / 30 31 #warn This file is preprocessed before being compiled 32 33 import java.io.; 34 import java.math.BigDecimal; 35 import java.math.BigInteger; 36 import java.text.DateFormatSymbols; 37 import java.util.; 38 #if[double] 39 import sun.misc.DoubleConsts; 40 #end[double] 41 42 import static java.util.Calendar.; 43 #if[datetime] 44 import static java.util.SimpleTimeZone.; 45 import java.util.regex.Pattern; 46 #end[datetime] 47 48 public class Basic$Type$ extends Basic { 49 50 private static void test(String fs, String exp, Object ... args) { 51 Formatter f = new Formatter(new StringBuilder(), Locale.US); 52 f.format(fs, args); 53 ck(fs, exp, f.toString()); 54 } 55 56 private static void test(Locale l, String fs, String exp, Object ... args) 57 { 58 Formatter f = new Formatter(new StringBuilder(), l); 59 f.format(fs, args); 60 ck(fs, exp, f.toString()); 61 } 62 63 private static void test(String fs, Object ... args) { 64 Formatter f = new Formatter(new StringBuilder(), Locale.US); 65 f.format(fs, args); 66 ck(fs, "fail", f.toString()); 67 } 68 69 private static void test(String fs) { 70 Formatter f = new Formatter(new StringBuilder(), Locale.US); 71 f.format(fs, "fail"); 72 ck(fs, "fail", f.toString()); 73 } 74 75 private static void testSysOut(String fs, String exp, Object ... args) { 76 FileOutputStream fos = null; 77 FileInputStream fis = null; 78 try { 79 PrintStream saveOut = System.out; 80 fos = new FileOutputStream("testSysOut"); 81 System.setOut(new PrintStream(fos)); 82 System.out.format(Locale.US, fs, args); 83 fos.close(); 84 85 fis = new FileInputStream("testSysOut"); 86 byte [] ba = new byte[exp.length()]; 87 int len = fis.read(ba); 88 String got = new String(ba); 89 if (len != ba.length) 90 fail(fs, exp, got); 91 ck(fs, exp, got); 92 93 System.setOut(saveOut); 94 } catch (FileNotFoundException ex) { 95 fail(fs, ex.getClass()); 96 } catch (IOException ex) { 97 fail(fs, ex.getClass()); 98 } finally { 99 try { 100 if (fos != null) 101 fos.close(); 102 if (fis != null) 103 fis.close(); 104 } catch (IOException ex) { 105 fail(fs, ex.getClass()); 106 } 107 } 108 } 109 110 private static void tryCatch(String fs, Class ex) { 111 boolean caught = false; 112 try { 113 test(fs); 114 } catch (Throwable x) { 115 if (ex.isAssignableFrom(x.getClass())) 116 caught = true; 117 } 118 if (!caught) 119 fail(fs, ex); 120 else 121 pass(); 122 } 123 124 private static void tryCatch(String fs, Class ex, Object ... args) { 125 boolean caught = false; 126 try { 127 test(fs, args); 128 } catch (Throwable x) { 129 if (ex.isAssignableFrom(x.getClass())) 130 caught = true; 131 } 132 if (!caught) 133 fail(fs, ex); 134 else 135 pass(); 136 } 137 138 #if[datetime] 139 private static void testDateTime(String fs, String exp, Calendar c) { 140 testDateTime(fs, exp, c, true); 141 } 142 143 private static void testDateTime(String fs, String exp, Calendar c, boolean upper) { 144 //--------------------------------------------------------------------- 145 // Date/Time conversions applicable to Calendar, Date, and long. 146 //--------------------------------------------------------------------- 147 148 // Calendar 149 test(fs, exp, c); 150 test((Locale)null, fs, exp, c); 151 test(Locale.US, fs, exp, c); 152 153 // Date/long do not have timezone information so they will always use 154 // the default timezone. 155 String nexp = (fs.equals("%tZ") || fs.equals("%TZ") 156 || fs.equals("%tc") || fs.equals("%Tc") 157 ? exp.replace("PST", "GMT-08:00") 158 : exp); 159 160 // Date (implemented via conversion to Calendar) 161 Date d = c.getTime(); 162 test(fs, nexp, d); 163 test((Locale)null, fs, nexp, d); 164 test(Locale.US, fs, nexp, d); 165 166 // long (implemented via conversion to Calendar) 167 long l = c.getTimeInMillis(); 168 test(fs, nexp, l); 169 test((Locale)null, fs, nexp, l); 170 test(Locale.US, fs, nexp, l); 171 172 if (upper) 173 // repeat all tests for upper case variant (%T) 174 testDateTime(Pattern.compile("t").matcher(fs).replaceFirst("T"), 175 exp.toUpperCase(), c, false); 176 } 177 178 private static void testHours() { 179 for (int i = 0; i < 24; i++) { 180 // GregorianCalendar(int year, int month, int dayOfMonth, 181 // int hourOfDay, int minute, int second); 182 Calendar c = new GregorianCalendar(1995, MAY, 23, i, 48, 34); 183 184 //----------------------------------------------------------------- 185 // DateTime.HOUR_OF_DAY - 'k' (0 - 23) -- like H 186 //----------------------------------------------------------------- 187 String exp = Integer.toString(i); 188 testDateTime("%tk", exp, c); 189 190 //----------------------------------------------------------------- 191 // DateTime.HOUR - 'l' (1 - 12) -- like I 192 //----------------------------------------------------------------- 193 int v = i % 12; 194 v = (v == 0 ? 12 : v); 195 String exp2 = Integer.toString(v); 196 testDateTime("%tl", exp2, c); 197 198 //----------------------------------------------------------------- 199 // DateTime.HOUR_OF_DAY_0 - 'H' (00 - 23) [zero padded] 200 //----------------------------------------------------------------- 201 if (exp.length() < 2) exp = "0" + exp; 202 testDateTime("%tH", exp, c); 203 204 //----------------------------------------------------------------- 205 // DateTime.HOUR_0 - 'I' (01 - 12) 206 //----------------------------------------------------------------- 207 if (exp2.length() < 2) exp2 = "0" + exp2; 208 testDateTime("%tI", exp2, c); 209 210 //----------------------------------------------------------------- 211 // DateTime.AM_PM - (am or pm) 212 //----------------------------------------------------------------- 213 testDateTime("%tp", (i <12 ? "am" : "pm"), c); 214 } 215 } 216 #end[datetime] 217 218 #if[dec] 219 #if[prim] 220 private static typetypetype negate($type$ v) { 221 return ($type$) -v; 222 } 223 #end[prim] 224 #end[dec] 225 #if[Byte] 226 private static typetypetype negate($type$ v) { 227 return new typetypetype((byte) -v.byteValue()); 228 } 229 #end[Byte] 230 #if[Short] 231 private static typetypetype negate($type$ v) { 232 return new typetypetype((short) -v.shortValue()); 233 } 234 #end[Short] 235 #if[Integer] 236 private static typetypetype negate($type$ v) { 237 return new typetypetype(-v.intValue()); 238 } 239 #end[Integer] 240 #if[Long] 241 private static typetypetype negate($type$ v) { 242 return new typetypetype(-v.longValue()); 243 } 244 #end[Long] 245 246 #if[BigDecimal] 247 private static typetypetype create(double v) { 248 return new typetypetype(v); 249 } 250 251 private static typetypetype negate($type$ v) { 252 return v.negate(); 253 } 254 255 private static typetypetype mult($type$ v, double mul) { 256 return v.multiply(new typetypetype(mul)); 257 } 258 259 private static typetypetype recip($type$ v) { 260 return BigDecimal.ONE.divide(v); 261 } 262 #end[BigDecimal] 263 #if[float] 264 private static typetypetype create(double v) { 265 return ($type$) v; 266 } 267 268 private static typetypetype negate(double v) { 269 return ($type$) -v; 270 } 271 272 private static typetypetype mult($type$ v, double mul) { 273 return v * ($type$) mul; 274 } 275 276 private static typetypetype recip($type$ v) { 277 return 1.0f / v; 278 } 279 #end[float] 280 #if[Float] 281 private static typetypetype create(double v) { 282 return new typetypetype(v); 283 } 284 285 private static typetypetype negate($type$ v) { 286 return new typetypetype(-v.floatValue()); 287 } 288 289 private static typetypetype mult($type$ v, double mul) { 290 return new typetypetype(v.floatValue() * (float) mul); 291 } 292 293 private static typetypetype recip($type$ v) { 294 return new typetypetype(1.0f / v.floatValue()); 295 } 296 #end[Float] 297 #if[double] 298 private static typetypetype create(double v) { 299 return ($type$) v; 300 } 301 302 303 private static typetypetype negate(double v) { 304 return -v; 305 } 306 307 private static typetypetype mult($type$ v, double mul) { 308 return v * mul; 309 } 310 311 private static typetypetype recip($type$ v) { 312 return 1.0 / v; 313 } 314 #end[double] 315 #if[Double] 316 private static typetypetype create(double v) { 317 return new typetypetype(v); 318 } 319 320 private static typetypetype negate($type$ v) { 321 return new typetypetype(-v.doubleValue()); 322 } 323 324 private static typetypetype mult($type$ v, double mul) { 325 return new typetypetype(v.doubleValue() * mul); 326 } 327 328 private static typetypetype recip($type$ v) { 329 return new typetypetype(1.0 / v.doubleValue()); 330 } 331 #end[Double] 332 333 public static void test() { 334 TimeZone.setDefault(TimeZone.getTimeZone("GMT-0800")); 335 336 // Any characters not explicitly defined as conversions, date/time 337 // conversion suffixes, or flags are illegal and are reserved for 338 // future extensions. Use of such a character in a format string will 339 // cause an UnknownFormatConversionException or 340 // UnknownFormatFlagsException to be thrown. 341 tryCatch("%q", UnknownFormatConversionException.class); 342 tryCatch("%t&", UnknownFormatConversionException.class); 343 tryCatch("%&d", UnknownFormatConversionException.class); 344 tryCatch("%^b", UnknownFormatConversionException.class); 345 346 //--------------------------------------------------------------------- 347 // Formatter.java class javadoc examples 348 //--------------------------------------------------------------------- 349 test(Locale.FRANCE, "e = %+10.4f", "e = +2,7183", Math.E); 350 test("%4$2s %3$2s %2$2s %1$2s", " d c b a", "a", "b", "c", "d"); 351 test("Amount gained or lost since last statement: $ %,(.2f", 352 "Amount gained or lost since last statement: $ (6,217.58)", 353 (new BigDecimal("-6217.58"))); 354 Calendar c = new GregorianCalendar(1969, JULY, 20, 16, 17, 0); 355 testSysOut("Local time: %tT", "Local time: 16:17:00", c); 356 357 test("Unable to open file '%1$s': %2$s", 358 "Unable to open file 'food': No such file or directory", 359 "food", "No such file or directory"); 360 Calendar duke = new GregorianCalendar(1995, MAY, 23, 19, 48, 34); 361 duke.set(Calendar.MILLISECOND, 584); 362 test("Duke's Birthday: %1$tB %1$te, %1$tY", 363 "Duke's Birthday: May 23, 1995", 364 duke); 365 test("Duke's Birthday: %1$tB %1$te, %1$tY", 366 "Duke's Birthday: May 23, 1995", 367 duke.getTime()); 368 test("Duke's Birthday: %1$tB %1$te, %1$tY", 369 "Duke's Birthday: May 23, 1995", 370 duke.getTimeInMillis()); 371 372 test("%4$s %3$s %2$s %1$s %4$s %3$s %2$s %1$s", 373 "d c b a d c b a", "a", "b", "c", "d"); 374 test("%s %s %<s %<s", "a b b b", "a", "b", "c", "d"); 375 test("%s %s %s %s", "a b c d", "a", "b", "c", "d"); 376 test("%2$s %s %<s %s", "b a a b", "a", "b", "c", "d"); 377 378 //--------------------------------------------------------------------- 379 // %b 380 // 381 // General conversion applicable to any argument. 382 //--------------------------------------------------------------------- 383 test("%b", "true", true); 384 test("%b", "false", false); 385 test("%B", "TRUE", true); 386 test("%B", "FALSE", false); 387 test("%b", "true", Boolean.TRUE); 388 test("%b", "false", Boolean.FALSE); 389 test("%B", "TRUE", Boolean.TRUE); 390 test("%B", "FALSE", Boolean.FALSE); 391 test("%14b", " true", true); 392 test("%-14b", "true ", true); 393 test("%5.1b", " f", false); 394 test("%-5.1b", "f ", false); 395 396 test("%b", "true", "foo"); 397 test("%b", "false", (Object)null); 398 399 // Boolean.java hardcodes the Strings for "true" and "false", so no 400 // localization is possible. 401 test(Locale.FRANCE, "%b", "true", true); 402 test(Locale.FRANCE, "%b", "false", false); 403 404 // If you pass in a single array to a varargs method, the compiler 405 // uses it as the array of arguments rather than treating it as a 406 // single array-type argument. 407 test("%b", "false", (Object[])new String[2]); 408 test("%b", "true", new String[2], new String[2]); 409 410 int [] ia = { 1, 2, 3 }; 411 test("%b", "true", ia); 412 413 //--------------------------------------------------------------------- 414 // %b - errors 415 //--------------------------------------------------------------------- 416 tryCatch("%#b", FormatFlagsConversionMismatchException.class); 417 tryCatch("%-b", MissingFormatWidthException.class); 418 // correct or side-effect of implementation? 419 tryCatch("%.b", UnknownFormatConversionException.class); 420 tryCatch("%,b", FormatFlagsConversionMismatchException.class); 421 422 //--------------------------------------------------------------------- 423 // %c 424 // 425 // General conversion applicable to any argument. 426 //--------------------------------------------------------------------- 427 test("%c", "i", 'i'); 428 test("%C", "I", 'i'); 429 test("%4c", " i", 'i'); 430 test("%-4c", "i ", 'i'); 431 test("%4C", " I", 'i'); 432 test("%-4C", "I ", 'i'); 433 test("%c", "i", new Character('i')); 434 test("%c", "H", (byte) 72); 435 test("%c", "i", (short) 105); 436 test("%c", "!", (int) 33); 437 test("%c", "\u007F", Byte.MAX_VALUE); 438 test("%c", new String(Character.toChars(Short.MAX_VALUE)), 439 Short.MAX_VALUE); 440 test("%c", "null", (Object) null); 441 442 //--------------------------------------------------------------------- 443 // %c - errors 444 //--------------------------------------------------------------------- 445 tryCatch("%c", IllegalFormatConversionException.class, 446 Boolean.TRUE); 447 tryCatch("%c", IllegalFormatConversionException.class, 448 (float) 0.1); 449 tryCatch("%c", IllegalFormatConversionException.class, 450 new Object()); 451 tryCatch("%c", IllegalFormatCodePointException.class, 452 Byte.MIN_VALUE); 453 tryCatch("%c", IllegalFormatCodePointException.class, 454 Short.MIN_VALUE); 455 tryCatch("%c", IllegalFormatCodePointException.class, 456 Integer.MIN_VALUE); 457 tryCatch("%c", IllegalFormatCodePointException.class, 458 Integer.MAX_VALUE); 459 460 tryCatch("%#c", FormatFlagsConversionMismatchException.class); 461 tryCatch("%,c", FormatFlagsConversionMismatchException.class); 462 tryCatch("%(c", FormatFlagsConversionMismatchException.class); 463 tryCatch("%$c", UnknownFormatConversionException.class); 464 tryCatch("%.2c", IllegalFormatPrecisionException.class); 465 466 //--------------------------------------------------------------------- 467 // %s 468 // 469 // General conversion applicable to any argument. 470 //--------------------------------------------------------------------- 471 test("%s", "Hello, Duke", "Hello, Duke"); 472 test("%S", "HELLO, DUKE", "Hello, Duke"); 473 test("%20S", " HELLO, DUKE", "Hello, Duke"); 474 test("%20s", " Hello, Duke", "Hello, Duke"); 475 test("%-20s", "Hello, Duke ", "Hello, Duke"); 476 test("%-20.5s", "Hello ", "Hello, Duke"); 477 test("%s", "null", (Object)null); 478 479 StringBuffer sb = new StringBuffer("foo bar"); 480 test("%s", sb.toString(), sb); 481 test("%S", sb.toString().toUpperCase(), sb); 482 483 //--------------------------------------------------------------------- 484 // %s - errors 485 //--------------------------------------------------------------------- 486 tryCatch("%-s", MissingFormatWidthException.class); 487 tryCatch("%--s", DuplicateFormatFlagsException.class); 488 tryCatch("%#s", FormatFlagsConversionMismatchException.class, 0); 489 tryCatch("%#s", FormatFlagsConversionMismatchException.class, 0.5f); 490 tryCatch("%#s", FormatFlagsConversionMismatchException.class, "hello"); 491 tryCatch("%#s", FormatFlagsConversionMismatchException.class, null); 492 493 //--------------------------------------------------------------------- 494 // %h 495 // 496 // General conversion applicable to any argument. 497 //--------------------------------------------------------------------- 498 test("%h", Integer.toHexString("Hello, Duke".hashCode()), 499 "Hello, Duke"); 500 test("%10h", " ddf63471", "Hello, Duke"); 501 test("%-10h", "ddf63471 ", "Hello, Duke"); 502 test("%-10H", "DDF63471 ", "Hello, Duke"); 503 test("%10h", " 402e0000", 15.0); 504 test("%10H", " 402E0000", 15.0); 505 506 //--------------------------------------------------------------------- 507 // %h - errors 508 //--------------------------------------------------------------------- 509 tryCatch("%#h", FormatFlagsConversionMismatchException.class); 510 511 //--------------------------------------------------------------------- 512 // flag/conversion errors 513 //--------------------------------------------------------------------- 514 tryCatch("%F", UnknownFormatConversionException.class); 515 516 tryCatch("%#g", FormatFlagsConversionMismatchException.class); 517 518 #if[dec] 519 520 #if[prim] 521 typetypetype minByte = Byte.MIN_VALUE; // -128 522 #else[prim] 523 typetypetype minByte = new typetypetype(Byte.MIN_VALUE); 524 #end[prim] 525 526 //--------------------------------------------------------------------- 527 // %d 528 // 529 // Numeric conversion applicable to byte, short, int, long, and 530 // BigInteger. 531 //--------------------------------------------------------------------- 532 test("%d", "null", (Object)null); 533 534 #if[byte] 535 #if[prim] 536 //--------------------------------------------------------------------- 537 // %d - byte 538 //--------------------------------------------------------------------- 539 typetypetype seventeen = ($type$) 17; 540 test("%d", "17", seventeen); 541 test("%,d", "17", seventeen); 542 test("%,d", "-17", negate(seventeen)); 543 test("%(d", "17", seventeen); 544 test("%(d", "(17)", negate(seventeen)); 545 test("% d", " 17", seventeen); 546 test("% d", "-17", negate(seventeen)); 547 test("%+d", "+17", seventeen); 548 test("%+d", "-17", negate(seventeen)); 549 test("%010d", "0000000017", seventeen); 550 test("%010d", "-000000017", negate(seventeen)); 551 test("%(10d", " (17)", negate(seventeen)); 552 test("%-10d", "17 ", seventeen); 553 test("%-10d", "-17 ", negate(seventeen)); 554 #end[prim] 555 #else[byte] 556 #if[short] 557 //--------------------------------------------------------------------- 558 // %d - short 559 //--------------------------------------------------------------------- 560 typetypetype oneToFive = ($type$) 12345; 561 test("%d", "12345", oneToFive); 562 test("%,d", "12,345", oneToFive); 563 test("%,d", "-12,345", negate(oneToFive)); 564 test("%(d", "12345", oneToFive); 565 test("%(d", "(12345)", negate(oneToFive)); 566 test("% d", " 12345", oneToFive); 567 test("% d", "-12345", negate(oneToFive)); 568 test("%+d", "+12345", oneToFive); 569 test("%+d", "-12345", negate(oneToFive)); 570 test("%010d", "0000012345", oneToFive); 571 test("%010d", "-000012345", negate(oneToFive)); 572 test("%(10d", " (12345)", negate(oneToFive)); 573 test("%-10d", "12345 ", oneToFive); 574 test("%-10d", "-12345 ", negate(oneToFive)); 575 576 #else[short] 577 #if[prim] 578 //--------------------------------------------------------------------- 579 // %d - int and long 580 //--------------------------------------------------------------------- 581 typetypetype oneToSeven = ($type$) 1234567; 582 test("%d", "1234567", oneToSeven); 583 test("%,d", "1,234,567", oneToSeven); 584 test(Locale.FRANCE, "%,d", "1\u00a0234\u00a0567", oneToSeven); 585 test("%,d", "-1,234,567", negate(oneToSeven)); 586 test("%(d", "1234567", oneToSeven); 587 test("%(d", "(1234567)", negate(oneToSeven)); 588 test("% d", " 1234567", oneToSeven); 589 test("% d", "-1234567", negate(oneToSeven)); 590 test("%+d", "+1234567", oneToSeven); 591 test("%+d", "-1234567", negate(oneToSeven)); 592 test("%010d", "0001234567", oneToSeven); 593 test("%010d", "-001234567", negate(oneToSeven)); 594 test("%(10d", " (1234567)", negate(oneToSeven)); 595 test("%-10d", "1234567 ", oneToSeven); 596 test("%-10d", "-1234567 ", negate(oneToSeven)); 597 #end[prim] 598 #end[short] 599 #end[byte] 600 //--------------------------------------------------------------------- 601 // %d - errors 602 //--------------------------------------------------------------------- 603 tryCatch("%#d", FormatFlagsConversionMismatchException.class); 604 tryCatch("%D", UnknownFormatConversionException.class); 605 tryCatch("%0d", MissingFormatWidthException.class); 606 tryCatch("%-d", MissingFormatWidthException.class); 607 tryCatch("%7.3d", IllegalFormatPrecisionException.class); 608 609 //--------------------------------------------------------------------- 610 // %o 611 // 612 // Numeric conversion applicable to byte, short, int, long, and 613 // BigInteger. 614 //--------------------------------------------------------------------- 615 test("%o", "null", (Object)null); 616 617 #if[byte] 618 //--------------------------------------------------------------------- 619 // %o - byte 620 //--------------------------------------------------------------------- 621 test("%010o", "0000000200", minByte); 622 test("%-10o", "200 ", minByte); 623 test("%#10o", " 0200", minByte); 624 #end[byte] 625 #if[short] 626 //--------------------------------------------------------------------- 627 // %o - short 628 //--------------------------------------------------------------------- 629 630 test("%010o", "0000177600", minByte); 631 test("%-10o", "177600 ", minByte); 632 test("%#10o", " 0177600", minByte); 633 #end[short] 634 #if[int] 635 //--------------------------------------------------------------------- 636 // %o - int 637 //--------------------------------------------------------------------- 638 test("%014o", "00037777777600", minByte); 639 test("%-14o", "37777777600 ", minByte); 640 test("%#14o", " 037777777600", minByte); 641 642 typetypetype oneToSevenOct = ($type$) 1234567; 643 test("%o", "4553207", oneToSevenOct); 644 test("%010o", "0004553207", oneToSevenOct); 645 test("%-10o", "4553207 ", oneToSevenOct); 646 test("%#10o", " 04553207", oneToSevenOct); 647 #end[int] 648 #if[long] 649 //--------------------------------------------------------------------- 650 // %o - long 651 //--------------------------------------------------------------------- 652 test("%024o", "001777777777777777777600", minByte); 653 test("%-24o", "1777777777777777777600 ", minByte); 654 test("%#24o", " 01777777777777777777600", minByte); 655 656 typetypetype oneToSevenOct = ($type$) 1234567; 657 test("%o", "4553207", oneToSevenOct); 658 test("%010o", "0004553207", oneToSevenOct); 659 test("%-10o", "4553207 ", oneToSevenOct); 660 test("%#10o", " 04553207", oneToSevenOct); 661 #end[long] 662 663 //--------------------------------------------------------------------- 664 // %o - errors 665 //--------------------------------------------------------------------- 666 tryCatch("%(o", FormatFlagsConversionMismatchException.class, 667 minByte); 668 tryCatch("%+o", FormatFlagsConversionMismatchException.class, 669 minByte); 670 tryCatch("% o", FormatFlagsConversionMismatchException.class, 671 minByte); 672 tryCatch("%0o", MissingFormatWidthException.class); 673 tryCatch("%-o", MissingFormatWidthException.class); 674 tryCatch("%,o", FormatFlagsConversionMismatchException.class); 675 tryCatch("%O", UnknownFormatConversionException.class); 676 677 //--------------------------------------------------------------------- 678 // %x 679 // 680 // Numeric conversion applicable to byte, short, int, long, and 681 // BigInteger. 682 //--------------------------------------------------------------------- 683 test("%x", "null", (Object)null); 684 685 #if[byte] 686 //--------------------------------------------------------------------- 687 // %x - byte 688 //--------------------------------------------------------------------- 689 test("%010x", "0000000080", minByte); 690 test("%-10x", "80 ", minByte); 691 test("%#10x", " 0x80", minByte); 692 test("%0#10x","0x00000080", minByte); 693 test("%#10X", " 0X80", minByte); 694 test("%X", "80", minByte); 695 #end[byte] 696 #if[short] 697 //--------------------------------------------------------------------- 698 // %x - short 699 //--------------------------------------------------------------------- 700 test("%010x", "000000ff80", minByte); 701 test("%-10x", "ff80 ", minByte); 702 test("%#10x", " 0xff80", minByte); 703 test("%0#10x","0x0000ff80", minByte); 704 test("%#10X", " 0XFF80", minByte); 705 test("%X", "FF80", minByte); 706 #end[short] 707 #if[int] 708 //--------------------------------------------------------------------- 709 // %x - int 710 //--------------------------------------------------------------------- 711 typetypetype oneToSevenHex = ($type$)1234567; 712 test("%x", "null", (Object)null); 713 test("%x", "12d687", oneToSevenHex); 714 test("%010x", "000012d687", oneToSevenHex); 715 test("%-10x", "12d687 ", oneToSevenHex); 716 test("%#10x", " 0x12d687", oneToSevenHex); 717 test("%#10X", " 0X12D687",oneToSevenHex); 718 test("%X", "12D687", oneToSevenHex); 719 720 test("%010x", "00ffffff80", minByte); 721 test("%-10x", "ffffff80 ", minByte); 722 test("%#10x", "0xffffff80", minByte); 723 test("%0#12x","0x00ffffff80", minByte); 724 test("%#12X", " 0XFFFFFF80", minByte); 725 test("%X", "FFFFFF80", minByte); 726 #end[int] 727 #if[long] 728 //--------------------------------------------------------------------- 729 // %x - long 730 //--------------------------------------------------------------------- 731 typetypetype oneToSevenHex = ($type$)1234567; 732 test("%x", "null", (Object)null); 733 test("%x", "12d687", oneToSevenHex); 734 test("%010x", "000012d687", oneToSevenHex); 735 test("%-10x", "12d687 ", oneToSevenHex); 736 test("%#10x", " 0x12d687", oneToSevenHex); 737 test("%#10X", " 0X12D687",oneToSevenHex); 738 test("%X", "12D687", oneToSevenHex); 739 740 test("%018x", "00ffffffffffffff80", minByte); 741 test("%-18x", "ffffffffffffff80 ", minByte); 742 test("%#20x", " 0xffffffffffffff80", minByte); 743 test("%0#20x", "0x00ffffffffffffff80", minByte); 744 test("%#20X", " 0XFFFFFFFFFFFFFF80", minByte); 745 test("%X", "FFFFFFFFFFFFFF80", minByte); 746 #end[long] 747 //--------------------------------------------------------------------- 748 // %x - errors 749 //--------------------------------------------------------------------- 750 tryCatch("%,x", FormatFlagsConversionMismatchException.class); 751 tryCatch("%0x", MissingFormatWidthException.class); 752 tryCatch("%-x", MissingFormatWidthException.class); 753 754 #end[dec] 755 756 #if[BigInteger] 757 //--------------------------------------------------------------------- 758 // BigInteger - errors 759 //--------------------------------------------------------------------- 760 tryCatch("%f", IllegalFormatConversionException.class, 761 new BigInteger("1")); 762 763 //--------------------------------------------------------------------- 764 // %d - BigInteger 765 //--------------------------------------------------------------------- 766 test("%d", "null", (Object)null); 767 test("%d", "1234567", new BigInteger("1234567", 10)); 768 test("%,d", "1,234,567", new BigInteger("1234567", 10)); 769 test(Locale.FRANCE, "%,d", "1\u00a0234\u00a0567", new BigInteger("1234567", 10)); 770 test("%,d", "-1,234,567", new BigInteger("-1234567", 10)); 771 test("%(d", "1234567", new BigInteger("1234567", 10)); 772 test("%(d", "(1234567)", new BigInteger("-1234567", 10)); 773 test("% d", " 1234567", new BigInteger("1234567", 10)); 774 test("% d", "-1234567", new BigInteger("-1234567", 10)); 775 test("%+d", "+1234567", new BigInteger("1234567", 10)); 776 test("%+d", "-1234567", new BigInteger("-1234567", 10)); 777 test("%010d", "0001234567", new BigInteger("1234567", 10)); 778 test("%010d", "-001234567", new BigInteger("-1234567", 10)); 779 test("%(10d", " (1234567)", new BigInteger("-1234567", 10)); 780 test("%+d", "+1234567", new BigInteger("1234567", 10)); 781 test("%+d", "-1234567", new BigInteger("-1234567", 10)); 782 test("%-10d", "1234567 ", new BigInteger("1234567", 10)); 783 test("%-10d", "-1234567 ", new BigInteger("-1234567", 10)); 784 785 //--------------------------------------------------------------------- 786 // %o - BigInteger 787 //--------------------------------------------------------------------- 788 test("%o", "null", (Object)null); 789 test("%o", "1234567", new BigInteger("1234567", 8)); 790 test("%(o", "1234567", new BigInteger("1234567", 8)); 791 test("%(o", "(1234567)", new BigInteger("-1234567", 8)); 792 test("% o", " 1234567", new BigInteger("1234567", 8)); 793 test("% o", "-1234567", new BigInteger("-1234567", 8)); 794 test("%+o", "+1234567", new BigInteger("1234567", 8)); 795 test("%+o", "-1234567", new BigInteger("-1234567", 8)); 796 test("%010o", "0001234567", new BigInteger("1234567", 8)); 797 test("%010o", "-001234567", new BigInteger("-1234567", 8)); 798 test("%(10o", " (1234567)", new BigInteger("-1234567", 8)); 799 test("%+o", "+1234567", new BigInteger("1234567", 8)); 800 test("%+o", "-1234567", new BigInteger("-1234567", 8)); 801 test("%-10o", "1234567 ", new BigInteger("1234567", 8)); 802 test("%-10o", "-1234567 ", new BigInteger("-1234567", 8)); 803 test("%#10o", " 01234567", new BigInteger("1234567", 8)); 804 test("%#10o", " -01234567", new BigInteger("-1234567", 8)); 805 806 //--------------------------------------------------------------------- 807 // %x - BigInteger 808 //--------------------------------------------------------------------- 809 test("%x", "null", (Object)null); 810 test("%x", "1234567", new BigInteger("1234567", 16)); 811 test("%(x", "1234567", new BigInteger("1234567", 16)); 812 test("%(x", "(1234567)", new BigInteger("-1234567", 16)); 813 test("% x", " 1234567", new BigInteger("1234567", 16)); 814 test("% x", "-1234567", new BigInteger("-1234567", 16)); 815 test("%+x", "+1234567", new BigInteger("1234567", 16)); 816 test("%+x", "-1234567", new BigInteger("-1234567", 16)); 817 test("%010x", "0001234567", new BigInteger("1234567", 16)); 818 test("%010x", "-001234567", new BigInteger("-1234567", 16)); 819 test("%(10x", " (1234567)", new BigInteger("-1234567", 16)); 820 test("%+x", "+1234567", new BigInteger("1234567", 16)); 821 test("%+x", "-1234567", new BigInteger("-1234567", 16)); 822 test("%-10x", "1234567 ", new BigInteger("1234567", 16)); 823 test("%-10x", "-1234567 ", new BigInteger("-1234567", 16)); 824 test("%#10x", " 0x1234567", new BigInteger("1234567", 16)); 825 test("%#10x", "-0x1234567", new BigInteger("-1234567", 16)); 826 test("%#10X", " 0X1234567", new BigInteger("1234567", 16)); 827 test("%#10X", "-0X1234567", new BigInteger("-1234567", 16)); 828 test("%X", "1234567A", new BigInteger("1234567a", 16)); 829 test("%X", "-1234567A", new BigInteger("-1234567a", 16)); 830 #end[BigInteger] 831 832 #if[fp] 833 #if[BigDecimal] 834 //--------------------------------------------------------------------- 835 // %s - BigDecimal 836 //--------------------------------------------------------------------- 837 typetypetype one = BigDecimal.ONE; 838 typetypetype ten = BigDecimal.TEN; 839 typetypetype pi = new typetypetype(Math.PI); 840 typetypetype piToThe300 = pi.pow(300); 841 842 test("%s", "3.141592653589793115997963468544185161590576171875", pi); 843 #end[BigDecimal] 844 #if[float] 845 //--------------------------------------------------------------------- 846 // %s - float 847 //--------------------------------------------------------------------- 848 typetypetype one = 1.0f; 849 typetypetype ten = 10.0f; 850 typetypetype pi = (float) Math.PI; 851 852 test("%s", "3.1415927", pi); 853 #end[float] 854 #if[Float] 855 //--------------------------------------------------------------------- 856 // %s - Float 857 //--------------------------------------------------------------------- 858 typetypetype one = new typetypetype(1.0f); 859 typetypetype ten = new typetypetype(10.0f); 860 typetypetype pi = new typetypetype(Math.PI); 861 862 test("%s", "3.1415927", pi); 863 #end[Float] 864 #if[double] 865 //--------------------------------------------------------------------- 866 // %s - double 867 //--------------------------------------------------------------------- 868 typetypetype one = 1.0; 869 typetypetype ten = 10.0; 870 typetypetype pi = Math.PI; 871 872 test("%s", "3.141592653589793", pi); 873 #end[double] 874 #if[Double] 875 //--------------------------------------------------------------------- 876 // %s - Double 877 //--------------------------------------------------------------------- 878 typetypetype one = new typetypetype(1.0); 879 typetypetype ten = new typetypetype(10.0); 880 typetypetype pi = new typetypetype(Math.PI); 881 882 test("%s", "3.141592653589793", pi); 883 #end[Double] 884 885 //--------------------------------------------------------------------- 886 // flag/conversion errors 887 //--------------------------------------------------------------------- 888 tryCatch("%d", IllegalFormatConversionException.class, one); 889 tryCatch("%,.4e", FormatFlagsConversionMismatchException.class, one); 890 891 //--------------------------------------------------------------------- 892 // %e 893 // 894 // Floating-point conversions applicable to float, double, and 895 // BigDecimal. 896 //--------------------------------------------------------------------- 897 test("%e", "null", (Object)null); 898 899 //--------------------------------------------------------------------- 900 // %e - float and double 901 //--------------------------------------------------------------------- 902 // double PI = 3.141 592 653 589 793 238 46; 903 test("%e", "3.141593e+00", pi); 904 test("%.0e", "1e+01", ten); 905 test("%#.0e", "1.e+01", ten); 906 test("%E", "3.141593E+00", pi); 907 test("%10.3e", " 3.142e+00", pi); 908 test("%10.3e", "-3.142e+00", negate(pi)); 909 test("%010.3e", "03.142e+00", pi); 910 test("%010.3e", "-3.142e+00", negate(pi)); 911 test("%-12.3e", "3.142e+00 ", pi); 912 test("%-12.3e", "-3.142e+00 ", negate(pi)); 913 test("%.3e", "3.142e+00", pi); 914 test("%.3e", "-3.142e+00", negate(pi)); 915 test("%.3e", "3.142e+06", mult(pi, 1000000.0)); 916 test("%.3e", "-3.142e+06", mult(pi, -1000000.0)); 917 918 test(Locale.FRANCE, "%e", "3,141593e+00", pi); 919 920 // double PI^300 921 // = 13962455701329742638131355433930076081862072808 ... e+149 922 #if[BigDecimal] 923 //--------------------------------------------------------------------- 924 // %e - BigDecimal 925 //--------------------------------------------------------------------- 926 test("%.3e", "1.396e+149", piToThe300); 927 test("%.3e", "-1.396e+149", piToThe300.negate()); 928 test("%.3e", "1.000e-100", recip(ten.pow(100))); 929 test("%.3e", "-1.000e-100", negate(recip(ten.pow(100)))); 930 931 test("%3.0e", "1e-06", new BigDecimal("0.000001")); 932 test("%3.0e", "1e-05", new BigDecimal("0.00001")); 933 test("%3.0e", "1e-04", new BigDecimal("0.0001")); 934 test("%3.0e", "1e-03", new BigDecimal("0.001")); 935 test("%3.0e", "1e-02", new BigDecimal("0.01")); 936 test("%3.0e", "1e-01", new BigDecimal("0.1")); 937 test("%3.0e", "9e-01", new BigDecimal("0.9")); 938 test("%3.1e", "9.0e-01", new BigDecimal("0.9")); 939 test("%3.0e", "1e+00", new BigDecimal("1.00")); 940 test("%3.0e", "1e+01", new BigDecimal("10.00")); 941 test("%3.0e", "1e+02", new BigDecimal("99.19")); 942 test("%3.1e", "9.9e+01", new BigDecimal("99.19")); 943 test("%3.0e", "1e+02", new BigDecimal("99.99")); 944 test("%3.0e", "1e+02", new BigDecimal("100.00")); 945 test("%#3.0e", "1.e+03", new BigDecimal("1000.00")); 946 test("%3.0e", "1e+04", new BigDecimal("10000.00")); 947 test("%3.0e", "1e+05", new BigDecimal("100000.00")); 948 test("%3.0e", "1e+06", new BigDecimal("1000000.00")); 949 test("%3.0e", "1e+07", new BigDecimal("10000000.00")); 950 test("%3.0e", "1e+08", new BigDecimal("100000000.00")); 951 #end[BigDecimal] 952 953 test("%10.3e", " 1.000e+00", one); 954 test("%+.3e", "+3.142e+00", pi); 955 test("%+.3e", "-3.142e+00", negate(pi)); 956 test("% .3e", " 3.142e+00", pi); 957 test("% .3e", "-3.142e+00", negate(pi)); 958 test("%#.0e", "3.e+00", create(3.0)); 959 test("%#.0e", "-3.e+00", create(-3.0)); 960 test("%.0e", "3e+00", create(3.0)); 961 test("%.0e", "-3e+00", create(-3.0)); 962 963 test("%(.4e", "3.1416e+06", mult(pi, 1000000.0)); 964 test("%(.4e", "(3.1416e+06)", mult(pi, -1000000.0)); 965 966 //--------------------------------------------------------------------- 967 // %e - boundary problems 968 //--------------------------------------------------------------------- 969 test("%3.0e", "1e-06", 0.000001); 970 test("%3.0e", "1e-05", 0.00001); 971 test("%3.0e", "1e-04", 0.0001); 972 test("%3.0e", "1e-03", 0.001); 973 test("%3.0e", "1e-02", 0.01); 974 test("%3.0e", "1e-01", 0.1); 975 test("%3.0e", "9e-01", 0.9); 976 test("%3.1e", "9.0e-01", 0.9); 977 test("%3.0e", "1e+00", 1.00); 978 test("%3.0e", "1e+01", 10.00); 979 test("%3.0e", "1e+02", 99.19); 980 test("%3.1e", "9.9e+01", 99.19); 981 test("%3.0e", "1e+02", 99.99); 982 test("%3.0e", "1e+02", 100.00); 983 test("%#3.0e", "1.e+03", 1000.00); 984 test("%3.0e", "1e+04", 10000.00); 985 test("%3.0e", "1e+05", 100000.00); 986 test("%3.0e", "1e+06", 1000000.00); 987 test("%3.0e", "1e+07", 10000000.00); 988 test("%3.0e", "1e+08", 100000000.00); 989 990 //--------------------------------------------------------------------- 991 // %f 992 // 993 // Floating-point conversions applicable to float, double, and 994 // BigDecimal. 995 //--------------------------------------------------------------------- 996 test("%f", "null", (Object)null); 997 test("%f", "3.141593", pi); 998 test(Locale.FRANCE, "%f", "3,141593", pi); 999 test("%10.3f", " 3.142", pi); 1000 test("%10.3f", " -3.142", negate(pi)); 1001 test("%010.3f", "000003.142", pi); 1002 test("%010.3f", "-00003.142", negate(pi)); 1003 test("%-10.3f", "3.142 ", pi); 1004 test("%-10.3f", "-3.142 ", negate(pi)); 1005 test("%.3f", "3.142", pi); 1006 test("%.3f", "-3.142", negate(pi)); 1007 test("%+.3f", "+3.142", pi); 1008 test("%+.3f", "-3.142", negate(pi)); 1009 test("% .3f", " 3.142", pi); 1010 test("% .3f", "-3.142", negate(pi)); 1011 test("%#.0f", "3.", create(3.0)); 1012 test("%#.0f", "-3.", create(-3.0)); 1013 test("%.0f", "3", create(3.0)); 1014 test("%.0f", "-3", create(-3.0)); 1015 test("%.3f", "10.000", ten); 1016 test("%.3f", "1.000", one); 1017 test("%10.3f", " 1.000", one); 1018 1019 //--------------------------------------------------------------------- 1020 // %f - boundary problems 1021 //--------------------------------------------------------------------- 1022 test("%3.0f", " 0", 0.000001); 1023 test("%3.0f", " 0", 0.00001); 1024 test("%3.0f", " 0", 0.0001); 1025 test("%3.0f", " 0", 0.001); 1026 test("%3.0f", " 0", 0.01); 1027 test("%3.0f", " 0", 0.1); 1028 test("%3.0f", " 1", 0.9); 1029 test("%3.1f", "0.9", 0.9); 1030 test("%3.0f", " 1", 1.00); 1031 test("%3.0f", " 10", 10.00); 1032 test("%3.0f", " 99", 99.19); 1033 test("%3.1f", "99.2", 99.19); 1034 test("%3.0f", "100", 99.99); 1035 test("%3.0f", "100", 100.00); 1036 test("%#3.0f", "1000.", 1000.00); 1037 test("%3.0f", "10000", 10000.00); 1038 test("%3.0f", "100000", 100000.00); 1039 test("%3.0f", "1000000", 1000000.00); 1040 test("%3.0f", "10000000", 10000000.00); 1041 test("%3.0f", "100000000", 100000000.00); 1042 #if[BigDecimal] 1043 //--------------------------------------------------------------------- 1044 // %f - BigDecimal 1045 //--------------------------------------------------------------------- 1046 test("%4.0f", " 99", new BigDecimal("99.19")); 1047 test("%4.1f", "99.2", new BigDecimal("99.19")); 1048 1049 BigDecimal val = new BigDecimal("99.95"); 1050 test("%4.0f", " 100", val); 1051 test("%#4.0f", "100.", val); 1052 test("%4.1f", "100.0", val); 1053 test("%4.2f", "99.95", val); 1054 test("%4.3f", "99.950", val); 1055 1056 val = new BigDecimal(".99"); 1057 test("%4.1f", " 1.0", val); 1058 test("%4.2f", "0.99", val); 1059 test("%4.3f", "0.990", val); 1060 1061 // #6476425 1062 val = new BigDecimal("0.00001"); 1063 test("%.0f", "0", val); 1064 test("%.1f", "0.0", val); 1065 test("%.2f", "0.00", val); 1066 test("%.3f", "0.000", val); 1067 test("%.4f", "0.0000", val); 1068 test("%.5f", "0.00001", val); 1069 1070 val = new BigDecimal("1.00001"); 1071 test("%.0f", "1", val); 1072 test("%.1f", "1.0", val); 1073 test("%.2f", "1.00", val); 1074 test("%.3f", "1.000", val); 1075 test("%.4f", "1.0000", val); 1076 test("%.5f", "1.00001", val); 1077 1078 val = new BigDecimal("1.23456"); 1079 test("%.0f", "1", val); 1080 test("%.1f", "1.2", val); 1081 test("%.2f", "1.23", val); 1082 test("%.3f", "1.235", val); 1083 test("%.4f", "1.2346", val); 1084 test("%.5f", "1.23456", val); 1085 test("%.6f", "1.234560", val); 1086 1087 val = new BigDecimal("9.99999"); 1088 test("%.0f", "10", val); 1089 test("%.1f", "10.0", val); 1090 test("%.2f", "10.00", val); 1091 test("%.3f", "10.000", val); 1092 test("%.4f", "10.0000", val); 1093 test("%.5f", "9.99999", val); 1094 test("%.6f", "9.999990", val); 1095 1096 1097 val = new BigDecimal("1.99999"); 1098 test("%.0f", "2", val); 1099 test("%.1f", "2.0", val); 1100 test("%.2f", "2.00", val); 1101 test("%.3f", "2.000", val); 1102 test("%.4f", "2.0000", val); 1103 test("%.5f", "1.99999", val); 1104 test("%.6f", "1.999990", val); 1105 1106 val = new BigDecimal(0.9996); 1107 test("%.0f", "1", val); 1108 test("%.1f", "1.0", val); 1109 test("%.2f", "1.00", val); 1110 test("%.3f", "1.000", val); 1111 test("%.4f", "0.9996", val); 1112 test("%.5f", "0.99960", val); 1113 test("%.6f", "0.999600", val); 1114 1115 #end[BigDecimal] 1116 1117 #if[float] 1118 //--------------------------------------------------------------------- 1119 // %f - float 1120 //--------------------------------------------------------------------- 1121 // Float can not accurately store 1e6 * PI. 1122 test("%.3f", "3141.593", mult(pi, 1000.0)); 1123 test("%.3f", "-3141.593", mult(pi, -1000.0)); 1124 1125 test("%,.2f", "3,141.59", mult(pi, 1000.0)); 1126 test(Locale.FRANCE, "%,.2f", "3\u00a0141,59", mult(pi, 1000.0)); 1127 test("%,.2f", "-3,141.59", mult(pi, -1000.0)); 1128 test("%(.2f", "3141.59", mult(pi, 1000.0)); 1129 test("%(.2f", "(3141.59)", mult(pi, -1000.0)); 1130 test("%(,.2f", "3,141.59", mult(pi, 1000.0)); 1131 test("%(,.2f", "(3,141.59)", mult(pi, -1000.0)); 1132 1133 #else[float] 1134 #if[!Float] 1135 //--------------------------------------------------------------------- 1136 // %f - float, double, Double, BigDecimal 1137 //--------------------------------------------------------------------- 1138 test("%.3f", "3141592.654", mult(pi, 1000000.0)); 1139 test("%.3f", "-3141592.654", mult(pi, -1000000.0)); 1140 test("%,.4f", "3,141,592.6536", mult(pi, 1000000.0)); 1141 test(Locale.FRANCE, "%,.4f", "3\u00a0141\u00a0592,6536", mult(pi, 1000000.0)); 1142 test("%,.4f", "-3,141,592.6536", mult(pi, -1000000.0)); 1143 test("%(.4f", "3141592.6536", mult(pi, 1000000.0)); 1144 test("%(.4f", "(3141592.6536)", mult(pi, -1000000.0)); 1145 test("%(,.4f", "3,141,592.6536", mult(pi, 1000000.0)); 1146 test("%(,.4f", "(3,141,592.6536)", mult(pi, -1000000.0)); 1147 #end[!Float] 1148 #end[float] 1149 1150 1151 //--------------------------------------------------------------------- 1152 // %g 1153 // 1154 // Floating-point conversions applicable to float, double, and 1155 // BigDecimal. 1156 //--------------------------------------------------------------------- 1157 test("%g", "null", (Object)null); 1158 test("%g", "3.14159", pi); 1159 test(Locale.FRANCE, "%g", "3,14159", pi); 1160 test("%.0g", "1e+01", ten); 1161 test("%G", "3.14159", pi); 1162 test("%10.3g", " 3.14", pi); 1163 test("%10.3g", " -3.14", negate(pi)); 1164 test("%010.3g", "0000003.14", pi); 1165 test("%010.3g", "-000003.14", negate(pi)); 1166 test("%-12.3g", "3.14 ", pi); 1167 test("%-12.3g", "-3.14 ", negate(pi)); 1168 test("%.3g", "3.14", pi); 1169 test("%.3g", "-3.14", negate(pi)); 1170 test("%.3g", "3.14e+08", mult(pi, 100000000.0)); 1171 test("%.3g", "-3.14e+08", mult(pi, -100000000.0)); 1172 1173 test("%.3g", "1.00e-05", recip(create(100000.0))); 1174 test("%.3g", "-1.00e-05", recip(create(-100000.0))); 1175 test("%.0g", "-1e-05", recip(create(-100000.0))); 1176 test("%.0g", "1e+05", create(100000.0)); 1177 test("%.3G", "1.00E-05", recip(create(100000.0))); 1178 test("%.3G", "-1.00E-05", recip(create(-100000.0))); 1179 1180 test("%.1g", "-0", -0.0); 1181 test("%3.0g", " -0", -0.0); 1182 test("%.1g", "0", 0.0); 1183 test("%3.0g", " 0", 0.0); 1184 test("%.1g", "0", +0.0); 1185 test("%3.0g", " 0", +0.0); 1186 1187 test("%3.0g", "1e-06", 0.000001); 1188 test("%3.0g", "1e-05", 0.00001); 1189 test("%3.0g", "1e-05", 0.0000099); 1190 test("%3.1g", "1e-05", 0.0000099); 1191 test("%3.2g", "9.9e-06", 0.0000099); 1192 test("%3.0g", "0.0001", 0.0001); 1193 test("%3.0g", "9e-05", 0.00009); 1194 test("%3.0g", "0.0001", 0.000099); 1195 test("%3.1g", "0.0001", 0.000099); 1196 test("%3.2g", "9.9e-05", 0.000099); 1197 test("%3.0g", "0.001", 0.001); 1198 test("%3.0g", "0.001", 0.00099); 1199 test("%3.1g", "0.001", 0.00099); 1200 test("%3.2g", "0.00099", 0.00099); 1201 test("%3.3g", "0.00100", 0.001); 1202 test("%3.4g", "0.001000", 0.001); 1203 test("%3.0g", "0.01", 0.01); 1204 test("%3.0g", "0.1", 0.1); 1205 test("%3.0g", "0.9", 0.9); 1206 test("%3.1g", "0.9", 0.9); 1207 test("%3.0g", " 1", 1.00); 1208 test("%3.2g", " 10", 10.00); 1209 test("%3.0g", "1e+01", 10.00); 1210 test("%3.0g", "1e+02", 99.19); 1211 test("%3.1g", "1e+02", 99.19); 1212 test("%3.2g", " 99", 99.19); 1213 test("%3.0g", "1e+02", 99.9); 1214 test("%3.1g", "1e+02", 99.9); 1215 test("%3.2g", "1.0e+02", 99.9); 1216 test("%3.0g", "1e+02", 99.99); 1217 test("%3.0g", "1e+02", 100.00); 1218 test("%3.0g", "1e+03", 999.9); 1219 test("%3.1g", "1e+03", 999.9); 1220 test("%3.2g", "1.0e+03", 999.9); 1221 test("%3.3g", "1.00e+03", 999.9); 1222 test("%3.4g", "999.9", 999.9); 1223 test("%3.4g", "1000", 999.99); 1224 test("%3.0g", "1e+03", 1000.00); 1225 test("%3.0g", "1e+04", 10000.00); 1226 test("%3.0g", "1e+05", 100000.00); 1227 test("%3.0g", "1e+06", 1000000.00); 1228 test("%3.0g", "1e+07", 10000000.00); 1229 test("%3.9g", "100000000", 100000000.00); 1230 test("%3.10g", "100000000.0", 100000000.00); 1231 1232 tryCatch("%#3.0g", FormatFlagsConversionMismatchException.class, 1000.00); 1233 1234 // double PI^300 1235 // = 13962455701329742638131355433930076081862072808 ... e+149 1236 #if[BigDecimal] 1237 //--------------------------------------------------------------------- 1238 // %g - BigDecimal 1239 //--------------------------------------------------------------------- 1240 test("%.3g", "1.40e+149", piToThe300); 1241 test("%.3g", "-1.40e+149", piToThe300.negate()); 1242 test(Locale.FRANCE, "%.3g", "-1,40e+149", piToThe300.negate()); 1243 test("%.3g", "1.00e-100", recip(ten.pow(100))); 1244 test("%.3g", "-1.00e-100", negate(recip(ten.pow(100)))); 1245 1246 test("%3.0g", "1e-06", new BigDecimal("0.000001")); 1247 test("%3.0g", "1e-05", new BigDecimal("0.00001")); 1248 test("%3.0g", "0.0001", new BigDecimal("0.0001")); 1249 test("%3.0g", "0.001", new BigDecimal("0.001")); 1250 test("%3.3g", "0.00100", new BigDecimal("0.001")); 1251 test("%3.4g", "0.001000", new BigDecimal("0.001")); 1252 test("%3.0g", "0.01", new BigDecimal("0.01")); 1253 test("%3.0g", "0.1", new BigDecimal("0.1")); 1254 test("%3.0g", "0.9", new BigDecimal("0.9")); 1255 test("%3.1g", "0.9", new BigDecimal("0.9")); 1256 test("%3.0g", " 1", new BigDecimal("1.00")); 1257 test("%3.2g", " 10", new BigDecimal("10.00")); 1258 test("%3.0g", "1e+01", new BigDecimal("10.00")); 1259 test("%3.0g", "1e+02", new BigDecimal("99.19")); 1260 test("%3.1g", "1e+02", new BigDecimal("99.19")); 1261 test("%3.2g", " 99", new BigDecimal("99.19")); 1262 test("%3.0g", "1e+02", new BigDecimal("99.99")); 1263 test("%3.0g", "1e+02", new BigDecimal("100.00")); 1264 test("%3.0g", "1e+03", new BigDecimal("1000.00")); 1265 test("%3.0g", "1e+04", new BigDecimal("10000.00")); 1266 test("%3.0g", "1e+05", new BigDecimal("100000.00")); 1267 test("%3.0g", "1e+06", new BigDecimal("1000000.00")); 1268 test("%3.0g", "1e+07", new BigDecimal("10000000.00")); 1269 test("%3.9g", "100000000", new BigDecimal("100000000.00")); 1270 test("%3.10g", "100000000.0", new BigDecimal("100000000.00")); 1271 #end[BigDecimal] 1272 1273 test("%.3g", "10.0", ten); 1274 test("%.3g", "1.00", one); 1275 test("%10.3g", " 1.00", one); 1276 test("%+10.3g", " +3.14", pi); 1277 test("%+10.3g", " -3.14", negate(pi)); 1278 test("% .3g", " 3.14", pi); 1279 test("% .3g", "-3.14", negate(pi)); 1280 test("%.0g", "3", create(3.0)); 1281 test("%.0g", "-3", create(-3.0)); 1282 1283 test("%(.4g", "3.142e+08", mult(pi, 100000000.0)); 1284 test("%(.4g", "(3.142e+08)", mult(pi, -100000000.0)); 1285 1286 #if[float] 1287 // Float can not accurately store 1e6 * PI. 1288 test("%,.6g", "3,141.59", mult(pi, 1000.0)); 1289 test("%(,.6g", "(3,141.59)", mult(pi, -1000.0)); 1290 #else[float] 1291 #if[!Float] 1292 test("%,.11g", "3,141,592.6536", mult(pi, 1000000.0)); 1293 test("%(,.11g", "(3,141,592.6536)", mult(pi, -1000000.0)); 1294 #end[!Float] 1295 #end[float] 1296 1297 #if[double] 1298 //--------------------------------------------------------------------- 1299 // %a 1300 // 1301 // Floating-point conversions applicable to float, double, and 1302 // BigDecimal. 1303 //--------------------------------------------------------------------- 1304 test("%a", "null", (Object)null); 1305 test("%.11a", "0x0.00000000000p0", 0.0); 1306 test(Locale.FRANCE, "%.11a", "0x0.00000000000p0", 0.0); // no localization 1307 test("%.1a", "0x0.0p0", 0.0); 1308 test("%.11a", "-0x0.00000000000p0", -0.0); 1309 test("%.1a", "-0x0.0p0", -0.0); 1310 test("%.11a", "0x1.00000000000p0", 1.0); 1311 test("%.1a", "0x1.0p0", 1.0); 1312 test("%.11a", "-0x1.00000000000p0", -1.0); 1313 test("%.1a", "-0x1.0p0", -1.0); 1314 test("%.11a", "0x1.80000000000p1", 3.0); 1315 test("%.1a", "0x1.8p1", 3.0); 1316 test("%.11a", "0x1.00000000000p-1022", DoubleConsts.MIN_NORMAL); 1317 test("%.1a", "0x1.0p-1022", DoubleConsts.MIN_NORMAL); 1318 test("%.11a", "0x1.00000000000p-1022", 1319 Math.nextDown(DoubleConsts.MIN_NORMAL)); 1320 test("%.1a", "0x1.0p-1022", 1321 Math.nextDown(DoubleConsts.MIN_NORMAL)); 1322 test("%.11a", "0x1.ffffffffffep-1023", 1323 Double.parseDouble("0x0.fffffffffffp-1022")); 1324 test("%.1a", "0x1.0p-1022", 1325 Double.parseDouble("0x0.fffffffffffp-1022")); 1326 test("%.30a", "0x0.000000000000100000000000000000p-1022", Double.MIN_VALUE); 1327 test("%.13a", "0x0.0000000000001p-1022", Double.MIN_VALUE); 1328 test("%.11a", "0x1.00000000000p-1074", Double.MIN_VALUE); 1329 test("%.1a", "0x1.0p-1074", Double.MIN_VALUE); 1330 1331 test("%.11a", "0x1.08000000000p-1069", 1332 Double.MIN_VALUE + Double.MIN_VALUE32); 1333 test("%.1a", "0x1.0p-1069", 1334 Double.MIN_VALUE + Double.MIN_VALUE*32); 1335 test("%.30a", "0x1.fffffffffffff00000000000000000p1023", Double.MAX_VALUE); 1336 test("%.13a", "0x1.fffffffffffffp1023", Double.MAX_VALUE); 1337 test("%.11a", "0x1.00000000000p1024", Double.MAX_VALUE); 1338 test("%.1a", "0x1.0p1024", Double.MAX_VALUE); 1339 test("%.11a", "0x1.18000000000p0", Double.parseDouble("0x1.18p0")); 1340 test("%.1a", "0x1.2p0", Double.parseDouble("0x1.18p0")); 1341 1342 test("%.11a", "0x1.18000000000p0", 1343 Double.parseDouble("0x1.180000000001p0")); 1344 test("%.1a", "0x1.2p0", 1345 Double.parseDouble("0x1.180000000001p0")); 1346 test("%.11a", "0x1.28000000000p0", Double.parseDouble("0x1.28p0")); 1347 test("%.1a", "0x1.2p0", Double.parseDouble("0x1.28p0")); 1348 1349 test("%.11a", "0x1.28000000000p0", 1350 Double.parseDouble("0x1.280000000001p0")); 1351 test("%.1a", "0x1.3p0", Double.parseDouble("0x1.280000000001p0")); 1352 #end[double] 1353 1354 //--------------------------------------------------------------------- 1355 // %f, %e, %g, %a - Boundaries 1356 //--------------------------------------------------------------------- 1357 #if[float] 1358 //--------------------------------------------------------------------- 1359 // %f, %e, %g, %a - NaN 1360 //--------------------------------------------------------------------- 1361 test("%f", "NaN", Float.NaN); 1362 // s 1363 test("%+f", "NaN", Float.NaN); 1364 // test("%F", "NAN", Float.NaN); 1365 test("%e", "NaN", Float.NaN); 1366 test("%+e", "NaN", Float.NaN); 1367 test("%E", "NAN", Float.NaN); 1368 test("%g", "NaN", Float.NaN); 1369 test("%+g", "NaN", Float.NaN); 1370 test("%G", "NAN", Float.NaN); 1371 test("%a", "NaN", Float.NaN); 1372 test("%+a", "NaN", Float.NaN); 1373 test("%A", "NAN", Float.NaN); 1374 1375 //--------------------------------------------------------------------- 1376 // %f, %e, %g, %a - +0.0 1377 //--------------------------------------------------------------------- 1378 test("%f", "0.000000", +0.0); 1379 test("%+f", "+0.000000", +0.0); 1380 test("% f", " 0.000000", +0.0); 1381 // test("%F", "0.000000", +0.0); 1382 test("%e", "0.000000e+00", 0e0); 1383 test("%e", "0.000000e+00", +0.0); 1384 test("%+e", "+0.000000e+00", +0.0); 1385 test("% e", " 0.000000e+00", +0.0); 1386 test("%E", "0.000000E+00", 0e0); 1387 test("%E", "0.000000E+00", +0.0); 1388 test("%+E", "+0.000000E+00", +0.0); 1389 test("% E", " 0.000000E+00", +0.0); 1390 test("%g", "0.00000", +0.0); 1391 test("%+g", "+0.00000", +0.0); 1392 test("% g", " 0.00000", +0.0); 1393 test("%G", "0.00000", +0.0); 1394 test("% G", " 0.00000", +0.0); 1395 test("%a", "0x0.0p0", +0.0); 1396 test("%+a", "+0x0.0p0", +0.0); 1397 test("% a", " 0x0.0p0", +0.0); 1398 test("%A", "0X0.0P0", +0.0); 1399 test("% A", " 0X0.0P0", +0.0); 1400 1401 //--------------------------------------------------------------------- 1402 // %f, %e, %g, %a - -0.0 1403 //--------------------------------------------------------------------- 1404 test("%f", "-0.000000", -0.0); 1405 test("%+f", "-0.000000", -0.0); 1406 // test("%F", "-0.000000", -0.0); 1407 test("%e", "-0.000000e+00", -0.0); 1408 test("%+e", "-0.000000e+00", -0.0); 1409 test("%E", "-0.000000E+00", -0.0); 1410 test("%+E", "-0.000000E+00", -0.0); 1411 test("%g", "-0.00000", -0.0); 1412 test("%+g", "-0.00000", -0.0); 1413 test("%G", "-0.00000", -0.0); 1414 test("%a", "-0x0.0p0", -0.0); 1415 test("%+a", "-0x0.0p0", -0.0); 1416 test("%+A", "-0X0.0P0", -0.0); 1417 1418 //--------------------------------------------------------------------- 1419 // %f, %e, %g, %a - +Infinity 1420 //--------------------------------------------------------------------- 1421 test("%f", "Infinity", Float.POSITIVE_INFINITY); 1422 test("%+f", "+Infinity", Float.POSITIVE_INFINITY); 1423 test("% f", " Infinity", Float.POSITIVE_INFINITY); 1424 // test("%F", "INFINITY", Float.POSITIVE_INFINITY); 1425 test("%e", "Infinity", Float.POSITIVE_INFINITY); 1426 test("%+e", "+Infinity", Float.POSITIVE_INFINITY); 1427 test("% e", " Infinity", Float.POSITIVE_INFINITY); 1428 test("%E", "INFINITY", Float.POSITIVE_INFINITY); 1429 test("%+E", "+INFINITY", Float.POSITIVE_INFINITY); 1430 test("% E", " INFINITY", Float.POSITIVE_INFINITY); 1431 test("%g", "Infinity", Float.POSITIVE_INFINITY); 1432 test("%+g", "+Infinity", Float.POSITIVE_INFINITY); 1433 test("%G", "INFINITY", Float.POSITIVE_INFINITY); 1434 test("% G", " INFINITY", Float.POSITIVE_INFINITY); 1435 test("%+G", "+INFINITY", Float.POSITIVE_INFINITY); 1436 test("%a", "Infinity", Float.POSITIVE_INFINITY); 1437 test("%+a", "+Infinity", Float.POSITIVE_INFINITY); 1438 test("% a", " Infinity", Float.POSITIVE_INFINITY); 1439 test("%A", "INFINITY", Float.POSITIVE_INFINITY); 1440 test("%+A", "+INFINITY", Float.POSITIVE_INFINITY); 1441 test("% A", " INFINITY", Float.POSITIVE_INFINITY); 1442 1443 //--------------------------------------------------------------------- 1444 // %f, %e, %g, %a - -Infinity 1445 //--------------------------------------------------------------------- 1446 test("%f", "-Infinity", Float.NEGATIVE_INFINITY); 1447 test("%+f", "-Infinity", Float.NEGATIVE_INFINITY); 1448 test("%(f", "(Infinity)", Float.NEGATIVE_INFINITY); 1449 // test("%F", "-INFINITY", Float.NEGATIVE_INFINITY); 1450 test("%e", "-Infinity", Float.NEGATIVE_INFINITY); 1451 test("%+e", "-Infinity", Float.NEGATIVE_INFINITY); 1452 test("%E", "-INFINITY", Float.NEGATIVE_INFINITY); 1453 test("%+E", "-INFINITY", Float.NEGATIVE_INFINITY); 1454 test("%g", "-Infinity", Float.NEGATIVE_INFINITY); 1455 test("%+g", "-Infinity", Float.NEGATIVE_INFINITY); 1456 test("%G", "-INFINITY", Float.NEGATIVE_INFINITY); 1457 test("%+G", "-INFINITY", Float.NEGATIVE_INFINITY); 1458 test("%a", "-Infinity", Float.NEGATIVE_INFINITY); 1459 test("%+a", "-Infinity", Float.NEGATIVE_INFINITY); 1460 test("%A", "-INFINITY", Float.NEGATIVE_INFINITY); 1461 test("%+A", "-INFINITY", Float.NEGATIVE_INFINITY); 1462 1463 //--------------------------------------------------------------------- 1464 // %f, %e, %g, %a - Float.MIN_VALUE 1465 //--------------------------------------------------------------------- 1466 test("%f", "0.000000", Float.MIN_VALUE); 1467 test("%,f", "0.000000", Float.MIN_VALUE); 1468 test("%(f", "(0.000000)", -Float.MIN_VALUE); 1469 test("%30.0f", " 0", Float.MIN_VALUE); 1470 test("%30.5f", " 0.00000", Float.MIN_VALUE); 1471 test("%30.13f", " 0.0000000000000", Float.MIN_VALUE); 1472 test("%30.20f", " 0.00000000000000000000", Float.MIN_VALUE); 1473 test("%e", "1.401298e-45", Float.MIN_VALUE); 1474 test("%E", "1.401298E-45", Float.MIN_VALUE); 1475 test("%(.1e", "1.4e-45", Float.MIN_VALUE); 1476 test("%(E", "(1.401298E-45)", -Float.MIN_VALUE); 1477 test("%30.5e", " 1.40130e-45", Float.MIN_VALUE); 1478 test("%30.13e", " 1.4012984643248e-45", Float.MIN_VALUE); 1479 test("%30.20e", " 1.40129846432481700000e-45", Float.MIN_VALUE); 1480 test("%g", "1.40130e-45", Float.MIN_VALUE); 1481 test("%G", "1.40130E-45", Float.MIN_VALUE); 1482 test("%(g", "1.40130e-45", Float.MIN_VALUE); 1483 test("%,g", "1.40130e-45", Float.MIN_VALUE); 1484 test("%(G", "(1.40130E-45)", -Float.MIN_VALUE); 1485 test("%30.5g", " 1.4013e-45", Float.MIN_VALUE); 1486 test("%30.13g", " 1.401298464325e-45", Float.MIN_VALUE); 1487 test("%30.20g", " 1.4012984643248170000e-45", Float.MIN_VALUE); 1488 test("%a", "0x1.0p-149", Float.MIN_VALUE); 1489 test("%A", "0X1.0P-149", Float.MIN_VALUE); 1490 test("%20a", " 0x1.0p-149", Float.MIN_VALUE); 1491 1492 //--------------------------------------------------------------------- 1493 // %f, %e, %g, %a - Float.MAX_VALUE 1494 //--------------------------------------------------------------------- 1495 test("%f", "340282346638528860000000000000000000000.000000", Float.MAX_VALUE); 1496 test("%,f","340,282,346,638,528,860,000,000,000,000,000,000,000.000000", 1497 Float.MAX_VALUE); 1498 test("%(f", "(340282346638528860000000000000000000000.000000)", -Float.MAX_VALUE); 1499 test("%60.5f", " 340282346638528860000000000000000000000.00000", 1500 Float.MAX_VALUE); 1501 test("%60.13f", " 340282346638528860000000000000000000000.0000000000000", 1502 Float.MAX_VALUE); 1503 test("%61.20f", " 340282346638528860000000000000000000000.00000000000000000000", 1504 Float.MAX_VALUE); 1505 test("%e", "3.402823e+38", Float.MAX_VALUE); 1506 test("%E", "3.402823E+38", Float.MAX_VALUE); 1507 test("%(e", "3.402823e+38", Float.MAX_VALUE); 1508 test("%(e", "(3.402823e+38)", -Float.MAX_VALUE); 1509 test("%30.5e", " 3.40282e+38", Float.MAX_VALUE); 1510 test("%30.13e", " 3.4028234663853e+38", Float.MAX_VALUE); 1511 test("%30.20e", " 3.40282346638528860000e+38", Float.MAX_VALUE); 1512 test("%g", "3.40282e+38", Float.MAX_VALUE); 1513 test("%G", "3.40282E+38", Float.MAX_VALUE); 1514 test("%,g", "3.40282e+38", Float.MAX_VALUE); 1515 test("%(g", "(3.40282e+38)", -Float.MAX_VALUE); 1516 test("%30.5g", " 3.4028e+38", Float.MAX_VALUE); 1517 test("%30.13g", " 3.402823466385e+38", Float.MAX_VALUE); 1518 test("%30.20G", " 3.4028234663852886000E+38", Float.MAX_VALUE); 1519 test("%a", "0x1.fffffep127", Float.MAX_VALUE); 1520 test("%A", "0X1.FFFFFEP127", Float.MAX_VALUE); 1521 test("%20a"," 0x1.fffffep127", Float.MAX_VALUE); 1522 1523 #end[float] 1524 1525 #if[double] 1526 //--------------------------------------------------------------------- 1527 // %f, %e, %g, %a - Double.MIN_VALUE 1528 //--------------------------------------------------------------------- 1529 test("%f", "0.000000", Double.MIN_VALUE); 1530 test("%,f", "0.000000", Double.MIN_VALUE); 1531 test("%(f", "(0.000000)", -Double.MIN_VALUE); 1532 test("%30.0f", " 0", Double.MIN_VALUE); 1533 test("%30.5f", " 0.00000", Double.MIN_VALUE); 1534 test("%30.13f", " 0.0000000000000", Double.MIN_VALUE); 1535 test("%30.20f", " 0.00000000000000000000", Double.MIN_VALUE); 1536 test("%30.350f","0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000490000000000000000000000000", 1537 Double.MIN_VALUE); 1538 test("%e", "4.900000e-324", Double.MIN_VALUE); 1539 test("%E", "4.900000E-324", Double.MIN_VALUE); 1540 test("%(.1e", "4.9e-324", Double.MIN_VALUE); 1541 test("%(E", "(4.900000E-324)", -Double.MIN_VALUE); 1542 test("%30.5e", " 4.90000e-324", Double.MIN_VALUE); 1543 test("%30.13e", " 4.9000000000000e-324", Double.MIN_VALUE); 1544 test("%30.20e", " 4.90000000000000000000e-324", Double.MIN_VALUE); 1545 test("%g", "4.90000e-324", Double.MIN_VALUE); 1546 test("%G", "4.90000E-324", Double.MIN_VALUE); 1547 test("%(g", "4.90000e-324", Double.MIN_VALUE); 1548 test("%,g", "4.90000e-324", Double.MIN_VALUE); 1549 test("%30.5g", " 4.9000e-324", Double.MIN_VALUE); 1550 test("%30.13g", " 4.900000000000e-324", Double.MIN_VALUE); 1551 test("%30.20g", " 4.9000000000000000000e-324", Double.MIN_VALUE); 1552 test("%a", "0x0.0000000000001p-1022", Double.MIN_VALUE); 1553 test("%A", "0X0.0000000000001P-1022", Double.MIN_VALUE); 1554 test("%30a", " 0x0.0000000000001p-1022", Double.MIN_VALUE); 1555 1556 //--------------------------------------------------------------------- 1557 // %f, %e, %g, %a - Double.MAX_VALUE 1558 //--------------------------------------------------------------------- 1559 test("%f", "179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.000000", 1560 Double.MAX_VALUE); 1561 test("%,f", "179,769,313,486,231,570,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000.000000", 1562 Double.MAX_VALUE); 1563 test("%,(f", "(179,769,313,486,231,570,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000.000000)", 1564 -Double.MAX_VALUE); 1565 test("%,30.5f", "179,769,313,486,231,570,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000.00000", 1566 Double.MAX_VALUE); 1567 test("%30.13f", "179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000000", 1568 Double.MAX_VALUE); 1569 test("%30.20f", "179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.00000000000000000000", 1570 Double.MAX_VALUE); 1571 test("%e", "1.797693e+308", Double.MAX_VALUE); 1572 test("%E", "1.797693E+308", Double.MAX_VALUE); 1573 test("%(e", "1.797693e+308", Double.MAX_VALUE); 1574 test("%(e", "(1.797693e+308)", -Double.MAX_VALUE); 1575 test("%30.5e", " 1.79769e+308", Double.MAX_VALUE); 1576 test("%30.13e", " 1.7976931348623e+308", Double.MAX_VALUE); 1577 test("%30.20e", " 1.79769313486231570000e+308", Double.MAX_VALUE); 1578 test("%g", "1.79769e+308", Double.MAX_VALUE); 1579 test("%G", "1.79769E+308", Double.MAX_VALUE); 1580 test("%,g", "1.79769e+308", Double.MAX_VALUE); 1581 test("%(g", "(1.79769e+308)", -Double.MAX_VALUE); 1582 test("%30.5g", " 1.7977e+308", Double.MAX_VALUE); 1583 test("%30.13g", " 1.797693134862e+308", Double.MAX_VALUE); 1584 test("%30.20g", " 1.7976931348623157000e+308", Double.MAX_VALUE); 1585 test("%a", "0x1.fffffffffffffp1023", Double.MAX_VALUE); 1586 test("%A", "0X1.FFFFFFFFFFFFFP1023", Double.MAX_VALUE); 1587 test("%30a", " 0x1.fffffffffffffp1023", Double.MAX_VALUE); 1588 #end[double] 1589 1590 #end[fp] 1591 1592 //--------------------------------------------------------------------- 1593 // %t 1594 // 1595 // Date/Time conversions applicable to Calendar, Date, and long. 1596 //--------------------------------------------------------------------- 1597 test("%tA", "null", (Object)null); 1598 test("%TA", "NULL", (Object)null); 1599 1600 //--------------------------------------------------------------------- 1601 // %t - errors 1602 //--------------------------------------------------------------------- 1603 tryCatch("%t", UnknownFormatConversionException.class); 1604 tryCatch("%T", UnknownFormatConversionException.class); 1605 tryCatch("%tP", UnknownFormatConversionException.class); 1606 tryCatch("%TP", UnknownFormatConversionException.class); 1607 tryCatch("%.5tB", IllegalFormatPrecisionException.class); 1608 tryCatch("%#tB", FormatFlagsConversionMismatchException.class); 1609 tryCatch("%-tB", MissingFormatWidthException.class); 1610 1611 #if[datetime] 1612 //--------------------------------------------------------------------- 1613 // %t - create test Calendar 1614 //--------------------------------------------------------------------- 1615 1616 // Get the supported ids for GMT-08:00 (Pacific Standard Time) 1617 String[] ids = TimeZone.getAvailableIDs(-8 * 60 * 60 * 1000); 1618 // Create a Pacific Standard Time time zone 1619 SimpleTimeZone tz = new SimpleTimeZone(-8 * 60 * 60 * 1000, ids[0]); 1620 // public GregorianCalendar(TimeZone zone, Locale aLocale); 1621 Calendar c0 = new GregorianCalendar(tz, Locale.US); 1622 // public final void set(int year, int month, int date, 1623 // int hourOfDay, int minute, int second); 1624 c0.set(1995, MAY, 23, 19, 48, 34); 1625 c0.set(Calendar.MILLISECOND, 584); 1626 1627 //--------------------------------------------------------------------- 1628 // %t - Minutes, {nano,milli}*seconds 1629 // 1630 // testDateTime() verifies the expected output for all applicable types 1631 // (Calendar, Date, and long). It also verifies output for "%t" and 1632 // "%T". Thus it is sufficient to invoke that method once per 1633 // conversion/expected output. 1634 //--------------------------------------------------------------------- 1635 testDateTime("%tM", "48", c0); 1636 testDateTime("%tN", "584000000", c0); 1637 testDateTime("%tL", "584", c0); 1638 // testDateTime("%tQ", "801283714584", c0); 1639 1640 testDateTime("%ts", String.valueOf(c0.getTimeInMillis() / 1000), c0); 1641 testDateTime("%tS", "34", c0); 1642 testDateTime("%tT", "19:48:34", c0); 1643 1644 //--------------------------------------------------------------------- 1645 // %t - Hours, morning/afternoon markers 1646 // 1647 // testHours() iterates through all twenty-four hours to verify 1648 // numeric return value and morning/afternoon markers. 1649 //--------------------------------------------------------------------- 1650 testHours(); 1651 1652 //--------------------------------------------------------------------- 1653 // %t - Portions of date [ day, month, dates, weeks ] 1654 //--------------------------------------------------------------------- 1655 testDateTime("%ta", "Tue", c0); 1656 testDateTime("%tA", "Tuesday", c0); 1657 testDateTime("%tb", "May", c0); 1658 testDateTime("%tB", "May", c0); 1659 testDateTime("%tC", "19", c0); 1660 testDateTime("%td", "23", c0); 1661 testDateTime("%te", "23", c0); 1662 testDateTime("%th", "May", c0); 1663 testDateTime("%tj", "143", c0); 1664 testDateTime("%tm", "05", c0); 1665 testDateTime("%ty", "95", c0); 1666 testDateTime("%tY", "1995", c0); 1667 1668 //--------------------------------------------------------------------- 1669 // %t - TimeZone 1670 //--------------------------------------------------------------------- 1671 testDateTime("%tz", "-0800", c0); 1672 testDateTime("%tZ", "PST", c0); 1673 1674 //--------------------------------------------------------------------- 1675 // %tz should always adjust for DST 1676 //--------------------------------------------------------------------- 1677 TimeZone dtz = TimeZone.getDefault(); 1678 1679 // Artificial TimeZone based on PST with 3:15 DST always in effect 1680 TimeZone atz = new SimpleTimeZone(-8 * 60 * 60 * 1000, "AlwaysDST", 1681 JANUARY, 1, 0, 0, STANDARD_TIME, 1682 // 24hrs - 1m = 60 * 60 * 1000 * 24 - 1 1683 DECEMBER, 31, 0, 60 * 60 * 1000 * 24 - 1, STANDARD_TIME, 1684 (int)(60 * 60 * 1000 * 3.25)); 1685 TimeZone.setDefault(atz); 1686 testDateTime("%tz", "-0445", Calendar.getInstance(atz)); 1687 1688 // Restore the TimeZone and verify 1689 TimeZone.setDefault(dtz); 1690 if (atz.hasSameRules(TimeZone.getDefault())) 1691 throw new RuntimeException("Default TimeZone not restored"); 1692 1693 //--------------------------------------------------------------------- 1694 // %t - Composites 1695 //--------------------------------------------------------------------- 1696 testDateTime("%tr", "07:48:34 PM", c0); 1697 testDateTime("%tR", "19:48", c0); 1698 testDateTime("%tc", "Tue May 23 19:48:34 PST 1995", c0); 1699 testDateTime("%tD", "05/23/95", c0); 1700 testDateTime("%tF", "1995-05-23", c0); 1701 testDateTime("%-12tF", "1995-05-23 ", c0); 1702 testDateTime("%12tF", " 1995-05-23", c0); 1703 #end[datetime] 1704 1705 //--------------------------------------------------------------------- 1706 // %n 1707 //--------------------------------------------------------------------- 1708 test("%n", System.getProperty("line.separator"), (Object)null); 1709 test("%n", System.getProperty("line.separator"), ""); 1710 1711 tryCatch("%,n", IllegalFormatFlagsException.class); 1712 tryCatch("%.n", UnknownFormatConversionException.class); 1713 tryCatch("%5.n", UnknownFormatConversionException.class); 1714 tryCatch("%5n", IllegalFormatWidthException.class); 1715 tryCatch("%.7n", IllegalFormatPrecisionException.class); 1716 tryCatch("%<n", IllegalFormatFlagsException.class); 1717 1718 //--------------------------------------------------------------------- 1719 // %% 1720 //--------------------------------------------------------------------- 1721 test("%%", "%", (Object)null); 1722 test("%%", "%", ""); 1723 tryCatch("%%%", UnknownFormatConversionException.class); 1724 // perhaps an IllegalFormatArgumentIndexException should be defined? 1725 tryCatch("%<%", IllegalFormatFlagsException.class); 1726 } 1727 }