1 package benchmarks.regression; 2 3 import java.math.BigDecimal; 4 import java.text.DecimalFormat; 5 import java.text.NumberFormat; 6 import java.util.Locale; 7 8 public 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 public void time_instantiation(int reps) { 158 for (int i = 0; i < reps; i++) { 159 new DecimalFormat(); 160 } 161 } 162 } 163