usettest.h revision c73f511526464f8e56c242df80552e9b0d94ae3d
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/******************************************************************** 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * COPYRIGHT: 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright (c) 1997-2007, International Business Machines Corporation and 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * others. All Rights Reserved. 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ******************************************************************** 7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)********************************************************************** 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)* Date Name Description 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)* 10/20/99 alan Creation. 10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch* 03/22/2000 Madhu Added additional tests 115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)********************************************************************** 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)*/ 13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef _TESTUNISET 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _TESTUNISET 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "unicode/unistr.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "unicode/uniset.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "unicode/ucnv_err.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "intltest.h" 21868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 22868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class UnicodeSetWithStrings; 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * UnicodeSet test 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */ 27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class UnicodeSetTest: public IntlTest { 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)public: 29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch UnicodeSetTest(); 30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ~UnicodeSetTest(); 31424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 32424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)private: 33424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par=NULL); 34424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void Testj2268(); 36868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 37868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) /** 38868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * Test that toPattern() round trips with syntax characters and 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * whitespace. 40868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) */ 41868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void TestToPattern(); 42868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 43868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void TestPatterns(void); 44868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void TestCategories(void); 45868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void TestAddRemove(void); 46868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void TestCloneEqualHash(void); 47868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 48868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) /** 49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) * Make sure minimal representation is maintained. 50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) */ 51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void TestMinimalRep(void); 52a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void TestAPI(void); 54868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void TestIteration(void); 56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void TestStrings(void); 5868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 5968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) void TestScriptSet(void); 60868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 61868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) /** 62868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * Test the [:Latin:] syntax. 63868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) */ 645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void TestPropertySet(void); 65868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 66868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void TestClone(void); 67868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void TestIndexOf(void); 69868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 70868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void TestExhaustive(void); 71868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void TestCloseOver(void); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void TestEscapePattern(void); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void TestInvalidCodePoint(void); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void TestSymbolTable(void); 7990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 8090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void TestSurrogate(); 8190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void TestPosixClasses(); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void TestFreezable(); 85424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void TestSpan(); 87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 88868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void TestStringSpan(); 897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 90868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)private: 91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 92424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) UBool toPatternAux(UChar32 start, UChar32 end); 93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 94424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) UBool checkPat(const UnicodeString& source, 95424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) const UnicodeSet& testSet); 96424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 97116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch UBool checkPat(const UnicodeString& source, const UnicodeSet& testSet, const UnicodeString& pat); 98116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 99868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void _testComplement(int32_t a, UnicodeSet&, UnicodeSet&); 100b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 101868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void _testAdd(int32_t a, int32_t b, UnicodeSet&, UnicodeSet&, UnicodeSet&); 102f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void _testRetain(int32_t a, int32_t b, UnicodeSet&, UnicodeSet&, UnicodeSet&); 104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void _testRemove(int32_t a, int32_t b, UnicodeSet&, UnicodeSet&, UnicodeSet&); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 107868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void _testXor(int32_t a, int32_t b, UnicodeSet&, UnicodeSet&, UnicodeSet&); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) /** 110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * Check that ranges are monotonically increasing and non- 111116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * overlapping. 112868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) */ 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void checkCanonicalRep(const UnicodeSet& set, const UnicodeString& msg); 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 116116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * Convert a bitmask to a UnicodeSet. 117116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch */ 118116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch static UnicodeSet& bitsToSet(int32_t a, UnicodeSet&); 119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) /** 1215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * Convert a UnicodeSet to a bitmask. Only the characters 122116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * U+0000 to U+0020 are represented in the bitmask. 123f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */ 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static int32_t setToBits(const UnicodeSet& x); 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Return the representation of an inversion list based UnicodeSet 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * as a pairs list. Ranges are listed in ascending Unicode order. 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * For example, the set [a-zA-M3] is represented as "33AMaz". 130 */ 131 static UnicodeString getPairs(const UnicodeSet& set); 132 133 /** 134 * Basic consistency check for a few items. 135 * That the iterator works, and that we can create a pattern and 136 * get the same thing back 137 */ 138 void checkRoundTrip(const UnicodeSet& s); 139 140 void copyWithIterator(UnicodeSet& t, const UnicodeSet& s, UBool withRange); 141 142 UBool checkEqual(const UnicodeSet& s, const UnicodeSet& t, const char* message); 143 144 void expectContainment(const UnicodeString& pat, 145 const UnicodeString& charsIn, 146 const UnicodeString& charsOut); 147 void expectContainment(const UnicodeSet& set, 148 const UnicodeString& charsIn, 149 const UnicodeString& charsOut); 150 void expectContainment(const UnicodeSet& set, 151 const UnicodeString& setName, 152 const UnicodeString& charsIn, 153 const UnicodeString& charsOut); 154 void expectPattern(UnicodeSet& set, 155 const UnicodeString& pattern, 156 const UnicodeString& expectedPairs); 157 void expectPairs(const UnicodeSet& set, 158 const UnicodeString& expectedPairs); 159 void expectToPattern(const UnicodeSet& set, 160 const UnicodeString& expPat, 161 const char** expStrings); 162 void expectRange(const UnicodeString& label, 163 const UnicodeSet& set, 164 UChar32 start, UChar32 end); 165 void doAssert(UBool, const char*); 166 167 void testSpan(const UnicodeSetWithStrings *sets[4], const void *s, int32_t length, UBool isUTF16, 168 uint32_t whichSpans, 169 int32_t expectLimits[], int32_t &expectCount, 170 const char *testName, int32_t index); 171 void testSpan(const UnicodeSetWithStrings *sets[4], const void *s, int32_t length, UBool isUTF16, 172 uint32_t whichSpans, 173 const char *testName, int32_t index); 174 void testSpanBothUTFs(const UnicodeSetWithStrings *sets[4], 175 const UChar *s16, int32_t length16, 176 uint32_t whichSpans, 177 const char *testName, int32_t index); 178 void testSpanContents(const UnicodeSetWithStrings *sets[4], uint32_t whichSpans, const char *testName); 179 void testSpanUTF16String(const UnicodeSetWithStrings *sets[4], uint32_t whichSpans, const char *testName); 180 void testSpanUTF8String(const UnicodeSetWithStrings *sets[4], uint32_t whichSpans, const char *testName); 181 182 UConverter *openUTF8Converter(); 183 184 UConverter *utf8Cnv; 185 186public: 187 static UnicodeString escape(const UnicodeString& s); 188}; 189 190#endif 191