equal
deleted
inserted
replaced
21 * questions. |
21 * questions. |
22 */ |
22 */ |
23 |
23 |
24 /* |
24 /* |
25 * @test |
25 * @test |
26 * @bug 4160406 4705734 4707389 4826774 4895911 4421494 |
26 * @bug 4160406 4705734 4707389 4826774 4895911 4421494 7021568 |
27 * @summary Test for Double.parseDouble method and acceptance regex |
27 * @summary Test for Double.parseDouble method and acceptance regex |
28 */ |
28 */ |
29 |
29 |
30 import java.util.regex.*; |
30 import java.util.regex.*; |
31 import java.math.BigDecimal; |
31 import java.math.BigDecimal; |
579 double convertedLowerBound = Double.parseDouble(lowerBound.toString()); |
579 double convertedLowerBound = Double.parseDouble(lowerBound.toString()); |
580 double convertedUpperBound = Double.parseDouble(upperBound.toString()); |
580 double convertedUpperBound = Double.parseDouble(upperBound.toString()); |
581 } |
581 } |
582 } |
582 } |
583 |
583 |
|
584 |
|
585 private static void testStrictness() { |
|
586 final double expected = 0x0.0000008000001p-1022; |
|
587 boolean failed = false; |
|
588 double conversion = 0.0; |
|
589 double sum = 0.0; // Prevent conversion from being optimized away |
|
590 |
|
591 //2^-1047 + 2^-1075 |
|
592 String decimal = "6.631236871469758276785396630275967243399099947355303144249971758736286630139265439618068200788048744105960420552601852889715006376325666595539603330361800519107591783233358492337208057849499360899425128640718856616503093444922854759159988160304439909868291973931426625698663157749836252274523485312442358651207051292453083278116143932569727918709786004497872322193856150225415211997283078496319412124640111777216148110752815101775295719811974338451936095907419622417538473679495148632480391435931767981122396703443803335529756003353209830071832230689201383015598792184172909927924176339315507402234836120730914783168400715462440053817592702766213559042115986763819482654128770595766806872783349146967171293949598850675682115696218943412532098591327667236328125E-316"; |
|
593 |
|
594 for(int i = 0; i <= 12_000; i++) { |
|
595 conversion = Double.parseDouble(decimal); |
|
596 sum += conversion; |
|
597 if (conversion != expected) { |
|
598 failed = true; |
|
599 System.out.printf("Iteration %d converts as %a%n", |
|
600 i, conversion); |
|
601 } |
|
602 } |
|
603 |
|
604 System.out.println("Sum = " + sum); |
|
605 if (failed) |
|
606 throw new RuntimeException("Inconsistent conversion"); |
|
607 } |
|
608 |
584 public static void main(String[] args) throws Exception { |
609 public static void main(String[] args) throws Exception { |
585 rudimentaryTest(); |
610 rudimentaryTest(); |
586 |
611 |
587 testParsing(goodStrings, false); |
612 testParsing(goodStrings, false); |
588 testParsing(paddedGoodStrings, false); |
613 testParsing(paddedGoodStrings, false); |
593 testRegex(paddedGoodStrings, false); |
618 testRegex(paddedGoodStrings, false); |
594 testRegex(badStrings, true); |
619 testRegex(badStrings, true); |
595 testRegex(paddedBadStrings, true); |
620 testRegex(paddedBadStrings, true); |
596 |
621 |
597 testSubnormalPowers(); |
622 testSubnormalPowers(); |
|
623 testStrictness(); |
598 } |
624 } |
599 } |
625 } |