1package benchmarks.regression;
2
3import java.math.BigDecimal;
4import java.text.DecimalFormat;
5import java.text.NumberFormat;
6import java.util.Locale;
7
8public class DecimalFormatBenchmark {
9
10    private static final String EXP_PATTERN = "##E0";
11
12    private static final DecimalFormat df = (DecimalFormat) DecimalFormat.getInstance();
13    // Keep patternInstance for timing with patterns, to not dirty the plain instance.
14    private static final DecimalFormat patternInstance = (DecimalFormat)
15            DecimalFormat.getInstance();
16    private static final DecimalFormat dfCurrencyUS = (DecimalFormat)
17            NumberFormat.getCurrencyInstance(Locale.US);
18    private static final DecimalFormat dfCurrencyFR = (DecimalFormat)
19            NumberFormat.getInstance(Locale.FRANCE);
20
21    private static final BigDecimal BD10E3 = new BigDecimal("10E3");
22    private static final BigDecimal BD10E9 = new BigDecimal("10E9");
23    private static final BigDecimal BD10E100 = new BigDecimal("10E100");
24    private static final BigDecimal BD10E1000 = new BigDecimal("10E1000");
25
26    private static final int WHOLE_NUMBER = 10;
27    private static final double TWO_DP_NUMBER = 3.14;
28
29    public static void formatWithGrouping(Object obj, int reps) {
30        df.setGroupingSize(3);
31        df.setGroupingUsed(true);
32        for (int i = 0; i < reps; i++) {
33            df.format(obj);
34        }
35    }
36
37    public static void format(String pattern, Object obj, int reps) {
38        patternInstance.applyPattern(pattern);
39        for (int i = 0; i < reps; i++) {
40            patternInstance.format(obj);
41        }
42    }
43
44    public static void format(Object obj, int reps) {
45        for (int i = 0; i < reps; i++) {
46            df.format(obj);
47        }
48    }
49
50    public static void formatToCharacterIterator(Object obj, int reps) {
51        for (int i = 0; i < reps; i++) {
52            df.formatToCharacterIterator(obj);
53        }
54    }
55
56
57    public static void formatCurrencyUS(Object obj, int reps) {
58        for (int i = 0; i < reps; i++) {
59            dfCurrencyUS.format(obj);
60        }
61    }
62
63    public static void formatCurrencyFR(Object obj, int reps) {
64        for (int i = 0; i < reps; i++) {
65            dfCurrencyFR.format(obj);
66        }
67    }
68
69    public void time_formatGrouping_BigDecimal10e3(int reps) {
70        formatWithGrouping(BD10E3, reps);
71    }
72
73    public void time_formatGrouping_BigDecimal10e9(int reps) {
74        formatWithGrouping(BD10E9, reps);
75    }
76
77    public void time_formatGrouping_BigDecimal10e100(int reps) {
78        formatWithGrouping(BD10E100, reps);
79    }
80
81    public void time_formatGrouping_BigDecimal10e1000(int reps) {
82        formatWithGrouping(BD10E1000, reps);
83    }
84
85    public void time_formatBigDecimal10e3(int reps) {
86        format(BD10E3, reps);
87    }
88
89    public void time_formatBigDecimal10e9(int reps) {
90        format(BD10E9, reps);
91    }
92
93    public void time_formatBigDecimal10e100(int reps) {
94        format(BD10E100, reps);
95    }
96
97    public void time_formatBigDecimal10e1000(int reps) {
98        format(BD10E1000, reps);
99    }
100
101    public void time_formatPi(int reps) {
102        format(Math.PI, reps);
103    }
104
105    public void time_formatE(int reps) {
106        format(Math.E, reps);
107    }
108
109    public void time_formatUSD(int reps) {
110        formatCurrencyUS(WHOLE_NUMBER, reps);
111    }
112
113    public void time_formatUsdWithCents(int reps) {
114        formatCurrencyUS(TWO_DP_NUMBER, reps);
115    }
116
117    public void time_formatEur(int reps) {
118        formatCurrencyFR(WHOLE_NUMBER, reps);
119    }
120
121    public void time_formatEurWithCents(int reps) {
122        formatCurrencyFR(TWO_DP_NUMBER, reps);
123    }
124
125    public void time_formatAsExponent10e3(int reps) {
126        format(EXP_PATTERN, BD10E3, reps);
127    }
128
129    public void time_formatAsExponent10e9(int reps) {
130        format(EXP_PATTERN, BD10E9, reps);
131    }
132
133    public void time_formatAsExponent10e100(int reps) {
134        format(EXP_PATTERN, BD10E100, reps);
135    }
136
137    public void time_formatAsExponent10e1000(int reps) {
138        format(EXP_PATTERN, BD10E1000, reps);
139    }
140
141    public void time_formatToCharacterIterator10e3(int reps) {
142        formatToCharacterIterator(BD10E3, reps);
143    }
144
145    public void time_formatToCharacterIterator10e9(int reps) {
146        formatToCharacterIterator(BD10E9, reps);
147    }
148
149    public void time_formatToCharacterIterator10e100(int reps) {
150        formatToCharacterIterator(BD10E100, reps);
151    }
152
153    public void time_formatToCharacterIterator10e1000(int reps) {
154        formatToCharacterIterator(BD10E1000, reps);
155    }
156}
157