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