Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/jdk/java/text/Format/NumberFormat/BigDecimalCompatibilityTest.java
41152 views
1
/*
2
* Copyright (c) 2003, 2016, 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 4018937
27
* @summary Confirm that DecimalFormat.parse() parses BigDecimal and BigInteger as expected.
28
*/
29
30
import java.math.*;
31
import java.text.*;
32
import java.util.*;
33
34
public class BigDecimalCompatibilityTest {
35
36
static boolean err = false;
37
38
static final String[] input_data = {
39
"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
40
"1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"
41
};
42
static final String[] exponents = {
43
"E-100", "E100", "E-900", "E900", ""
44
};
45
static final int[] multipliers = {
46
-1, 1, -100, 100, -9999, 9999
47
};
48
49
public static void main(String[] args) throws Exception {
50
Locale loc = Locale.getDefault();
51
Locale.setDefault(Locale.US);
52
53
testBigDecimal();
54
testBigInteger();
55
56
Locale.setDefault(loc);
57
58
if (err) {
59
throw new RuntimeException("Error: Unexpected value");
60
}
61
}
62
63
static private void testBigDecimal() {
64
DecimalFormat df = new DecimalFormat();
65
df.setParseBigDecimal(true);
66
df.setMaximumFractionDigits(Integer.MAX_VALUE);
67
68
for (int i = 0; i < input_data.length; i++) {
69
for (int j = 0; j < input_data.length; j++) {
70
for (int k = 0; k < input_data.length; k++) {
71
for (int l = 0; l < input_data.length; l++) {
72
for (int m = 0; m < exponents.length; m++) {
73
String s = input_data[i] + input_data[j] + '.' +
74
input_data[k] + input_data[l] +
75
exponents[m];
76
for (int n = 0; n < multipliers.length; n++) {
77
test(df, s, multipliers[n]);
78
test(df, '-'+s, multipliers[n]);
79
}
80
}
81
}
82
}
83
}
84
}
85
}
86
87
static private void testBigInteger() {
88
DecimalFormat df = new DecimalFormat();
89
df.setParseBigDecimal(true);
90
df.setMaximumFractionDigits(Integer.MAX_VALUE);
91
92
for (int i = 0; i < input_data.length; i++) {
93
for (int j = 0; j < input_data.length; j++) {
94
String s = input_data[i] + input_data[j];
95
for (int k = 0; k < multipliers.length; k++) {
96
test(df, s, multipliers[k]);
97
test(df, '-'+s, multipliers[k]);
98
}
99
}
100
}
101
}
102
103
static void test(DecimalFormat df, String s, int multiplier) {
104
df.setMultiplier(multiplier);
105
106
Number num = null;
107
try {
108
num = df.parse(s);
109
}
110
catch (ParseException e) {
111
err = true;
112
System.err.println("Failed: Exception occurred: " + e.getMessage());
113
return;
114
}
115
116
BigDecimal bd = new BigDecimal(s);
117
try {
118
bd = bd.divide(new BigDecimal(multiplier));
119
}
120
catch (ArithmeticException e) {
121
bd = bd.divide(new BigDecimal(multiplier), RoundingMode.HALF_EVEN);
122
}
123
check(num, bd, multiplier);
124
}
125
126
static void check(Number got, BigDecimal expected, int multiplier) {
127
if (!got.equals(expected)) {
128
err = true;
129
System.err.println("Failed: got:" + got +
130
", expected: " + expected +
131
", multiplier=" + multiplier);
132
}
133
}
134
}
135
136