Home | History | Annotate | Download | only in regression
      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