185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho/******************************************************************** 285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * COPYRIGHT: 38393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius * Copyright (C) 2008-2012 IBM, Inc. All Rights Reserved. 485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * 585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho ********************************************************************/ 685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho/** 785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * This program tests string search performance. 885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * APIs tested: 985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * ICU4C 1085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho */ 1185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 1285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#include "strsrchperf.h" 1385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 1485bf2e2fbc60a9f938064abc8127d61da7d19882Claire HoStringSearchPerformanceTest::StringSearchPerformanceTest(int32_t argc, const char *argv[], UErrorCode &status) 1585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho:UPerfTest(argc,argv,status){ 1685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho int32_t start, end; 1785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho srch = NULL; 1885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho pttrn = NULL; 1985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho if(status== U_ILLEGAL_ARGUMENT_ERROR || line_mode){ 2085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho fprintf(stderr,gUsageString, "strsrchperf"); 2185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho return; 2285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 2385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho /* Get the Text */ 2485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho src = getBuffer(srcLen, status); 2585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 2685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#if 0 2785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho /* Get a word to find. Do this by selecting a random word with a word breakiterator. */ 2885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho UBreakIterator* brk = ubrk_open(UBRK_WORD, locale, src, srcLen, &status); 2985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho if(U_FAILURE(status)){ 3085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho fprintf(stderr, "FAILED to create pattern for searching. Error: %s\n", u_errorName(status)); 3185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho return; 3285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 3385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho start = ubrk_preceding(brk, 1000); 3485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho end = ubrk_following(brk, start); 3585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho pttrnLen = end - start; 3685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho UChar* temp = (UChar*)malloc(sizeof(UChar)*(pttrnLen)); 3785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho for (int i = 0; i < pttrnLen; i++) { 3885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho temp[i] = src[start++]; 3985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 4085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho pttrn = temp; /* store word in pttrn */ 4185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho ubrk_close(brk); 4285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#else 4385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho /* The first line of the file contains the pattern */ 4485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho start = 0; 4585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 4685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho for(end = start; ; end += 1) { 4785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho UChar ch = src[end]; 4885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 4985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho if (ch == 0x000A || ch == 0x000D || ch == 0x2028) { 5085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho break; 5185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 5285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 5385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 5485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho pttrnLen = end - start; 5585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho UChar* temp = (UChar*)malloc(sizeof(UChar)*(pttrnLen)); 5685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho for (int i = 0; i < pttrnLen; i++) { 5785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho temp[i] = src[start++]; 5885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 5985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho pttrn = temp; /* store word in pttrn */ 6085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#endif 6185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 6285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho /* Create the StringSearch object to be use in performance test. */ 6385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho srch = usearch_open(pttrn, pttrnLen, src, srcLen, locale, NULL, &status); 6485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 6585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho if(U_FAILURE(status)){ 6685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho fprintf(stderr, "FAILED to create UPerfTest object. Error: %s\n", u_errorName(status)); 6785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho return; 6885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 6985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 7085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho} 7185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 7285bf2e2fbc60a9f938064abc8127d61da7d19882Claire HoStringSearchPerformanceTest::~StringSearchPerformanceTest() { 7385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho if (pttrn != NULL) { 7485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho free(pttrn); 7585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 7685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho if (srch != NULL) { 7785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho usearch_close(srch); 7885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 7985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho} 8085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 8185bf2e2fbc60a9f938064abc8127d61da7d19882Claire HoUPerfFunction* StringSearchPerformanceTest::runIndexedTest(int32_t index, UBool exec, const char *&name, char *par) { 8285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho switch (index) { 8385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho TESTCASE(0,Test_ICU_Forward_Search); 8485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho TESTCASE(1,Test_ICU_Backward_Search); 8585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 8685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho default: 8785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho name = ""; 8885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho return NULL; 8985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 9085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho return NULL; 9185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho} 9285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 9385bf2e2fbc60a9f938064abc8127d61da7d19882Claire HoUPerfFunction* StringSearchPerformanceTest::Test_ICU_Forward_Search(){ 9485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho StringSearchPerfFunction* func = new StringSearchPerfFunction(ICUForwardSearch, srch, src, srcLen, pttrn, pttrnLen); 9585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho return func; 9685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho} 9785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 9885bf2e2fbc60a9f938064abc8127d61da7d19882Claire HoUPerfFunction* StringSearchPerformanceTest::Test_ICU_Backward_Search(){ 9985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho StringSearchPerfFunction* func = new StringSearchPerfFunction(ICUBackwardSearch, srch, src, srcLen, pttrn, pttrnLen); 10085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho return func; 10185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho} 10285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 10385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hoint main (int argc, const char* argv[]) { 10485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho UErrorCode status = U_ZERO_ERROR; 10585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho StringSearchPerformanceTest test(argc, argv, status); 10685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho if(U_FAILURE(status)){ 10785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho return status; 10885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 10985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho if(test.run()==FALSE){ 11085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho fprintf(stderr,"FAILED: Tests could not be run please check the arguments.\n"); 11185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho return -1; 11285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 11385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho return 0; 11485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho} 115