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 } 256