| OLD | NEW |
| 1 /* | 1 /* |
| 2 ********************************************************************** | 2 ********************************************************************** |
| 3 * Copyright (C) 2010-2012, International Business Machines | 3 * Copyright (C) 2010-2014, International Business Machines |
| 4 * Corporation and others. All Rights Reserved. | 4 * Corporation and others. All Rights Reserved. |
| 5 ********************************************************************** | 5 ********************************************************************** |
| 6 * file name: dicttrieperf.cpp | 6 * file name: dicttrieperf.cpp |
| 7 * encoding: US-ASCII | 7 * encoding: US-ASCII |
| 8 * tab size: 8 (not used) | 8 * tab size: 8 (not used) |
| 9 * indentation:4 | 9 * indentation:4 |
| 10 * | 10 * |
| 11 * created on: 2010dec09 | 11 * created on: 2010dec09 |
| 12 * created by: Markus W. Scherer | 12 * created by: Markus W. Scherer |
| 13 * | 13 * |
| (...skipping 16 matching lines...) Expand all Loading... |
| 30 #include "unicode/ucharstrie.h" | 30 #include "unicode/ucharstrie.h" |
| 31 #include "unicode/ucharstriebuilder.h" | 31 #include "unicode/ucharstriebuilder.h" |
| 32 #include "unicode/uperf.h" | 32 #include "unicode/uperf.h" |
| 33 #include "unicode/utext.h" | 33 #include "unicode/utext.h" |
| 34 #include "charstr.h" | 34 #include "charstr.h" |
| 35 #include "package.h" | 35 #include "package.h" |
| 36 #include "toolutil.h" | 36 #include "toolutil.h" |
| 37 #include "ucbuf.h" // struct ULine | 37 #include "ucbuf.h" // struct ULine |
| 38 #include "uoptions.h" | 38 #include "uoptions.h" |
| 39 #include "uvectr32.h" | 39 #include "uvectr32.h" |
| 40 | 40 #include "cmemory.h" // for UPRV_LENGTHOF |
| 41 #define LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0])) | |
| 42 | 41 |
| 43 // Test object. | 42 // Test object. |
| 44 class DictionaryTriePerfTest : public UPerfTest { | 43 class DictionaryTriePerfTest : public UPerfTest { |
| 45 public: | 44 public: |
| 46 DictionaryTriePerfTest(int32_t argc, const char *argv[], UErrorCode &status) | 45 DictionaryTriePerfTest(int32_t argc, const char *argv[], UErrorCode &status) |
| 47 : UPerfTest(argc, argv, NULL, 0, "", status), numTextLines(0) { | 46 : UPerfTest(argc, argv, NULL, 0, "", status), numTextLines(0) { |
| 48 if(hasFile()) { | 47 if(hasFile()) { |
| 49 getLines(status); | 48 getLines(status); |
| 50 for(int32_t i=0; i<numLines; ++i) { | 49 for(int32_t i=0; i<numLines; ++i) { |
| 51 // Skip comment lines (start with a character below 'A'). | 50 // Skip comment lines (start with a character below 'A'). |
| (...skipping 390 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 442 const ULine *lines=perf.getCachedLines(); | 441 const ULine *lines=perf.getCachedLines(); |
| 443 int32_t numLines=perf.getNumLines(); | 442 int32_t numLines=perf.getNumLines(); |
| 444 for(int32_t i=0; i<numLines; ++i) { | 443 for(int32_t i=0; i<numLines; ++i) { |
| 445 // Skip comment lines (start with a character below 'A'). | 444 // Skip comment lines (start with a character below 'A'). |
| 446 if(lines[i].name[0]<0x41) { | 445 if(lines[i].name[0]<0x41) { |
| 447 continue; | 446 continue; |
| 448 } | 447 } |
| 449 utext_openUChars(&text, lines[i].name, lines[i].len, pErrorCode); | 448 utext_openUChars(&text, lines[i].name, lines[i].len, pErrorCode); |
| 450 int32_t count=0; | 449 int32_t count=0; |
| 451 ucharsTrieMatches(*trie, &text, lines[i].len, | 450 ucharsTrieMatches(*trie, &text, lines[i].len, |
| 452 lengths, count, LENGTHOF(lengths)); | 451 lengths, count, UPRV_LENGTHOF(lengths)); |
| 453 if(count==0 || lengths[count-1]!=lines[i].len) { | 452 if(count==0 || lengths[count-1]!=lines[i].len) { |
| 454 fprintf(stderr, "word %ld (0-based) not found\n", (long)i); | 453 fprintf(stderr, "word %ld (0-based) not found\n", (long)i); |
| 455 } | 454 } |
| 456 } | 455 } |
| 457 } | 456 } |
| 458 }; | 457 }; |
| 459 | 458 |
| 460 class UCharsTrieDictContains : public UCharsTrieDictLookup { | 459 class UCharsTrieDictContains : public UCharsTrieDictLookup { |
| 461 public: | 460 public: |
| 462 UCharsTrieDictContains(const DictionaryTriePerfTest &perfTest) | 461 UCharsTrieDictContains(const DictionaryTriePerfTest &perfTest) |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 591 const ULine *lines=perf.getCachedLines(); | 590 const ULine *lines=perf.getCachedLines(); |
| 592 int32_t numLines=perf.getNumLines(); | 591 int32_t numLines=perf.getNumLines(); |
| 593 for(int32_t i=0; i<numLines; ++i) { | 592 for(int32_t i=0; i<numLines; ++i) { |
| 594 // Skip comment lines (start with a character below 'A'). | 593 // Skip comment lines (start with a character below 'A'). |
| 595 if(lines[i].name[0]<0x41) { | 594 if(lines[i].name[0]<0x41) { |
| 596 continue; | 595 continue; |
| 597 } | 596 } |
| 598 utext_openUChars(&text, lines[i].name, lines[i].len, pErrorCode); | 597 utext_openUChars(&text, lines[i].name, lines[i].len, pErrorCode); |
| 599 int32_t count=0; | 598 int32_t count=0; |
| 600 bytesTrieMatches(*trie, &text, lines[i].len, | 599 bytesTrieMatches(*trie, &text, lines[i].len, |
| 601 lengths, count, LENGTHOF(lengths)); | 600 lengths, count, UPRV_LENGTHOF(lengths)); |
| 602 if(count==0 || lengths[count-1]!=lines[i].len) { | 601 if(count==0 || lengths[count-1]!=lines[i].len) { |
| 603 fprintf(stderr, "word %ld (0-based) not found\n", (long)i); | 602 fprintf(stderr, "word %ld (0-based) not found\n", (long)i); |
| 604 } | 603 } |
| 605 } | 604 } |
| 606 } | 605 } |
| 607 }; | 606 }; |
| 608 | 607 |
| 609 class BytesTrieDictContains : public BytesTrieDictLookup { | 608 class BytesTrieDictContains : public BytesTrieDictLookup { |
| 610 public: | 609 public: |
| 611 BytesTrieDictContains(const DictionaryTriePerfTest &perfTest) | 610 BytesTrieDictContains(const DictionaryTriePerfTest &perfTest) |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 710 fprintf(stderr, "DictionaryTriePerfTest() failed: %s\n", errorCode.error
Name()); | 709 fprintf(stderr, "DictionaryTriePerfTest() failed: %s\n", errorCode.error
Name()); |
| 711 test.usage(); | 710 test.usage(); |
| 712 return errorCode.reset(); | 711 return errorCode.reset(); |
| 713 } | 712 } |
| 714 if(!test.run()) { | 713 if(!test.run()) { |
| 715 fprintf(stderr, "FAILED: Tests could not be run, please check the argume
nts.\n"); | 714 fprintf(stderr, "FAILED: Tests could not be run, please check the argume
nts.\n"); |
| 716 return -1; | 715 return -1; |
| 717 } | 716 } |
| 718 return 0; | 717 return 0; |
| 719 } | 718 } |
| OLD | NEW |