1// © 2016 and later: Unicode, Inc. and others.
2// License & terms of use: http://www.unicode.org/copyright.html#License
3/*
4 * ******************************************************************************
5 * Copyright (C) 2007, International Business Machines Corporation and others.  *
6 * All Rights Reserved.                                                         *
7 * ******************************************************************************
8 */
9package com.ibm.icu.dev.test.perf;
10
11import java.text.ParseException;
12import java.util.Date;
13import java.util.Locale;
14
15/**
16 * @author ajmacher
17 */
18public class DateFormatPerformanceTest extends PerfTest {
19    private String pattern;
20
21    private String dateString;
22
23    private Date date;
24
25    private com.ibm.icu.text.SimpleDateFormat[] icuDateFormat;
26
27    private java.text.SimpleDateFormat[] jdkDateFormat;
28
29    public static void main(String[] args) throws Exception {
30        new DateFormatPerformanceTest().run(args);
31    }
32
33    protected void setup(String[] args) {
34        try {
35            if (args.length == 0 || args.length > 2) {
36                throw new UsageException();
37            }
38
39            pattern = args[0];
40
41            if (locale == null)
42                locale = Locale.getDefault();
43
44            icuDateFormat = new com.ibm.icu.text.SimpleDateFormat[threads];
45            jdkDateFormat = new java.text.SimpleDateFormat[threads];
46            for (int i = 0; i < threads; i++) {
47                icuDateFormat[i] = new com.ibm.icu.text.SimpleDateFormat(pattern, locale);
48                jdkDateFormat[i] = new java.text.SimpleDateFormat(pattern, locale);
49            }
50
51            if (args.length == 2) {
52                dateString = args[1];
53                date = icuDateFormat[0].parse(dateString);
54            }
55        } catch (Exception e) {
56            e.printStackTrace();
57            throw new RuntimeException(e.getMessage());
58        }
59
60    }
61
62    PerfTest.Function TestICUConstruction() {
63        return new PerfTest.Function() {
64            public void call() {
65                new com.ibm.icu.text.SimpleDateFormat(pattern, locale);
66            }
67        };
68    }
69
70    PerfTest.Function TestJDKConstruction() {
71        return new PerfTest.Function() {
72            public void call() {
73                new java.text.SimpleDateFormat(pattern, locale);
74            }
75        };
76    }
77
78    PerfTest.Function TestICUParse() {
79        return new PerfTest.Function() {
80            public void call(int id) {
81                try {
82                    icuDateFormat[id].parse(dateString);
83                } catch (ParseException ex) {
84                    ex.printStackTrace();
85                }
86            }
87        };
88    }
89
90    PerfTest.Function TestJDKParse() {
91        return new PerfTest.Function() {
92            public void call(int id) {
93                try {
94                    jdkDateFormat[id].parse(dateString);
95                } catch (ParseException ex) {
96                    ex.printStackTrace();
97                }
98            }
99        };
100    }
101
102    PerfTest.Function TestICUFormat() {
103        return new PerfTest.Function() {
104            public void call(int id) {
105                icuDateFormat[id].format(date);
106            }
107        };
108    }
109
110    PerfTest.Function TestJDKFormat() {
111        return new PerfTest.Function() {
112            public void call(int id) {
113                jdkDateFormat[id].format(date);
114            }
115        };
116    }
117}
118