1ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/******************************************************************** 2ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * COPYRIGHT: 385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * Copyright (c) 1997-2009, International Business Machines Corporation and 4ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * others. All Rights Reserved. 5ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ********************************************************************/ 6ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 7ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/utypes.h" 8ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 9ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#if !UCONFIG_NO_COLLATION 10ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 11ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/coll.h" 12ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/tblcoll.h" 13ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/unistr.h" 14ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/sortkey.h" 15ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "itercoll.h" 16ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/schriter.h" 17ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/chariter.h" 18ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/uchar.h" 19ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "cmemory.h" 20ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 21ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define ARRAY_LENGTH(array) (sizeof array / sizeof array[0]) 22ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 23ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic UErrorCode status = U_ZERO_ERROR; 24ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 25ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruCollationIteratorTest::CollationIteratorTest() 26ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru : test1("What subset of all possible test cases?", ""), 27ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru test2("has the highest probability of detecting", "") 28ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 29ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru en_us = (RuleBasedCollator *)Collator::createInstance(Locale::getUS(), status); 30ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(U_FAILURE(status)) { 31ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete en_us; 32ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru en_us = 0; 3385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho errcheckln(status, "Collator creation failed with %s", u_errorName(status)); 34ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return; 35ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 36ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 37ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 38ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 39ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruCollationIteratorTest::~CollationIteratorTest() 40ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 41ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete en_us; 42ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 43ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 44ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 45ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Test for CollationElementIterator previous and next for the whole set of 46ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * unicode characters. 47ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 48ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid CollationIteratorTest::TestUnicodeChar() 49ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 50ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru CollationElementIterator *iter; 51ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UChar codepoint; 52ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString source; 53ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 54ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru for (codepoint = 1; codepoint < 0xFFFE;) 55ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 56ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru source.remove(); 57ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 58ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru while (codepoint % 0xFF != 0) 59ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 60ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (u_isdefined(codepoint)) 61ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru source += codepoint; 62ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru codepoint ++; 63ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 64ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 65ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (u_isdefined(codepoint)) 66ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru source += codepoint; 67ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 68ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (codepoint != 0xFFFF) 69ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru codepoint ++; 70ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 71ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru iter = en_us->createCollationElementIterator(source); 72ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* A basic test to see if it's working at all */ 73ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru backAndForth(*iter); 74ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete iter; 75ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 76ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 77ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 78ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 79ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Test for CollationElementIterator.previous() 80ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 81ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @bug 4108758 - Make sure it works with contracting characters 82ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 83ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 84ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid CollationIteratorTest::TestPrevious(/* char* par */) 85ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 86ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 87ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru CollationElementIterator *iter = en_us->createCollationElementIterator(test1); 88ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 89ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // A basic test to see if it's working at all 90ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru backAndForth(*iter); 91ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete iter; 92ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 93ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // Test with a contracting character sequence 94ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString source; 95ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru RuleBasedCollator *c1 = NULL; 96ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru c1 = new RuleBasedCollator( 97ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru (UnicodeString)"&a,A < b,B < c,C, d,D < z,Z < ch,cH,Ch,CH", status); 98ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 99ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (c1 == NULL || U_FAILURE(status)) 100ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 101ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("Couldn't create a RuleBasedCollator with a contracting sequence."); 102ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete c1; 103ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return; 104ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 105ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 106ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru source = "abchdcba"; 107ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru iter = c1->createCollationElementIterator(source); 108ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru backAndForth(*iter); 109ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete iter; 110ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete c1; 111ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 112ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // Test with an expanding character sequence 113ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru RuleBasedCollator *c2 = NULL; 114ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru c2 = new RuleBasedCollator((UnicodeString)"&a < b < c/abd < d", status); 115ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 116ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (c2 == NULL || U_FAILURE(status)) 117ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 118ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("Couldn't create a RuleBasedCollator with an expanding sequence."); 119ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete c2; 120ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return; 121ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 122ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 123ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru source = "abcd"; 124ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru iter = c2->createCollationElementIterator(source); 125ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru backAndForth(*iter); 126ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete iter; 127ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete c2; 128ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 129ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // Now try both 130ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru RuleBasedCollator *c3 = NULL; 131ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru c3 = new RuleBasedCollator((UnicodeString)"&a < b < c/aba < d < z < ch", status); 132ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 133ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (c3 == NULL || U_FAILURE(status)) 134ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 135ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("Couldn't create a RuleBasedCollator with both an expanding and a contracting sequence."); 136ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete c3; 137ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return; 138ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 139ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 140ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru source = "abcdbchdc"; 141ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru iter = c3->createCollationElementIterator(source); 142ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru backAndForth(*iter); 143ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete iter; 144ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete c3; 145ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 146ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru status=U_ZERO_ERROR; 147ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru source= CharsToUnicodeString("\\u0e41\\u0e02\\u0e41\\u0e02\\u0e27abc"); 148ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 149ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Collator *c4 = Collator::createInstance(Locale("th", "TH", ""), status); 150ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(U_FAILURE(status)){ 151ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("Couldn't create a collator"); 152ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 153ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru iter = ((RuleBasedCollator*)c4)->createCollationElementIterator(source); 154ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru backAndForth(*iter); 155ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete iter; 156ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete c4; 157ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 158ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru source= CharsToUnicodeString("\\u0061\\u30CF\\u3099\\u30FC"); 159ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Collator *c5 = Collator::createInstance(Locale("ja", "JP", ""), status); 160ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 161ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru iter = ((RuleBasedCollator*)c5)->createCollationElementIterator(source); 162ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(U_FAILURE(status)){ 163ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("Couldn't create Japanese collator\n"); 164ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 165ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru backAndForth(*iter); 166ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete iter; 167ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete c5; 168ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 169ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 170ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 171ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Test for getOffset() and setOffset() 172ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 173ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid CollationIteratorTest::TestOffset(/* char* par */) 174ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 175ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru CollationElementIterator *iter = en_us->createCollationElementIterator(test1); 176ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 177ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // testing boundaries 178ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru iter->setOffset(0, status); 179ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_FAILURE(status) || iter->previous(status) != UCOL_NULLORDER) { 180ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("Error: After setting offset to 0, we should be at the end " 181ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "of the backwards iteration"); 182ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 183ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru iter->setOffset(test1.length(), status); 184ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_FAILURE(status) || iter->next(status) != UCOL_NULLORDER) { 185ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("Error: After setting offset to end of the string, we should " 186ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "be at the end of the backwards iteration"); 187ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 188ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 189ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // Run all the way through the iterator, then get the offset 190ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t orderLength = 0; 19185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho Order *orders = getOrders(*iter, orderLength); 192ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 193ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t offset = iter->getOffset(); 194ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 195ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (offset != test1.length()) 196ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 197ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString msg1("offset at end != length: "); 198ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString msg2(" vs "); 199ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 200ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln(msg1 + offset + msg2 + test1.length()); 201ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 202ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 203ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // Now set the offset back to the beginning and see if it works 204ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru CollationElementIterator *pristine = en_us->createCollationElementIterator(test1); 205ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 206ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru iter->setOffset(0, status); 207ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 208ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_FAILURE(status)) 209ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 210ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("setOffset failed."); 211ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 212ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru else 213ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 214ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru assertEqual(*iter, *pristine); 215ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 216ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 217ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // TODO: try iterating halfway through a messy string. 218ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 219ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete pristine; 220ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete[] orders; 221ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete iter; 222ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 223ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 224ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 225ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Test for setText() 226ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 227ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid CollationIteratorTest::TestSetText(/* char* par */) 228ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 229ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru CollationElementIterator *iter1 = en_us->createCollationElementIterator(test1); 230ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru CollationElementIterator *iter2 = en_us->createCollationElementIterator(test2); 231ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 232ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 233ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // Run through the second iterator just to exercise it 234ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t c = iter2->next(status); 235ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t i = 0; 236ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 237ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru while ( ++i < 10 && c != CollationElementIterator::NULLORDER) 238ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 239ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_FAILURE(status)) 240ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 241ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("iter2->next() returned an error."); 242ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete iter2; 243ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete iter1; 244ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 245ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 246ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru c = iter2->next(status); 247ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 248ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 249ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // Now set it to point to the same string as the first iterator 250ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru iter2->setText(test1, status); 251ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 252ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_FAILURE(status)) 253ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 254ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("call to iter2->setText(test1) failed."); 255ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 256ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru else 257ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 258ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru assertEqual(*iter1, *iter2); 259ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 260ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru iter1->reset(); 261ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru //now use the overloaded setText(ChracterIterator&, UErrorCode) function to set the text 262ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru CharacterIterator* chariter = new StringCharacterIterator(test1); 263ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru iter2->setText(*chariter, status); 264ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_FAILURE(status)) 265ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 266ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("call to iter2->setText(chariter(test1)) failed."); 267ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 268ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru else 269ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 270ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru assertEqual(*iter1, *iter2); 271ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 272ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 273ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // test for an empty string 274ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString empty(""); 275ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru iter1->setText(empty, status); 276ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_FAILURE(status) 277ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru || iter1->next(status) != (int32_t)UCOL_NULLORDER) { 278ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("Empty string should have no CEs."); 279ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 280ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ((StringCharacterIterator *)chariter)->setText(empty); 281ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru iter1->setText(*chariter, status); 282ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_FAILURE(status) 283ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru || iter1->next(status) != (int32_t)UCOL_NULLORDER) { 284ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("Empty string should have no CEs."); 285ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 286ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete chariter; 287ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete iter2; 288ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete iter1; 289ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 290ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 291ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** @bug 4108762 292ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Test for getMaxExpansion() 293ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 294ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid CollationIteratorTest::TestMaxExpansion(/* char* par */) 295ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 296ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 297ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString rule("&a < ab < c/aba < d < z < ch"); 298ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru RuleBasedCollator *coll = new RuleBasedCollator(rule, status); 299ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UChar ch = 0; 300ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString str(ch); 301ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 302ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru CollationElementIterator *iter = coll->createCollationElementIterator(str); 303ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 304ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru while (ch < 0xFFFF && U_SUCCESS(status)) { 305ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int count = 1; 306ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uint32_t order; 307ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ch ++; 308ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString str(ch); 309ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru iter->setText(str, status); 310ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru order = iter->previous(status); 311ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 312ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* thai management */ 313ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (CollationElementIterator::isIgnorable(order)) 314ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru order = iter->previous(status); 315ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 316ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru while (U_SUCCESS(status) 317ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru && iter->previous(status) != (int32_t)UCOL_NULLORDER) 318ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 319ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru count ++; 320ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 321ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 322ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_FAILURE(status) && iter->getMaxExpansion(order) < count) { 323ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("Failure at codepoint %d, maximum expansion count < %d\n", 324ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ch, count); 325ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 326ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 327ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 328ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete iter; 329ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete coll; 330ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 331ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 332ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* 333ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @bug 4157299 334ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 335ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid CollationIteratorTest::TestClearBuffers(/* char* par */) 336ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 337ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 338ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru RuleBasedCollator *c = new RuleBasedCollator((UnicodeString)"&a < b < c & ab = d", status); 339ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 340ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (c == NULL || U_FAILURE(status)) 341ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 342ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("Couldn't create a RuleBasedCollator."); 343ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete c; 344ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return; 345ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 346ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 347ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString source("abcd"); 348ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru CollationElementIterator *i = c->createCollationElementIterator(source); 349ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t e0 = i->next(status); // save the first collation element 350ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 351ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_FAILURE(status)) 352ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 353ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("call to i->next() failed. err=%s", u_errorName(status)); 354ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 355ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru else 356ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 357ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru i->setOffset(3, status); // go to the expanding character 358ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 359ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_FAILURE(status)) 360ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 361ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("call to i->setOffset(3) failed. err=%s", u_errorName(status)); 362ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 363ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru else 364ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 365ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru i->next(status); // but only use up half of it 366ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 367ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_FAILURE(status)) 368ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 369ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("call to i->next() failed. err=%s", u_errorName(status)); 370ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 371ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru else 372ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 373ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru i->setOffset(0, status); // go back to the beginning 374ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 375ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_FAILURE(status)) 376ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 377ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("call to i->setOffset(0) failed. err=%s", u_errorName(status)); 378ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 379ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru else 380ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 381ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t e = i->next(status); // and get this one again 382ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 383ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_FAILURE(status)) 384ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 385ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("call to i->next() failed. err=%s", u_errorName(status)); 386ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 387ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru else if (e != e0) 388ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 389ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("got 0x%X, expected 0x%X", e, e0); 390ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 391ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 392ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 393ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 394ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 395ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 396ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete i; 397ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete c; 398ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 399ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 400ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 401ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Testing the assignment operator 402ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 403ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid CollationIteratorTest::TestAssignment() 404ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 405ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 406ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru RuleBasedCollator *coll = 407ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru (RuleBasedCollator *)Collator::createInstance(status); 408ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 409ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (coll == NULL || U_FAILURE(status)) 410ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 411ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("Couldn't create a default collator."); 412ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return; 413ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 414ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 415ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString source("abcd"); 416ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru CollationElementIterator *iter1 = 417ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru coll->createCollationElementIterator(source); 418ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 419ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru CollationElementIterator iter2 = *iter1; 420ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 421ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (*iter1 != iter2) { 422ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("Fail collation iterator assignment does not produce the same elements"); 423ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 424ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 425ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru CollationElementIterator iter3(*iter1); 426ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 427ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (*iter1 != iter3) { 428ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("Fail collation iterator copy constructor does not produce the same elements"); 429ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 430ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 431ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru source = CharsToUnicodeString("a\\u0300\\u0325"); 432ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru coll->setAttribute(UCOL_NORMALIZATION_MODE, UCOL_ON, status); 433ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru CollationElementIterator *iter4 434ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru = coll->createCollationElementIterator(source); 435ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru CollationElementIterator iter5(*iter4); 436ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (*iter4 != iter5) { 437ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("collation iterator assignment does not produce the same elements"); 438ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 439ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru iter4->next(status); 440ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_FAILURE(status) || *iter4 == iter5) { 441ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("collation iterator not equal"); 442ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 443ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru iter5.next(status); 444ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_FAILURE(status) || *iter4 != iter5) { 445ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("collation iterator equal"); 446ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 447ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru iter4->next(status); 448ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_FAILURE(status) || *iter4 == iter5) { 449ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("collation iterator not equal"); 450ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 451ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru iter5.next(status); 452ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_FAILURE(status) || *iter4 != iter5) { 453ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("collation iterator equal"); 454ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 455ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru CollationElementIterator iter6(*iter4); 456ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (*iter4 != iter6) { 457ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("collation iterator equal"); 458ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 459ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru iter4->next(status); 460ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_FAILURE(status) || *iter4 == iter5) { 461ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("collation iterator not equal"); 462ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 463ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru iter5.next(status); 464ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_FAILURE(status) || *iter4 != iter5) { 465ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("collation iterator equal"); 466ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 467ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru iter4->next(status); 468ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_FAILURE(status) || *iter4 == iter5) { 469ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("collation iterator not equal"); 470ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 471ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru iter5.next(status); 472ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_FAILURE(status) || *iter4 != iter5) { 473ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("collation iterator equal"); 474ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 475ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete iter1; 476ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete iter4; 477ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete coll; 478ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 479ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 480ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 481ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Testing the constructors 482ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 483ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid CollationIteratorTest::TestConstructors() 484ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 485ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 486ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru RuleBasedCollator *coll = 487ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru (RuleBasedCollator *)Collator::createInstance(status); 488ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (coll == NULL || U_FAILURE(status)) 489ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 490ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("Couldn't create a default collator."); 491ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return; 492ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 493ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 494ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // testing protected constructor with character iterator as argument 495ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru StringCharacterIterator chariter(test1); 496ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru CollationElementIterator *iter1 = 497ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru coll->createCollationElementIterator(chariter); 498ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_FAILURE(status)) { 499ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("Couldn't create collation element iterator with character iterator."); 500ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return; 501ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 502ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru CollationElementIterator *iter2 = 503ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru coll->createCollationElementIterator(test1); 504ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 505ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // initially the 2 collation element iterators should be the same 506ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (*iter1 != *iter1 || *iter2 != *iter2 || *iter1 != *iter2 507ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru || *iter2 != *iter1) { 508ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("CollationElementIterators constructed with the same string data should be the same at the start"); 509ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 510ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru assertEqual(*iter1, *iter2); 511ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 512ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete iter1; 513ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete iter2; 514ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 515ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // tests empty strings 516ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString empty(""); 517ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru iter1 = coll->createCollationElementIterator(empty); 518ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru chariter.setText(empty); 519ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru iter2 = coll->createCollationElementIterator(chariter); 520ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (*iter1 != *iter1 || *iter2 != *iter2 || *iter1 != *iter2 521ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru || *iter2 != *iter1) { 522ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("CollationElementIterators constructed with the same string data should be the same at the start"); 523ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 524ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (iter1->next(status) != (int32_t)UCOL_NULLORDER) { 525ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("Empty string should have no CEs."); 526ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 527ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (iter2->next(status) != (int32_t)UCOL_NULLORDER) { 528ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("Empty string should have no CEs."); 529ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 530ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete iter1; 531ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete iter2; 532ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete coll; 533ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 534ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 535ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 536ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Testing the strength order 537ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 538ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid CollationIteratorTest::TestStrengthOrder() 539ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 540ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int order = 0x0123ABCD; 541ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 542ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 543ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru RuleBasedCollator *coll = 544ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru (RuleBasedCollator *)Collator::createInstance(status); 545ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (coll == NULL || U_FAILURE(status)) 546ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 547ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("Couldn't create a default collator."); 548ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return; 549ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 550ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 551ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru coll->setStrength(Collator::PRIMARY); 552ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru CollationElementIterator *iter = 553ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru coll->createCollationElementIterator(test1); 554ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 555ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (iter == NULL) { 556ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("Couldn't create a collation element iterator from default collator"); 557ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return; 558ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 559ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 560ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (iter->strengthOrder(order) != 0x01230000) { 561ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("Strength order for a primary strength collator should be the first 2 bytes"); 562ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return; 563ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 564ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 565ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru coll->setStrength(Collator::SECONDARY); 566ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (iter->strengthOrder(order) != 0x0123AB00) { 567ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("Strength order for a secondary strength collator should be the third byte"); 568ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return; 569ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 570ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 571ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru coll->setStrength(Collator::TERTIARY); 572ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (iter->strengthOrder(order) != order) { 573ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("Strength order for a tertiary strength collator should be the third byte"); 574ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return; 575ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 576ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete iter; 577ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete coll; 578ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 579ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 580ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 581ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Return a string containing all of the collation orders 582ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * returned by calls to next on the specified iterator 583ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 584ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruUnicodeString &CollationIteratorTest::orderString(CollationElementIterator &iter, UnicodeString &target) 585ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 586ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t order; 587ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 588ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 589ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru while ((order = iter.next(status)) != CollationElementIterator::NULLORDER) 590ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 591ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru target += "0x"; 592ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru appendHex(order, 8, target); 593ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru target += " "; 594ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 595ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 596ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return target; 597ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 598ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 599ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid CollationIteratorTest::assertEqual(CollationElementIterator &i1, CollationElementIterator &i2) 600ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 601ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t c1, c2, count = 0; 602ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 603ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 604ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru do 605ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 606ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru c1 = i1.next(status); 607ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru c2 = i2.next(status); 608ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 609ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (c1 != c2) 610ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 611ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln(" %d: strength(0x%X) != strength(0x%X)", count, c1, c2); 612ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru break; 613ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 614ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 615ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru count += 1; 616ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 617ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru while (c1 != CollationElementIterator::NULLORDER); 618ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 619ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 620ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid CollationIteratorTest::runIndexedTest(int32_t index, UBool exec, const char* &name, char* /*par*/) 621ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 622ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (exec) 623ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 624ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("Collation Iteration Tests: "); 625ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 626ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 627ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(en_us) { 628ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru switch (index) 629ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 630ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru case 0: name = "TestPrevious"; if (exec) TestPrevious(/* par */); break; 631ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru case 1: name = "TestOffset"; if (exec) TestOffset(/* par */); break; 632ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru case 2: name = "TestSetText"; if (exec) TestSetText(/* par */); break; 633ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru case 3: name = "TestMaxExpansion"; if (exec) TestMaxExpansion(/* par */); break; 634ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru case 4: name = "TestClearBuffers"; if (exec) TestClearBuffers(/* par */); break; 635ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru case 5: name = "TestUnicodeChar"; if (exec) TestUnicodeChar(/* par */); break; 636ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru case 6: name = "TestAssignment"; if (exec) TestAssignment(/* par */); break; 637ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru case 7: name = "TestConstructors"; if (exec) TestConstructors(/* par */); break; 638ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru case 8: name = "TestStrengthOrder"; if (exec) TestStrengthOrder(/* par */); break; 639ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru default: name = ""; break; 640ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 641ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else { 64285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho dataerrln("Class iterator not instantiated"); 643ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru name = ""; 644ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 645ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 646ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 647ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_COLLATION */ 648