| Index: icu46/source/test/perf/strsrchperf/strsrchperf.cpp
|
| ===================================================================
|
| --- icu46/source/test/perf/strsrchperf/strsrchperf.cpp (revision 0)
|
| +++ icu46/source/test/perf/strsrchperf/strsrchperf.cpp (revision 0)
|
| @@ -0,0 +1,148 @@
|
| +/********************************************************************
|
| + * COPYRIGHT:
|
| + * Copyright (C) 2008-2009 IBM, Inc. All Rights Reserved.
|
| + *
|
| + ********************************************************************/
|
| +/**
|
| + * This program tests string search performance.
|
| + * APIs tested:
|
| + * ICU4C
|
| + */
|
| +
|
| +#include "strsrchperf.h"
|
| +
|
| +StringSearchPerformanceTest::StringSearchPerformanceTest(int32_t argc, const char *argv[], UErrorCode &status)
|
| +:UPerfTest(argc,argv,status){
|
| + int32_t start, end;
|
| +
|
| +#ifdef TEST_BOYER_MOORE_SEARCH
|
| + bms = NULL;
|
| +#else
|
| + srch = NULL;
|
| +#endif
|
| +
|
| + pttrn = NULL;
|
| + if(status== U_ILLEGAL_ARGUMENT_ERROR || line_mode){
|
| + fprintf(stderr,gUsageString, "strsrchperf");
|
| + return;
|
| + }
|
| + /* Get the Text */
|
| + src = getBuffer(srcLen, status);
|
| +
|
| +#if 0
|
| + /* Get a word to find. Do this by selecting a random word with a word breakiterator. */
|
| + UBreakIterator* brk = ubrk_open(UBRK_WORD, locale, src, srcLen, &status);
|
| + if(U_FAILURE(status)){
|
| + fprintf(stderr, "FAILED to create pattern for searching. Error: %s\n", u_errorName(status));
|
| + return;
|
| + }
|
| + start = ubrk_preceding(brk, 1000);
|
| + end = ubrk_following(brk, start);
|
| + pttrnLen = end - start;
|
| + UChar* temp = (UChar*)malloc(sizeof(UChar)*(pttrnLen));
|
| + for (int i = 0; i < pttrnLen; i++) {
|
| + temp[i] = src[start++];
|
| + }
|
| + pttrn = temp; /* store word in pttrn */
|
| + ubrk_close(brk);
|
| +#else
|
| + /* The first line of the file contains the pattern */
|
| + start = 0;
|
| +
|
| + for(end = start; ; end += 1) {
|
| + UChar ch = src[end];
|
| +
|
| + if (ch == 0x000A || ch == 0x000D || ch == 0x2028) {
|
| + break;
|
| + }
|
| + }
|
| +
|
| + pttrnLen = end - start;
|
| + UChar* temp = (UChar*)malloc(sizeof(UChar)*(pttrnLen));
|
| + for (int i = 0; i < pttrnLen; i++) {
|
| + temp[i] = src[start++];
|
| + }
|
| + pttrn = temp; /* store word in pttrn */
|
| +#endif
|
| +
|
| +#ifdef TEST_BOYER_MOORE_SEARCH
|
| + UnicodeString patternString(pttrn, pttrnLen);
|
| + UCollator *coll = ucol_open(locale, &status);
|
| + CollData *data = CollData::open(coll, status);
|
| +
|
| + targetString = new UnicodeString(src, srcLen);
|
| + bms = new BoyerMooreSearch(data, patternString, targetString, status);
|
| +#else
|
| + /* Create the StringSearch object to be use in performance test. */
|
| + srch = usearch_open(pttrn, pttrnLen, src, srcLen, locale, NULL, &status);
|
| +#endif
|
| +
|
| + if(U_FAILURE(status)){
|
| + fprintf(stderr, "FAILED to create UPerfTest object. Error: %s\n", u_errorName(status));
|
| + return;
|
| + }
|
| +
|
| +}
|
| +
|
| +StringSearchPerformanceTest::~StringSearchPerformanceTest() {
|
| + CollData *data = bms->getData();
|
| + UCollator *coll = data->getCollator();
|
| +
|
| + delete bms;
|
| + delete targetString;
|
| + CollData::close(data);
|
| + ucol_close(coll);
|
| +
|
| + if (pttrn != NULL) {
|
| + free(pttrn);
|
| + }
|
| +
|
| +#ifndef TEST_BOYER_MOORE_SEARCH
|
| + if (srch != NULL) {
|
| + usearch_close(srch);
|
| + }
|
| +#endif
|
| +}
|
| +
|
| +UPerfFunction* StringSearchPerformanceTest::runIndexedTest(int32_t index, UBool exec, const char *&name, char *par) {
|
| + switch (index) {
|
| + TESTCASE(0,Test_ICU_Forward_Search);
|
| + TESTCASE(1,Test_ICU_Backward_Search);
|
| +
|
| + default:
|
| + name = "";
|
| + return NULL;
|
| + }
|
| + return NULL;
|
| +}
|
| +
|
| +UPerfFunction* StringSearchPerformanceTest::Test_ICU_Forward_Search(){
|
| +#ifdef TEST_BOYER_MOORE_SEARCH
|
| + StringSearchPerfFunction *func = new StringSearchPerfFunction(ICUForwardSearch, bms, src, srcLen, pttrn, pttrnLen);
|
| +#else
|
| + StringSearchPerfFunction* func = new StringSearchPerfFunction(ICUForwardSearch, srch, src, srcLen, pttrn, pttrnLen);
|
| +#endif
|
| + return func;
|
| +}
|
| +
|
| +UPerfFunction* StringSearchPerformanceTest::Test_ICU_Backward_Search(){
|
| +#ifdef TEST_BOYER_MOORE_SEARCH
|
| + StringSearchPerfFunction *func = new StringSearchPerfFunction(ICUBackwardSearch, bms, src, srcLen, pttrn, pttrnLen);
|
| +#else
|
| + StringSearchPerfFunction* func = new StringSearchPerfFunction(ICUBackwardSearch, srch, src, srcLen, pttrn, pttrnLen);
|
| +#endif
|
| + return func;
|
| +}
|
| +
|
| +int main (int argc, const char* argv[]) {
|
| + UErrorCode status = U_ZERO_ERROR;
|
| + StringSearchPerformanceTest test(argc, argv, status);
|
| + if(U_FAILURE(status)){
|
| + return status;
|
| + }
|
| + if(test.run()==FALSE){
|
| + fprintf(stderr,"FAILED: Tests could not be run please check the arguments.\n");
|
| + return -1;
|
| + }
|
| + return 0;
|
| +}
|
|
|
| Property changes on: icu46/source/test/perf/strsrchperf/strsrchperf.cpp
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|