]> git.saurik.com Git - apple/icu.git/blame - icuSources/test/perf/DateFmtPerf/DateFmtPerf.cpp
ICU-62107.0.1.tar.gz
[apple/icu.git] / icuSources / test / perf / DateFmtPerf / DateFmtPerf.cpp
CommitLineData
729e4ab9 1/*
f3c0d7a5
A
2***********************************************************************
3* © 2016 and later: Unicode, Inc. and others.
4* License & terms of use: http://www.unicode.org/copyright.html#License
5***********************************************************************
6***********************************************************************
b331163b 7* Copyright (c) 2002-2014,International Business Machines
729e4ab9 8* Corporation and others. All Rights Reserved.
f3c0d7a5
A
9***********************************************************************
10***********************************************************************
729e4ab9
A
11*/
12
13#include "DateFmtPerf.h"
14#include "uoptions.h"
15#include <stdio.h>
16#include <fstream>
17
18#include <iostream>
19using namespace std;
20
21DateFormatPerfTest::DateFormatPerfTest(int32_t argc, const char* argv[], UErrorCode& status)
22: UPerfTest(argc,argv,status) {
23
24 if (locale == NULL){
25 locale = "en_US"; // set default locale
26 }
27}
28
29DateFormatPerfTest::~DateFormatPerfTest()
30{
31}
32
33UPerfFunction* DateFormatPerfTest::runIndexedTest(int32_t index, UBool exec,const char* &name, char* par) {
34
35 //exec = true;
36
37 switch (index) {
38 TESTCASE(0,DateFmt250);
39 TESTCASE(1,DateFmt10000);
4388f060 40 TESTCASE(2,DateFmt100000);
729e4ab9 41 TESTCASE(3,BreakItWord250);
4388f060
A
42 TESTCASE(4,BreakItWord10000);
43 TESTCASE(5,BreakItChar250);
44 TESTCASE(6,BreakItChar10000);
729e4ab9
A
45 TESTCASE(7,NumFmt10000);
46 TESTCASE(8,NumFmt100000);
47 TESTCASE(9,Collation10000);
48 TESTCASE(10,Collation100000);
b331163b
A
49 TESTCASE(11, DIFCreate250);
50 TESTCASE(12, DIFCreate10000);
51 TESTCASE(13, TimeZoneCreate250);
52 TESTCASE(14, TimeZoneCreate10000);
53 TESTCASE(15, DTPatternGeneratorCreate250);
54 TESTCASE(16, DTPatternGeneratorCreate10000);
55 TESTCASE(17, DTPatternGeneratorCopy250);
56 TESTCASE(18, DTPatternGeneratorCopy10000);
57 TESTCASE(19, DTPatternGeneratorBestValue250);
58 TESTCASE(20, DTPatternGeneratorBestValue10000);
59 TESTCASE(21,DateFmtCopy250);
60 TESTCASE(22,DateFmtCopy10000);
61 TESTCASE(23,DateFmtCreate250);
62 TESTCASE(24,DateFmtCreate10000);
63
729e4ab9
A
64
65 default:
66 name = "";
67 return NULL;
68 }
69 return NULL;
70}
71
72
73UPerfFunction* DateFormatPerfTest::DateFmt250(){
74 DateFmtFunction* func= new DateFmtFunction(1, locale);
75 return func;
76}
77
78UPerfFunction* DateFormatPerfTest::DateFmt10000(){
79 DateFmtFunction* func= new DateFmtFunction(40, locale);
80 return func;
81}
82
83UPerfFunction* DateFormatPerfTest::DateFmt100000(){
84 DateFmtFunction* func= new DateFmtFunction(400, locale);
85 return func;
86}
87
88UPerfFunction* DateFormatPerfTest::BreakItWord250(){
89 BreakItFunction* func= new BreakItFunction(250, true);
90 return func;
91}
92
93UPerfFunction* DateFormatPerfTest::BreakItWord10000(){
94 BreakItFunction* func= new BreakItFunction(10000, true);
95 return func;
96}
97
98UPerfFunction* DateFormatPerfTest::BreakItChar250(){
99 BreakItFunction* func= new BreakItFunction(250, false);
100 return func;
101}
102
103UPerfFunction* DateFormatPerfTest::BreakItChar10000(){
104 BreakItFunction* func= new BreakItFunction(10000, false);
105 return func;
106}
107
108UPerfFunction* DateFormatPerfTest::NumFmt10000(){
109 NumFmtFunction* func= new NumFmtFunction(10000, locale);
110 return func;
111}
112
113UPerfFunction* DateFormatPerfTest::NumFmt100000(){
114 NumFmtFunction* func= new NumFmtFunction(100000, locale);
115 return func;
116}
117
118UPerfFunction* DateFormatPerfTest::Collation10000(){
119 CollationFunction* func= new CollationFunction(40, locale);
120 return func;
121}
122
123UPerfFunction* DateFormatPerfTest::Collation100000(){
124 CollationFunction* func= new CollationFunction(400, locale);
125 return func;
126}
127
128
b331163b
A
129UPerfFunction *DateFormatPerfTest::DIFCreate250() {
130 DIFCreateFunction* func = new DIFCreateFunction(250, locale);
131 return func;
132}
133
134UPerfFunction *DateFormatPerfTest::DIFCreate10000() {
135 DIFCreateFunction* func = new DIFCreateFunction(10000, locale);
136 return func;
137}
138
139UPerfFunction *DateFormatPerfTest::TimeZoneCreate250() {
140 return new TimeZoneCreateFunction(250, locale);
141}
142
143UPerfFunction *DateFormatPerfTest::TimeZoneCreate10000() {
144 return new TimeZoneCreateFunction(10000, locale);
145}
146
147UPerfFunction *DateFormatPerfTest::DTPatternGeneratorCreate250() {
148 return new DTPatternGeneratorCreateFunction(250, locale);
149}
150
151UPerfFunction *DateFormatPerfTest::DTPatternGeneratorCreate10000() {
152 return new DTPatternGeneratorCreateFunction(10000, locale);
153}
154
155UPerfFunction *DateFormatPerfTest::DTPatternGeneratorCopy250() {
156 return new DTPatternGeneratorCopyFunction(250, locale);
157}
158
159UPerfFunction *DateFormatPerfTest::DTPatternGeneratorCopy10000() {
160 return new DTPatternGeneratorCopyFunction(10000, locale);
161}
162
163UPerfFunction *DateFormatPerfTest::DTPatternGeneratorBestValue250() {
164 return new DTPatternGeneratorBestValueFunction(250, locale);
165}
166
167UPerfFunction *DateFormatPerfTest::DTPatternGeneratorBestValue10000() {
168 return new DTPatternGeneratorBestValueFunction(10000, locale);
169}
170
171UPerfFunction* DateFormatPerfTest::DateFmtCopy250(){
172 return new DateFmtCopyFunction(250, locale);
173}
174
175UPerfFunction* DateFormatPerfTest::DateFmtCopy10000(){
176 return new DateFmtCopyFunction(10000, locale);
177}
178
179UPerfFunction* DateFormatPerfTest::DateFmtCreate250(){
180 return new DateFmtCreateFunction(250, locale);
181}
182
183UPerfFunction* DateFormatPerfTest::DateFmtCreate10000(){
184 return new DateFmtCreateFunction(10000, locale);
185}
186
729e4ab9
A
187
188int main(int argc, const char* argv[]){
189
190 // -x Filename.xml
191 if((argc>1)&&(strcmp(argv[1],"-x") == 0))
192 {
193 if(argc < 3) {
194 fprintf(stderr, "Usage: %s -x <outfile>.xml\n", argv[0]);
195 return 1;
196 // not enough arguments
197 }
198
199 cout << "ICU version - " << U_ICU_VERSION << endl;
200 UErrorCode status = U_ZERO_ERROR;
201
4388f060 202#define FUNCTION_COUNT 6
729e4ab9 203 // Declare functions
4388f060
A
204 UPerfFunction *functions[FUNCTION_COUNT];
205
729e4ab9
A
206 functions[0] = new DateFmtFunction(40, "en");
207 functions[1] = new BreakItFunction(10000, true); // breakIterator word
208 functions[2] = new BreakItFunction(10000, false); // breakIterator char
209 functions[3] = new NumFmtFunction(100000, "en");
210 functions[4] = new CollationFunction(400, "en");
4388f060 211 functions[5] = new StdioNumFmtFunction(100000, "en");
729e4ab9 212
4388f060
A
213 // Perform time recording
214 double t[FUNCTION_COUNT];
215 for(int i = 0; i < FUNCTION_COUNT; i++) t[i] = 0;
216
217#define ITER_COUNT 10
218#ifdef U_DEBUG
219 cout << "Doing " << ITER_COUNT << " iterations:" << endl;
220 cout << "__________| Running...\r";
221 cout.flush();
222#endif
223 for(int i = 0; i < ITER_COUNT; i++) {
224#ifdef U_DEBUG
225 cout << '*' << flush;
226#endif
227 for(int j = 0; U_SUCCESS(status)&& j < FUNCTION_COUNT; j++)
228 t[j] += (functions[j]->time(1, &status) / ITER_COUNT);
229 }
230#ifdef U_DEBUG
231 cout << " Done " << endl;
232#endif
729e4ab9 233
4388f060 234 if(U_SUCCESS(status)) {
729e4ab9 235
4388f060
A
236 // Output results as .xml
237 ofstream out;
238 out.open(argv[2]);
729e4ab9 239
4388f060 240 out << "<perfTestResults icu=\"c\" version=\"" << U_ICU_VERSION << "\">" << endl;
729e4ab9 241
4388f060 242 for(int i = 0; i < FUNCTION_COUNT; i++)
729e4ab9 243 {
4388f060
A
244 out << " <perfTestResult" << endl;
245 out << " test=\"";
246 switch(i)
247 {
729e4ab9
A
248 case 0: out << "DateFormat"; break;
249 case 1: out << "BreakIterator Word"; break;
250 case 2: out << "BreakIterator Char"; break;
251 case 3: out << "NumbFormat"; break;
252 case 4: out << "Collation"; break;
4388f060
A
253 case 5: out << "StdioNumbFormat"; break;
254 default: out << "Unknown " << i; break;
255 }
256 out << "\"" << endl;
257 out << " iterations=\"" << functions[i]->getOperationsPerIteration() << "\"" << endl;
258 out << " time=\"" << t[i] << "\" />" << endl;
729e4ab9 259 }
4388f060
A
260 out << "</perfTestResults>" << endl;
261 out.close();
262 cout << " Wrote to " << argv[2] << endl;
263 }
264
265 if(U_FAILURE(status)) {
266 cout << "Error! " << u_errorName(status) << endl;
267 return 1;
729e4ab9 268 }
729e4ab9
A
269
270 return 0;
271 }
272
273
274 // Normal performance test mode
275 UErrorCode status = U_ZERO_ERROR;
276
277 DateFormatPerfTest test(argc, argv, status);
278
279
280 if(U_FAILURE(status)){ // ERROR HERE!!!
0f5d89e8 281 cout << "initialize failed! " << u_errorName(status) << endl;
729e4ab9
A
282 return status;
283 }
284 //cout << "Done initializing!\n" << endl;
285
286 if(test.run()==FALSE){
287 cout << "run failed!" << endl;
288 fprintf(stderr,"FAILED: Tests could not be run please check the arguments.\n");
289 return -1;
290 }
291 cout << "done!" << endl;
292
293 return 0;
4388f060 294}