OLD | NEW |
(Empty) | |
| 1 /******************************************************************** |
| 2 * COPYRIGHT: |
| 3 * Copyright (C) 2002-2006 IBM, Inc. All Rights Reserved. |
| 4 * |
| 5 ********************************************************************/ |
| 6 /***************************************************************************** |
| 7 * File charperf.cpp |
| 8 * |
| 9 * Modification History: |
| 10 * Name Description |
| 11 * Syn Wee Quek First Version |
| 12 ****************************************************************************** |
| 13 */ |
| 14 |
| 15 /** |
| 16 * This program tests character properties performance. |
| 17 * APIs tested: |
| 18 * ICU4C |
| 19 * Windows |
| 20 */ |
| 21 |
| 22 #include "charperf.h" |
| 23 #include "uoptions.h" |
| 24 |
| 25 UOption options[] = { |
| 26 UOPTION_DEF("min", 'n', UOPT_REQUIRES_ARG), |
| 27 UOPTION_DEF("min", 'x', UOPT_REQUIRES_ARG), |
| 28 }; |
| 29 int MIN_OPTION_ = 0; |
| 30 int MAX_OPTION_ = 1; |
| 31 |
| 32 int main(int argc, const char *argv[]) |
| 33 { |
| 34 UErrorCode status = U_ZERO_ERROR; |
| 35 CharPerformanceTest test(argc, argv, status); |
| 36 if (U_FAILURE(status)){ |
| 37 return status; |
| 38 } |
| 39 if (test.run() == FALSE){ |
| 40 fprintf(stderr, "FAILED: Tests could not be run please check the " |
| 41 "arguments.\n"); |
| 42 return -1; |
| 43 } |
| 44 return 0; |
| 45 } |
| 46 |
| 47 CharPerformanceTest::CharPerformanceTest(int32_t argc, const char *argv[], |
| 48 UErrorCode &status) |
| 49 : UPerfTest(argc, argv, status) |
| 50 { |
| 51 if (status== U_ILLEGAL_ARGUMENT_ERROR){ |
| 52 fprintf(stderr,gUsageString, "charperf"); |
| 53 return; |
| 54 } |
| 55 if (U_FAILURE(status)){ |
| 56 fprintf(stderr, "FAILED to create UPerfTest object. Error: %s\n", |
| 57 u_errorName(status)); |
| 58 return; |
| 59 } |
| 60 |
| 61 if (_remainingArgc < 0) { |
| 62 // that means there are some -names not matched in the super class |
| 63 // first tag is always skipped in u_parseArgs |
| 64 int size = - _remainingArgc; |
| 65 argv += argc - size; |
| 66 argc = size; |
| 67 _remainingArgc = u_parseArgs(argc, (char**)argv, |
| 68 (int32_t)(sizeof(options)/sizeof(options[0])), options); |
| 69 } |
| 70 MIN_ = 0; |
| 71 if (sizeof(wchar_t) > 2) { |
| 72 // for stdlibs like glibc that supports 32 bits wchar |
| 73 // we test for the whole unicode character set by default |
| 74 MAX_ = 0x10ffff; |
| 75 } |
| 76 else { |
| 77 MAX_ = 0xffff; |
| 78 } |
| 79 printf("MAX_ size will be 0x%x\n", MAX_); |
| 80 if (options[MIN_OPTION_].doesOccur) { |
| 81 MIN_ = atoi(options[MIN_OPTION_].value); |
| 82 } |
| 83 if (options[MAX_OPTION_].doesOccur) { |
| 84 MAX_ = atoi(options[MAX_OPTION_].value); |
| 85 } |
| 86 } |
| 87 |
| 88 CharPerformanceTest::~CharPerformanceTest() |
| 89 { |
| 90 } |
| 91 |
| 92 UPerfFunction* CharPerformanceTest::runIndexedTest(int32_t index, UBool exec, |
| 93 const char *&name, |
| 94 char* par) |
| 95 { |
| 96 switch (index) { |
| 97 TESTCASE(0, TestIsAlpha); |
| 98 TESTCASE(1, TestIsUpper); |
| 99 TESTCASE(2, TestIsLower); |
| 100 TESTCASE(3, TestIsDigit); |
| 101 TESTCASE(4, TestIsSpace); |
| 102 TESTCASE(5, TestIsAlphaNumeric); |
| 103 TESTCASE(6, TestIsPrint); |
| 104 TESTCASE(7, TestIsControl); |
| 105 TESTCASE(8, TestToLower); |
| 106 TESTCASE(9, TestToUpper); |
| 107 TESTCASE(10, TestIsWhiteSpace); |
| 108 TESTCASE(11, TestStdLibIsAlpha); |
| 109 TESTCASE(12, TestStdLibIsUpper); |
| 110 TESTCASE(13, TestStdLibIsLower); |
| 111 TESTCASE(14, TestStdLibIsDigit); |
| 112 TESTCASE(15, TestStdLibIsSpace); |
| 113 TESTCASE(16, TestStdLibIsAlphaNumeric); |
| 114 TESTCASE(17, TestStdLibIsPrint); |
| 115 TESTCASE(18, TestStdLibIsControl); |
| 116 TESTCASE(19, TestStdLibToLower); |
| 117 TESTCASE(20, TestStdLibToUpper); |
| 118 TESTCASE(21, TestStdLibIsWhiteSpace); |
| 119 default: |
| 120 name = ""; |
| 121 return NULL; |
| 122 } |
| 123 return NULL; |
| 124 } |
| 125 |
| 126 UPerfFunction* CharPerformanceTest::TestIsAlpha() |
| 127 { |
| 128 return new CharPerfFunction(isAlpha, MIN_, MAX_); |
| 129 } |
| 130 |
| 131 UPerfFunction* CharPerformanceTest::TestIsUpper() |
| 132 { |
| 133 return new CharPerfFunction(isUpper, MIN_, MAX_); |
| 134 } |
| 135 |
| 136 UPerfFunction* CharPerformanceTest::TestIsLower() |
| 137 { |
| 138 return new CharPerfFunction(isLower, MIN_, MAX_); |
| 139 } |
| 140 |
| 141 UPerfFunction* CharPerformanceTest::TestIsDigit() |
| 142 { |
| 143 return new CharPerfFunction(isDigit, MIN_, MAX_); |
| 144 } |
| 145 |
| 146 UPerfFunction* CharPerformanceTest::TestIsSpace() |
| 147 { |
| 148 return new CharPerfFunction(isSpace, MIN_, MAX_); |
| 149 } |
| 150 |
| 151 UPerfFunction* CharPerformanceTest::TestIsAlphaNumeric() |
| 152 { |
| 153 return new CharPerfFunction(isAlphaNumeric, MIN_, MAX_); |
| 154 } |
| 155 |
| 156 /** |
| 157 * This test may be different since c lib has a type PUNCT and it is printable. |
| 158 * iswgraph is not used for testing since it is a subset of iswprint with the |
| 159 * exception of returning true for white spaces. no match found in icu4c. |
| 160 */ |
| 161 UPerfFunction* CharPerformanceTest::TestIsPrint() |
| 162 { |
| 163 return new CharPerfFunction(isPrint, MIN_, MAX_); |
| 164 } |
| 165 |
| 166 UPerfFunction* CharPerformanceTest::TestIsControl() |
| 167 { |
| 168 return new CharPerfFunction(isControl, MIN_, MAX_); |
| 169 } |
| 170 |
| 171 UPerfFunction* CharPerformanceTest::TestToLower() |
| 172 { |
| 173 return new CharPerfFunction(toLower, MIN_, MAX_); |
| 174 } |
| 175 |
| 176 UPerfFunction* CharPerformanceTest::TestToUpper() |
| 177 { |
| 178 return new CharPerfFunction(toUpper, MIN_, MAX_); |
| 179 } |
| 180 |
| 181 UPerfFunction* CharPerformanceTest::TestIsWhiteSpace() |
| 182 { |
| 183 return new CharPerfFunction(isWhiteSpace, MIN_, MAX_); |
| 184 } |
| 185 |
| 186 UPerfFunction* CharPerformanceTest::TestStdLibIsAlpha() |
| 187 { |
| 188 return new StdLibCharPerfFunction(StdLibIsAlpha, (wchar_t)MIN_, |
| 189 (wchar_t)MAX_); |
| 190 } |
| 191 |
| 192 UPerfFunction* CharPerformanceTest::TestStdLibIsUpper() |
| 193 { |
| 194 return new StdLibCharPerfFunction(StdLibIsUpper, (wchar_t)MIN_, |
| 195 (wchar_t)MAX_); |
| 196 } |
| 197 |
| 198 UPerfFunction* CharPerformanceTest::TestStdLibIsLower() |
| 199 { |
| 200 return new StdLibCharPerfFunction(StdLibIsLower, (wchar_t)MIN_, |
| 201 (wchar_t)MAX_); |
| 202 } |
| 203 |
| 204 UPerfFunction* CharPerformanceTest::TestStdLibIsDigit() |
| 205 { |
| 206 return new StdLibCharPerfFunction(StdLibIsDigit, (wchar_t)MIN_, |
| 207 (wchar_t)MAX_); |
| 208 } |
| 209 |
| 210 UPerfFunction* CharPerformanceTest::TestStdLibIsSpace() |
| 211 { |
| 212 return new StdLibCharPerfFunction(StdLibIsSpace, (wchar_t)MIN_, |
| 213 (wchar_t)MAX_); |
| 214 } |
| 215 |
| 216 UPerfFunction* CharPerformanceTest::TestStdLibIsAlphaNumeric() |
| 217 { |
| 218 return new StdLibCharPerfFunction(StdLibIsAlphaNumeric, (wchar_t)MIN_, |
| 219 (wchar_t)MAX_); |
| 220 } |
| 221 |
| 222 /** |
| 223 * This test may be different since c lib has a type PUNCT and it is printable. |
| 224 * iswgraph is not used for testing since it is a subset of iswprint with the |
| 225 * exception of returning true for white spaces. no match found in icu4c. |
| 226 */ |
| 227 UPerfFunction* CharPerformanceTest::TestStdLibIsPrint() |
| 228 { |
| 229 return new StdLibCharPerfFunction(StdLibIsPrint, (wchar_t)MIN_, |
| 230 (wchar_t)MAX_); |
| 231 } |
| 232 |
| 233 UPerfFunction* CharPerformanceTest::TestStdLibIsControl() |
| 234 { |
| 235 return new StdLibCharPerfFunction(StdLibIsControl, (wchar_t)MIN_, |
| 236 (wchar_t)MAX_); |
| 237 } |
| 238 |
| 239 UPerfFunction* CharPerformanceTest::TestStdLibToLower() |
| 240 { |
| 241 return new StdLibCharPerfFunction(StdLibToLower, (wchar_t)MIN_, |
| 242 (wchar_t)MAX_); |
| 243 } |
| 244 |
| 245 UPerfFunction* CharPerformanceTest::TestStdLibToUpper() |
| 246 { |
| 247 return new StdLibCharPerfFunction(StdLibToUpper, (wchar_t)MIN_, |
| 248 (wchar_t)MAX_); |
| 249 } |
| 250 |
| 251 UPerfFunction* CharPerformanceTest::TestStdLibIsWhiteSpace() |
| 252 { |
| 253 return new StdLibCharPerfFunction(StdLibIsWhiteSpace, (wchar_t)MIN_, |
| 254 (wchar_t)MAX_); |
| 255 } |
OLD | NEW |