1 /* 2 *********************************************************************** 3 * Copyright (C) 2016 and later: Unicode, Inc. and others. 4 * License & terms of use: http://www.unicode.org/copyright.html#License 5 *********************************************************************** 6 *********************************************************************** 7 * Copyright (c) 2002-2016, International Business Machines 8 * Corporation and others. All Rights Reserved. 9 *********************************************************************** 10 *********************************************************************** 11 */ 12 /** 13 * This Program tests the performance of ICU's Normalization engine against Windows 14 * to run it use the command like 15 * 16 * c:\normperf.exe -s C:\work\ICUCupertinoRep\icu4c\collation-perf-data -i 10 -p 15 -f TestNames_Asian.txt -u -e UTF-8 -l 17 */ 18 #include "normperf.h" 19 #include "uoptions.h" 20 #include "cmemory.h" // for UPRV_LENGTHOF 21 #include <stdio.h> 22 23 UPerfFunction* NormalizerPerformanceTest::runIndexedTest(int32_t index, UBool exec,const char* &name, char* par) { 24 switch (index) { 25 TESTCASE(0,TestICU_NFC_NFD_Text); 26 TESTCASE(1,TestICU_NFC_NFC_Text); 27 TESTCASE(2,TestICU_NFC_Orig_Text); 28 29 TESTCASE(3,TestICU_NFD_NFD_Text); 30 TESTCASE(4,TestICU_NFD_NFC_Text); 31 TESTCASE(5,TestICU_NFD_Orig_Text); 32 33 TESTCASE(6,TestICU_FCD_NFD_Text); 34 TESTCASE(7,TestICU_FCD_NFC_Text); 35 TESTCASE(8,TestICU_FCD_Orig_Text); 36 37 TESTCASE(9,TestWin_NFC_NFD_Text); 38 TESTCASE(10,TestWin_NFC_NFC_Text); 39 TESTCASE(11,TestWin_NFC_Orig_Text); 40 41 TESTCASE(12,TestWin_NFD_NFD_Text); 42 TESTCASE(13,TestWin_NFD_NFC_Text); 43 TESTCASE(14,TestWin_NFD_Orig_Text); 44 45 TESTCASE(15,TestQC_NFC_NFD_Text); 46 TESTCASE(16,TestQC_NFC_NFC_Text); 47 TESTCASE(17,TestQC_NFC_Orig_Text); 48 49 TESTCASE(18,TestQC_NFD_NFD_Text); 50 TESTCASE(19,TestQC_NFD_NFC_Text); 51 TESTCASE(20,TestQC_NFD_Orig_Text); 52 53 TESTCASE(21,TestQC_FCD_NFD_Text); 54 TESTCASE(22,TestQC_FCD_NFC_Text); 55 TESTCASE(23,TestQC_FCD_Orig_Text); 56 57 TESTCASE(24,TestIsNormalized_NFC_NFD_Text); 58 TESTCASE(25,TestIsNormalized_NFC_NFC_Text); 59 TESTCASE(26,TestIsNormalized_NFC_Orig_Text); 60 61 TESTCASE(27,TestIsNormalized_NFD_NFD_Text); 62 TESTCASE(28,TestIsNormalized_NFD_NFC_Text); 63 TESTCASE(29,TestIsNormalized_NFD_Orig_Text); 64 65 TESTCASE(30,TestIsNormalized_FCD_NFD_Text); 66 TESTCASE(31,TestIsNormalized_FCD_NFC_Text); 67 TESTCASE(32,TestIsNormalized_FCD_Orig_Text); 68 69 default: 70 name = ""; 71 return NULL; 72 } 73 return NULL; 74 75 } 76 77 void NormalizerPerformanceTest::normalizeInput(ULine* dest,const UChar* src ,int32_t srcLen,UNormalizationMode mode, int32_t options){ 78 int32_t reqLen = 0; 79 UErrorCode status = U_ZERO_ERROR; 80 for(;;){ 81 /* pure pre-flight */ 82 reqLen=unorm_normalize(src,srcLen,mode, options,NULL,0,&status); 83 if(status==U_BUFFER_OVERFLOW_ERROR){ 84 status=U_ZERO_ERROR; 85 dest->name = new UChar[reqLen+1]; 86 reqLen= unorm_normalize(src,srcLen,mode, options,dest->name,reqLen+1,&status); 87 dest->len=reqLen; 88 break; 89 }else if(U_FAILURE(status)){ 90 printf("Could not normalize input. Error: %s", u_errorName(status)); 91 } 92 } 93 } 94 UChar* NormalizerPerformanceTest::normalizeInput(int32_t& len, const UChar* src ,int32_t srcLen,UNormalizationMode mode, int32_t options){ 95 int32_t reqLen = 0; 96 UErrorCode status = U_ZERO_ERROR; 97 UChar* dest = NULL; 98 for(;;){ 99 /* pure pre-flight */ 100 reqLen=unorm_normalize(src,srcLen,mode, options,NULL,0,&status); 101 if(status==U_BUFFER_OVERFLOW_ERROR){ 102 status=U_ZERO_ERROR; 103 dest = new UChar[reqLen+1]; 104 reqLen= unorm_normalize(src,srcLen,mode, options,dest,reqLen+1,&status); 105 len=reqLen; 106 break; 107 }else if(U_FAILURE(status)){ 108 printf("Could not normalize input. Error: %s", u_errorName(status)); 109 return NULL; 110 } 111 } 112 return dest; 113 } 114 115 static UOption cmdLineOptions[]={ 116 UOPTION_DEF("options", 'o', UOPT_OPTIONAL_ARG) 117 }; 118 119 NormalizerPerformanceTest::NormalizerPerformanceTest(int32_t argc, const char* argv[], UErrorCode& status) 120 : UPerfTest(argc,argv,status), options(0) { 121 NFDBuffer = NULL; 122 NFCBuffer = NULL; 123 NFDBufferLen = 0; 124 NFCBufferLen = 0; 125 NFDFileLines = NULL; 126 NFCFileLines = NULL; 127 128 if(status== U_ILLEGAL_ARGUMENT_ERROR){ 129 fprintf(stderr,gUsageString, "normperf"); 130 return; 131 } 132 133 if(U_FAILURE(status)){ 134 fprintf(stderr, "FAILED to create UPerfTest object. Error: %s\n", u_errorName(status)); 135 return; 136 } 137 138 _remainingArgc = u_parseArgs(_remainingArgc, (char **)argv, UPRV_LENGTHOF(cmdLineOptions), cmdLineOptions); 139 if(cmdLineOptions[0].doesOccur && cmdLineOptions[0].value!=NULL) { 140 options=(int32_t)strtol(cmdLineOptions[0].value, NULL, 16); 141 } 142 143 if(line_mode){ 144 ULine* filelines = getLines(status); 145 if(U_FAILURE(status)){ 146 fprintf(stderr, "FAILED to read lines from file and create UPerfTest object. Error: %s\n", u_errorName(status)); 147 return; 148 } 149 NFDFileLines = new ULine[numLines]; 150 NFCFileLines = new ULine[numLines]; 151 152 for(int32_t i=0;i<numLines;i++){ 153 normalizeInput(&NFDFileLines[i],filelines[i].name,filelines[i].len,UNORM_NFD, options); 154 normalizeInput(&NFCFileLines[i],filelines[i].name,filelines[i].len,UNORM_NFC, options); 155 156 } 157 }else if(bulk_mode){ 158 int32_t srcLen = 0; 159 const UChar* src = getBuffer(srcLen,status); 160 NFDBufferLen = 0; 161 NFCBufferLen = 0; 162 163 if(U_FAILURE(status)){ 164 fprintf(stderr, "FAILED to read buffer from file and create UPerfTest object. Error: %s\n", u_errorName(status)); 165 return; 166 } 167 168 NFDBuffer = normalizeInput(NFDBufferLen,src,srcLen,UNORM_NFD, options); 169 NFCBuffer = normalizeInput(NFCBufferLen,src,srcLen,UNORM_NFC, options); 170 } 171 172 } 173 174 NormalizerPerformanceTest::~NormalizerPerformanceTest(){ 175 delete[] NFDFileLines; 176 delete[] NFCFileLines; 177 delete[] NFDBuffer; 178 delete[] NFCBuffer; 179 } 180 181 // Test NFC Performance 182 UPerfFunction* NormalizerPerformanceTest::TestICU_NFC_NFD_Text(){ 183 if(line_mode){ 184 NormPerfFunction* func= new NormPerfFunction(ICUNormNFC, options,NFDFileLines,numLines, uselen); 185 return func; 186 }else{ 187 NormPerfFunction* func= new NormPerfFunction(ICUNormNFC, options,NFDBuffer, NFDBufferLen, uselen); 188 return func; 189 } 190 } 191 UPerfFunction* NormalizerPerformanceTest::TestICU_NFC_NFC_Text(){ 192 if(line_mode){ 193 NormPerfFunction* func = new NormPerfFunction(ICUNormNFC, options,NFCFileLines,numLines, uselen); 194 return func; 195 }else{ 196 NormPerfFunction* func= new NormPerfFunction(ICUNormNFC, options,NFCBuffer, NFCBufferLen, uselen); 197 return func; 198 } 199 } 200 UPerfFunction* NormalizerPerformanceTest::TestICU_NFC_Orig_Text(){ 201 if(line_mode){ 202 NormPerfFunction* func = new NormPerfFunction(ICUNormNFC, options,lines,numLines, uselen); 203 return func; 204 }else{ 205 NormPerfFunction* func = new NormPerfFunction(ICUNormNFC, options,buffer, bufferLen, uselen); 206 return func; 207 } 208 } 209 210 // Test NFD Performance 211 UPerfFunction* NormalizerPerformanceTest::TestICU_NFD_NFD_Text(){ 212 if(line_mode){ 213 NormPerfFunction* func = new NormPerfFunction(ICUNormNFD, options,NFDFileLines,numLines, uselen); 214 return func; 215 }else{ 216 NormPerfFunction* func = new NormPerfFunction(ICUNormNFD, options,NFDBuffer,NFDBufferLen, uselen); 217 return func; 218 } 219 } 220 UPerfFunction* NormalizerPerformanceTest::TestICU_NFD_NFC_Text(){ 221 if(line_mode){ 222 NormPerfFunction* func = new NormPerfFunction(ICUNormNFD, options,NFCFileLines,numLines, uselen); 223 return func; 224 }else{ 225 NormPerfFunction* func = new NormPerfFunction(ICUNormNFD, options,NFCBuffer,NFCBufferLen, uselen); 226 return func; 227 } 228 } 229 UPerfFunction* NormalizerPerformanceTest::TestICU_NFD_Orig_Text(){ 230 if(line_mode){ 231 NormPerfFunction* func = new NormPerfFunction(ICUNormNFD, options,lines,numLines, uselen); 232 return func; 233 }else{ 234 NormPerfFunction* func = new NormPerfFunction(ICUNormNFD, options,buffer,bufferLen, uselen); 235 return func; 236 } 237 } 238 239 // Test FCD Performance 240 UPerfFunction* NormalizerPerformanceTest::TestICU_FCD_NFD_Text(){ 241 if(line_mode){ 242 NormPerfFunction* func = new NormPerfFunction(ICUNormFCD, options,NFDFileLines,numLines, uselen); 243 return func; 244 }else{ 245 NormPerfFunction* func = new NormPerfFunction(ICUNormFCD, options,NFDBuffer,NFDBufferLen, uselen); 246 return func; 247 } 248 249 } 250 UPerfFunction* NormalizerPerformanceTest::TestICU_FCD_NFC_Text(){ 251 if(line_mode){ 252 NormPerfFunction* func = new NormPerfFunction(ICUNormFCD, options,NFCFileLines,numLines, uselen); 253 return func; 254 }else{ 255 NormPerfFunction* func = new NormPerfFunction(ICUNormFCD, options,NFCBuffer,NFCBufferLen, uselen); 256 return func; 257 } 258 } 259 UPerfFunction* NormalizerPerformanceTest::TestICU_FCD_Orig_Text(){ 260 if(line_mode){ 261 NormPerfFunction* func = new NormPerfFunction(ICUNormFCD, options,lines,numLines, uselen); 262 return func; 263 }else{ 264 NormPerfFunction* func = new NormPerfFunction(ICUNormFCD, options,buffer,bufferLen, uselen); 265 return func; 266 } 267 } 268 269 // Test Win NFC Performance 270 UPerfFunction* NormalizerPerformanceTest::TestWin_NFC_NFD_Text(){ 271 if(line_mode){ 272 NormPerfFunction* func = new NormPerfFunction(WinNormNFC, options,NFDFileLines,numLines, uselen); 273 return func; 274 }else{ 275 NormPerfFunction* func = new NormPerfFunction(WinNormNFC, options,NFDBuffer,NFDBufferLen, uselen); 276 return func; 277 } 278 } 279 UPerfFunction* NormalizerPerformanceTest::TestWin_NFC_NFC_Text(){ 280 if(line_mode){ 281 NormPerfFunction* func = new NormPerfFunction(WinNormNFC, options,NFCFileLines,numLines, uselen); 282 return func; 283 }else{ 284 NormPerfFunction* func = new NormPerfFunction(WinNormNFC, options,NFCBuffer,NFCBufferLen, uselen); 285 return func; 286 } 287 } 288 UPerfFunction* NormalizerPerformanceTest::TestWin_NFC_Orig_Text(){ 289 if(line_mode){ 290 NormPerfFunction* func = new NormPerfFunction(WinNormNFC, options,lines,numLines, uselen); 291 return func; 292 }else{ 293 NormPerfFunction* func = new NormPerfFunction(WinNormNFC, options,buffer,bufferLen, uselen); 294 return func; 295 } 296 } 297 298 // Test Win NFD Performance 299 UPerfFunction* NormalizerPerformanceTest::TestWin_NFD_NFD_Text(){ 300 if(line_mode){ 301 NormPerfFunction* func = new NormPerfFunction(WinNormNFD, options,NFDFileLines,numLines, uselen); 302 return func; 303 }else{ 304 NormPerfFunction* func = new NormPerfFunction(WinNormNFD, options,NFDBuffer,NFDBufferLen, uselen); 305 return func; 306 } 307 } 308 UPerfFunction* NormalizerPerformanceTest::TestWin_NFD_NFC_Text(){ 309 if(line_mode){ 310 NormPerfFunction* func = new NormPerfFunction(WinNormNFD, options,NFCFileLines,numLines, uselen); 311 return func; 312 }else{ 313 NormPerfFunction* func = new NormPerfFunction(WinNormNFD, options,NFCBuffer,NFCBufferLen, uselen); 314 return func; 315 } 316 } 317 UPerfFunction* NormalizerPerformanceTest::TestWin_NFD_Orig_Text(){ 318 if(line_mode){ 319 NormPerfFunction* func = new NormPerfFunction(WinNormNFD, options,lines,numLines, uselen); 320 return func; 321 }else{ 322 NormPerfFunction* func = new NormPerfFunction(WinNormNFD, options,buffer,bufferLen, uselen); 323 return func; 324 } 325 } 326 327 // Test Quick Check Performance 328 UPerfFunction* NormalizerPerformanceTest::TestQC_NFC_NFD_Text(){ 329 if(line_mode){ 330 QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUQuickCheck,NFDFileLines, numLines, UNORM_NFC, options,uselen); 331 return func; 332 }else{ 333 QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUQuickCheck,NFDBuffer, NFDBufferLen, UNORM_NFC, options,uselen); 334 return func; 335 } 336 } 337 UPerfFunction* NormalizerPerformanceTest::TestQC_NFC_NFC_Text(){ 338 if(line_mode){ 339 QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUQuickCheck,NFCFileLines, numLines, UNORM_NFC, options,uselen); 340 return func; 341 }else{ 342 QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUQuickCheck,NFCBuffer, NFCBufferLen, UNORM_NFC, options,uselen); 343 return func; 344 } 345 } 346 UPerfFunction* NormalizerPerformanceTest::TestQC_NFC_Orig_Text(){ 347 if(line_mode){ 348 QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUQuickCheck,lines, numLines, UNORM_NFC, options,uselen); 349 return func; 350 }else{ 351 QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUQuickCheck,buffer, bufferLen, UNORM_NFC, options,uselen); 352 return func; 353 } 354 } 355 356 UPerfFunction* NormalizerPerformanceTest::TestQC_NFD_NFD_Text(){ 357 if(line_mode){ 358 QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUQuickCheck,NFDFileLines, numLines, UNORM_NFD, options,uselen); 359 return func; 360 }else{ 361 QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUQuickCheck,NFDBuffer, NFDBufferLen, UNORM_NFD, options,uselen); 362 return func; 363 } 364 } 365 UPerfFunction* NormalizerPerformanceTest::TestQC_NFD_NFC_Text(){ 366 if(line_mode){ 367 QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUQuickCheck,NFCFileLines, numLines, UNORM_NFD, options,uselen); 368 return func; 369 }else{ 370 QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUQuickCheck,NFCBuffer, NFCBufferLen, UNORM_NFD, options,uselen); 371 return func; 372 } 373 } 374 UPerfFunction* NormalizerPerformanceTest::TestQC_NFD_Orig_Text(){ 375 if(line_mode){ 376 QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUQuickCheck,lines, numLines, UNORM_NFD, options,uselen); 377 return func; 378 }else{ 379 QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUQuickCheck,buffer, bufferLen, UNORM_NFD, options,uselen); 380 return func; 381 } 382 } 383 384 UPerfFunction* NormalizerPerformanceTest::TestQC_FCD_NFD_Text(){ 385 if(line_mode){ 386 QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUQuickCheck,NFDFileLines, numLines, UNORM_FCD, options,uselen); 387 return func; 388 }else{ 389 QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUQuickCheck,NFDBuffer, NFDBufferLen, UNORM_FCD, options,uselen); 390 return func; 391 } 392 } 393 UPerfFunction* NormalizerPerformanceTest::TestQC_FCD_NFC_Text(){ 394 if(line_mode){ 395 QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUQuickCheck,NFCFileLines, numLines, UNORM_FCD, options,uselen); 396 return func; 397 }else{ 398 QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUQuickCheck,NFCBuffer, NFCBufferLen, UNORM_FCD, options,uselen); 399 return func; 400 } 401 } 402 UPerfFunction* NormalizerPerformanceTest::TestQC_FCD_Orig_Text(){ 403 if(line_mode){ 404 QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUQuickCheck,lines, numLines, UNORM_FCD, options,uselen); 405 return func; 406 }else{ 407 QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUQuickCheck,buffer, bufferLen, UNORM_FCD, options,uselen); 408 return func; 409 } 410 } 411 412 // Test isNormalized Performance 413 UPerfFunction* NormalizerPerformanceTest::TestIsNormalized_NFC_NFD_Text(){ 414 if(line_mode){ 415 QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUIsNormalized,NFDFileLines, numLines, UNORM_NFC, options,uselen); 416 return func; 417 }else{ 418 QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUIsNormalized,NFDBuffer, NFDBufferLen, UNORM_NFC, options,uselen); 419 return func; 420 } 421 } 422 UPerfFunction* NormalizerPerformanceTest::TestIsNormalized_NFC_NFC_Text(){ 423 if(line_mode){ 424 QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUIsNormalized,NFCFileLines, numLines, UNORM_NFC, options,uselen); 425 return func; 426 }else{ 427 QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUIsNormalized,NFCBuffer, NFCBufferLen, UNORM_NFC, options,uselen); 428 return func; 429 } 430 } 431 UPerfFunction* NormalizerPerformanceTest::TestIsNormalized_NFC_Orig_Text(){ 432 if(line_mode){ 433 QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUIsNormalized,lines, numLines, UNORM_NFC, options,uselen); 434 return func; 435 }else{ 436 QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUIsNormalized,buffer, bufferLen, UNORM_NFC, options,uselen); 437 return func; 438 } 439 } 440 441 UPerfFunction* NormalizerPerformanceTest::TestIsNormalized_NFD_NFD_Text(){ 442 if(line_mode){ 443 QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUIsNormalized,NFDFileLines, numLines, UNORM_NFD, options,uselen); 444 return func; 445 }else{ 446 QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUIsNormalized,NFDBuffer, NFDBufferLen, UNORM_NFD, options,uselen); 447 return func; 448 } 449 } 450 UPerfFunction* NormalizerPerformanceTest::TestIsNormalized_NFD_NFC_Text(){ 451 if(line_mode){ 452 QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUIsNormalized,NFCFileLines, numLines, UNORM_NFD, options,uselen); 453 return func; 454 }else{ 455 QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUIsNormalized,NFCBuffer, NFCBufferLen, UNORM_NFD, options,uselen); 456 return func; 457 } 458 } 459 UPerfFunction* NormalizerPerformanceTest::TestIsNormalized_NFD_Orig_Text(){ 460 if(line_mode){ 461 QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUIsNormalized,lines, numLines, UNORM_NFD, options,uselen); 462 return func; 463 }else{ 464 QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUIsNormalized,buffer, bufferLen, UNORM_NFD, options,uselen); 465 return func; 466 } 467 } 468 469 UPerfFunction* NormalizerPerformanceTest::TestIsNormalized_FCD_NFD_Text(){ 470 if(line_mode){ 471 QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUIsNormalized,NFDFileLines, numLines, UNORM_FCD, options,uselen); 472 return func; 473 }else{ 474 QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUIsNormalized,NFDBuffer, NFDBufferLen, UNORM_FCD, options,uselen); 475 return func; 476 } 477 } 478 UPerfFunction* NormalizerPerformanceTest::TestIsNormalized_FCD_NFC_Text(){ 479 if(line_mode){ 480 QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUIsNormalized,NFCFileLines, numLines, UNORM_FCD, options,uselen); 481 return func; 482 }else{ 483 QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUIsNormalized,NFCBuffer, NFCBufferLen, UNORM_FCD, options,uselen); 484 return func; 485 } 486 } 487 UPerfFunction* NormalizerPerformanceTest::TestIsNormalized_FCD_Orig_Text(){ 488 if(line_mode){ 489 QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUIsNormalized,lines, numLines, UNORM_FCD, options,uselen); 490 return func; 491 }else{ 492 QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUIsNormalized,buffer, bufferLen, UNORM_FCD, options,uselen); 493 return func; 494 } 495 } 496 497 int main(int argc, const char* argv[]){ 498 UErrorCode status = U_ZERO_ERROR; 499 NormalizerPerformanceTest test(argc, argv, status); 500 if(U_FAILURE(status)){ 501 return status; 502 } 503 if(test.run()==FALSE){ 504 fprintf(stderr,"FAILED: Tests could not be run please check the arguments.\n"); 505 return -1; 506 } 507 return 0; 508 } 509