1 /*
   2  * Copyright (c) 2004, 2018, 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 /*
  25  * @test
  26  * @bug 4984872
  27  * @summary Basic tests of toPlainString method
  28  * @run main ToPlainStringTests
  29  * @run main/othervm -XX:+EliminateAutoBox -XX:AutoBoxCacheMax=20000 ToPlainStringTests
  30  * @author Joseph D. Darcy
  31  */
  32 
  33 import java.math.*;
  34 
  35 public class ToPlainStringTests {
  36     public static void main(String argv[]) {
  37         String [][] testCases = {
  38             {"0",                       "0"},
  39             {"1",                       "1"},
  40             {"10",                      "10"},
  41             {"2e1",                     "20"},
  42             {"3e2",                     "300"},
  43             {"4e3",                     "4000"},
  44             {"5e4",                     "50000"},
  45             {"6e5",                     "600000"},
  46             {"7e6",                     "7000000"},
  47             {"8e7",                     "80000000"},
  48             {"9e8",                     "900000000"},
  49             {"1e9",                     "1000000000"},
  50 
  51             {".0",                      "0.0"},
  52             {".1",                      "0.1"},
  53             {".10",                     "0.10"},
  54             {"1e-1",                    "0.1"},
  55             {"1e-1",                    "0.1"},
  56             {"2e-2",                    "0.02"},
  57             {"3e-3",                    "0.003"},
  58             {"4e-4",                    "0.0004"},
  59             {"5e-5",                    "0.00005"},
  60             {"6e-6",                    "0.000006"},
  61             {"7e-7",                    "0.0000007"},
  62             {"8e-8",                    "0.00000008"},
  63             {"9e-9",                    "0.000000009"},
  64             {"9000e-12",                "0.000000009000"},
  65 
  66             {"9000e-22",                 "0.0000000000000000009000"},
  67             {"12345678901234567890",     "12345678901234567890"},
  68             {"12345678901234567890e22",  "123456789012345678900000000000000000000000"},
  69             {"12345678901234567890e-22", "0.0012345678901234567890"},
  70         };
  71 
  72         int errors = 0;
  73         for(String[] testCase: testCases) {
  74             BigDecimal bd = new BigDecimal(testCase[0]);
  75             String s;
  76 
  77             if (!(s=bd.toPlainString()).equals(testCase[1])) {
  78                 errors++;
  79                 System.err.println("Unexpected plain result ``" +
  80                                    s + "'' from BigDecimal " +
  81                                    bd);
  82             }
  83             bd = new BigDecimal("-"+testCase[0]);
  84             if (bd.signum()!=0 && !(s=(bd.toPlainString())).equals("-"+testCase[1])) {
  85                 errors++;
  86                 System.err.println("Unexpected plain result ``" +
  87                                    s + "'' from BigDecimal " +
  88                                    bd);
  89             }
  90         }
  91 
  92         if(errors > 0)
  93             throw new RuntimeException(errors + " errors during run.");
  94     }
  95 }