home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 6 / AACD06.ISO / AACD / Programming / ICU / src / icu / source / test / intltest / usettest.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1999-10-26  |  4.6 KB  |  147 lines

  1. /*
  2. **********************************************************************
  3. *   Copyright (C) 1999 Alan Liu and others. All rights reserved.
  4. **********************************************************************
  5. *   Date        Name        Description
  6. *   10/20/99    alan        Creation.
  7. **********************************************************************
  8. */
  9.  
  10. #include "utypes.h"
  11. #include "usettest.h"
  12. #include "uniset.h"
  13.  
  14. #define CASE(id,test) case id:                          \
  15.                           name = #test;                 \
  16.                           if (exec) {                   \
  17.                               logln(#test "---");       \
  18.                               logln((UnicodeString)""); \
  19.                               test();                   \
  20.                           }                             \
  21.                           break;
  22.  
  23. void
  24. UnicodeSetTest::runIndexedTest(int32_t index, bool_t exec,
  25.                                char* &name, char* par) {
  26.     // if (exec) logln((UnicodeString)"TestSuite UnicodeSetTest");
  27.     switch (index) {
  28.         CASE(0,TestPatterns)
  29.         CASE(1,TestAddRemove)
  30.  
  31.         default: name = ""; break;
  32.     }
  33. }
  34.  
  35. void
  36. UnicodeSetTest::TestPatterns() {
  37.     UnicodeSet set;
  38.     expectPattern(set, "[[a-m]&[d-z]&[k-y]]",  "km");
  39.     expectPattern(set, "[[a-z]-[m-y]-[d-r]]",  "aczz");
  40.     expectPattern(set, "[a\\-z]",  "--aazz");
  41.     expectPattern(set, "[-az]",  "--aazz");
  42.     expectPattern(set, "[az-]",  "--aazz");
  43.     expectPattern(set, "[[[a-z]-[aeiou]i]]", "bdfnptvz");
  44.  
  45.     // Throw in a test of complement
  46.     set.complement();
  47.     UnicodeString exp;
  48.     exp.append((UChar)0x0000).append("aeeoouu").append((UChar)('z'+1)).append((UChar)0xFFFF);
  49.     expectPairs(set, exp);
  50. }
  51.  
  52. void
  53. UnicodeSetTest::TestAddRemove() {
  54.     UErrorCode status = U_ZERO_ERROR;
  55.  
  56.     UnicodeSet set; // Construct empty set
  57.     set.add('a', 'z');
  58.     expectPairs(set, "az");
  59.     set.remove('m', 'p');
  60.     expectPairs(set, "alqz");
  61.     set.remove('e', 'g');
  62.     expectPairs(set, "adhlqz");
  63.     set.remove('d', 'i');
  64.     expectPairs(set, "acjlqz");
  65.     set.remove('c', 'r');
  66.     expectPairs(set, "absz");
  67.     set.add('f', 'q');
  68.     expectPairs(set, "abfqsz");
  69.     set.remove('a', 'g');
  70.     expectPairs(set, "hqsz");
  71.     set.remove('a', 'z');
  72.     expectPairs(set, "");
  73.  
  74.     // Try removing an entire set from another set
  75.     expectPattern(set, "[c-x]", "cx");
  76.     UnicodeSet set2;
  77.     expectPattern(set2, "[f-ky-za-bc[vw]]", "acfkvwyz");
  78.     set.removeAll(set2);
  79.     expectPairs(set, "deluxx");
  80.  
  81.     // Try adding an entire set to another set
  82.     expectPattern(set, "[jackiemclean]", "aacceein");
  83.     expectPattern(set2, "[hitoshinamekatajamesanderson]", "aadehkmort");
  84.     set.addAll(set2);
  85.     expectPairs(set, "aacehort");
  86.  
  87.     // Test commutativity
  88.     expectPattern(set, "[hitoshinamekatajamesanderson]", "aadehkmort");
  89.     expectPattern(set2, "[jackiemclean]", "aacceein");
  90.     set.addAll(set2);
  91.     expectPairs(set, "aacehort");
  92. }
  93.  
  94. void
  95. UnicodeSetTest::expectPattern(UnicodeSet& set,
  96.                               const UnicodeString& pattern,
  97.                               const UnicodeString& expectedPairs) {
  98.     UErrorCode status = U_ZERO_ERROR;
  99.     set.applyPattern(pattern, status);
  100.     if (U_FAILURE(status)) {
  101.         errln(UnicodeString("FAIL: applyPattern(\"") + pattern +
  102.               "\") failed");
  103.         return;
  104.     } else {
  105.         if (set.getPairs() != expectedPairs) {
  106.             errln(UnicodeString("FAIL: applyPattern(\"") + pattern +
  107.                   "\") => pairs \"" +
  108.                   escape(set.getPairs()) + "\", expected \"" +
  109.                   escape(expectedPairs) + "\"");
  110.         } else {
  111.             logln(UnicodeString("Ok:   applyPattern(\"") + pattern +
  112.                   "\") => pairs \"" +
  113.                   escape(set.getPairs()) + "\"");
  114.         }
  115.     }
  116. }
  117.  
  118. void
  119. UnicodeSetTest::expectPairs(const UnicodeSet& set, const UnicodeString& expectedPairs) {
  120.     if (set.getPairs() != expectedPairs) {
  121.         errln(UnicodeString("FAIL: Expected pair list \"") +
  122.               escape(expectedPairs) + "\", got \"" +
  123.               escape(set.getPairs()) + "\"");
  124.     }
  125. }
  126.  
  127. static UChar toHexString(int32_t i) { return i + (i < 10 ? '0' : ('A' - 10)); }
  128.  
  129. UnicodeString
  130. UnicodeSetTest::escape(const UnicodeString& s) {
  131.     UnicodeString buf;
  132.     for (int32_t i=0; i<s.size(); ++i)
  133.     {
  134.         UChar c = s[(UTextOffset)i];
  135.         if (' ' <= c && c <= (UChar)0x7F) {
  136.             buf += c;
  137.         } else {
  138.             buf += '\\'; buf += 'u';
  139.             buf += toHexString((c & 0xF000) >> 12);
  140.             buf += toHexString((c & 0x0F00) >> 8);
  141.             buf += toHexString((c & 0x00F0) >> 4);
  142.             buf += toHexString(c & 0x000F);
  143.         }
  144.     }
  145.     return buf;
  146. }
  147.