jdk/test/java/lang/Double/ParseDouble.java
changeset 9276 645e1a5c72f6
parent 9035 1255eb81cc2f
child 9521 e18f95eadb3c
equal deleted inserted replaced
9275:1df1f7dfab7f 9276:645e1a5c72f6
    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 }