// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /******************************************************************** * COPYRIGHT: * Copyright (c) 1997-2015, International Business Machines Corporation and * others. All Rights Reserved. ******************************************************************** ********************************************************************** * Date Name Description * 10/20/99 alan Creation. * 03/22/2000 Madhu Added additional tests ********************************************************************** */ #ifndef _TESTUNISET #define _TESTUNISET #include "unicode/unistr.h" #include "unicode/uniset.h" #include "unicode/ucnv_err.h" #include "intltest.h" #include "cmemory.h" class UnicodeSetWithStrings; /** * UnicodeSet test */ class UnicodeSetTest: public IntlTest { public: UnicodeSetTest(); ~UnicodeSetTest(); private: void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par=NULL); void Testj2268(); /** * Test that toPattern() round trips with syntax characters and * whitespace. */ void TestToPattern(); void TestPatterns(void); void TestCategories(void); void TestAddRemove(void); void TestCloneEqualHash(void); /** * Make sure minimal representation is maintained. */ void TestMinimalRep(void); void TestAPI(void); void TestIteration(void); void TestStrings(void); void TestScriptSet(void); /** * Test the [:Latin:] syntax. */ void TestPropertySet(void); void TestClone(void); void TestIndexOf(void); void TestExhaustive(void); void TestCloseOver(void); void TestEscapePattern(void); void TestInvalidCodePoint(void); void TestSymbolTable(void); void TestSurrogate(); void TestPosixClasses(); void TestFreezable(); void TestSpan(); void TestStringSpan(); void TestUCAUnsafeBackwards(); void TestIntOverflow(); void TestUnusedCcc(); void TestDeepPattern(); private: UBool toPatternAux(UChar32 start, UChar32 end); UBool checkPat(const UnicodeString& source, const UnicodeSet& testSet); UBool checkPat(const UnicodeString& source, const UnicodeSet& testSet, const UnicodeString& pat); void _testComplement(int32_t a, UnicodeSet&, UnicodeSet&); void _testAdd(int32_t a, int32_t b, UnicodeSet&, UnicodeSet&, UnicodeSet&); void _testRetain(int32_t a, int32_t b, UnicodeSet&, UnicodeSet&, UnicodeSet&); void _testRemove(int32_t a, int32_t b, UnicodeSet&, UnicodeSet&, UnicodeSet&); void _testXor(int32_t a, int32_t b, UnicodeSet&, UnicodeSet&, UnicodeSet&); /** * Check that ranges are monotonically increasing and non- * overlapping. */ void checkCanonicalRep(const UnicodeSet& set, const UnicodeString& msg); /** * Convert a bitmask to a UnicodeSet. */ static UnicodeSet& bitsToSet(int32_t a, UnicodeSet&); /** * Convert a UnicodeSet to a bitmask. Only the characters * U+0000 to U+0020 are represented in the bitmask. */ static int32_t setToBits(const UnicodeSet& x); /** * Return the representation of an inversion list based UnicodeSet * as a pairs list. Ranges are listed in ascending Unicode order. * For example, the set [a-zA-M3] is represented as "33AMaz". */ static UnicodeString getPairs(const UnicodeSet& set); /** * Basic consistency check for a few items. * That the iterator works, and that we can create a pattern and * get the same thing back */ void checkRoundTrip(const UnicodeSet& s); void checkSerializeRoundTrip(const UnicodeSet& s, UErrorCode &ec); void copyWithIterator(UnicodeSet& t, const UnicodeSet& s, UBool withRange); UBool checkEqual(const UnicodeSet& s, const UnicodeSet& t, const char* message); void expectContainment(const UnicodeString& pat, const UnicodeString& charsIn, const UnicodeString& charsOut); void expectContainment(const UnicodeSet& set, const UnicodeString& charsIn, const UnicodeString& charsOut); void expectContainment(const UnicodeSet& set, const UnicodeString& setName, const UnicodeString& charsIn, const UnicodeString& charsOut); void expectPattern(UnicodeSet& set, const UnicodeString& pattern, const UnicodeString& expectedPairs); void expectPairs(const UnicodeSet& set, const UnicodeString& expectedPairs); void expectToPattern(const UnicodeSet& set, const UnicodeString& expPat, const char** expStrings); void expectRange(const UnicodeString& label, const UnicodeSet& set, UChar32 start, UChar32 end); void doAssert(UBool, const char*); void testSpan(const UnicodeSetWithStrings *sets[4], const void *s, int32_t length, UBool isUTF16, uint32_t whichSpans, int32_t expectLimits[], int32_t &expectCount, const char *testName, int32_t index); void testSpan(const UnicodeSetWithStrings *sets[4], const void *s, int32_t length, UBool isUTF16, uint32_t whichSpans, const char *testName, int32_t index); void testSpanBothUTFs(const UnicodeSetWithStrings *sets[4], const UChar *s16, int32_t length16, uint32_t whichSpans, const char *testName, int32_t index); void testSpanContents(const UnicodeSetWithStrings *sets[4], uint32_t whichSpans, const char *testName); void testSpanUTF16String(const UnicodeSetWithStrings *sets[4], uint32_t whichSpans, const char *testName); void testSpanUTF8String(const UnicodeSetWithStrings *sets[4], uint32_t whichSpans, const char *testName); UConverter *openUTF8Converter(); UConverter *utf8Cnv; MaybeStackArray<uint16_t, 16> serializeBuffer; public: static UnicodeString escape(const UnicodeString& s); }; #endif