1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru******************************************************************************* 3b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 459d709d503bab6e2b61931737e662dd293b40578ccornelius* Copyright (C) 2002-2013, International Business Machines 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Corporation and others. All Rights Reserved. 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru******************************************************************************* 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* file name: strcase.cpp 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* encoding: US-ASCII 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* tab size: 8 (not used) 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* indentation:4 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* created on: 2002mar12 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* created by: Markus W. Scherer 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Test file for string casing C++ API functions. 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/uchar.h" 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ures.h" 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/uloc.h" 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/locid.h" 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ubrk.h" 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/unistr.h" 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ucasemap.h" 2683a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius#include "ucase.h" 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "ustrtest.h" 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/tstdtmod.h" 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0])) 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruStringCaseTest::~StringCaseTest() {} 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruStringCaseTest::runIndexedTest(int32_t index, UBool exec, const char *&name, char * /*par*/) { 3683a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius if(exec) { 3783a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius logln("TestSuite StringCaseTest: "); 3883a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius } 3983a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius TESTCASE_AUTO_BEGIN; 4083a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius TESTCASE_AUTO(TestCaseConversion); 4150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if !UCONFIG_NO_BREAK_ITERATION && !UCONFIG_NO_FILE_IO && !UCONFIG_NO_LEGACY_CONVERSION 4283a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius TESTCASE_AUTO(TestCasing); 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 4483a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius TESTCASE_AUTO(TestFullCaseFoldingIterator); 4583a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius TESTCASE_AUTO_END; 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruStringCaseTest::TestCaseConversion() 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar uppercaseGreek[] = 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 0x399, 0x395, 0x3a3, 0x3a5, 0x3a3, 0x20, 0x03a7, 0x3a1, 0x399, 0x3a3, 0x3a4, 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x39f, 0x3a3, 0 }; 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // "IESUS CHRISTOS" 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar lowercaseGreek[] = 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 0x3b9, 0x3b5, 0x3c3, 0x3c5, 0x3c2, 0x20, 0x03c7, 0x3c1, 0x3b9, 0x3c3, 0x3c4, 58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x3bf, 0x3c2, 0 }; 59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // "iesus christos" 60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar lowercaseTurkish[] = 62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 0x69, 0x73, 0x74, 0x61, 0x6e, 0x62, 0x75, 0x6c, 0x2c, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6f, 63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x0131, 0x6e, 0x6f, 0x70, 0x6c, 0x65, 0x21, 0 }; 64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar uppercaseTurkish[] = 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 0x54, 0x4f, 0x50, 0x4b, 0x41, 0x50, 0x49, 0x20, 0x50, 0x41, 0x4c, 0x41, 0x43, 0x45, 0x2c, 0x20, 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x0130, 0x53, 0x54, 0x41, 0x4e, 0x42, 0x55, 0x4c, 0 }; 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString expectedResult; 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString test3; 71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test3 += (UChar32)0x0130; 73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test3 += "STANBUL, NOT CONSTANTINOPLE!"; 74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString test4(test3); 76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test4.toLower(Locale("")); 77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectedResult = UnicodeString("i\\u0307stanbul, not constantinople!", "").unescape(); 78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (test4 != expectedResult) 79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("1. toLower failed: expected \"" + expectedResult + "\", got \"" + test4 + "\"."); 80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test4 = test3; 82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test4.toLower(Locale("tr", "TR")); 83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectedResult = lowercaseTurkish; 84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (test4 != expectedResult) 85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("2. toLower failed: expected \"" + expectedResult + "\", got \"" + test4 + "\"."); 86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test3 = "topkap"; 88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test3 += (UChar32)0x0131; 89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test3 += " palace, istanbul"; 90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test4 = test3; 91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test4.toUpper(Locale("")); 93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectedResult = "TOPKAPI PALACE, ISTANBUL"; 94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (test4 != expectedResult) 95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("toUpper failed: expected \"" + expectedResult + "\", got \"" + test4 + "\"."); 96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test4 = test3; 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test4.toUpper(Locale("tr", "TR")); 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectedResult = uppercaseTurkish; 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (test4 != expectedResult) 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("toUpper failed: expected \"" + expectedResult + "\", got \"" + test4 + "\"."); 102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test3 = CharsToUnicodeString("S\\u00FC\\u00DFmayrstra\\u00DFe"); 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test3.toUpper(Locale("de", "DE")); 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectedResult = CharsToUnicodeString("S\\u00DCSSMAYRSTRASSE"); 107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (test3 != expectedResult) 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("toUpper failed: expected \"" + expectedResult + "\", got \"" + test3 + "\"."); 109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test4.replace(0, test4.length(), uppercaseGreek); 111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test4.toLower(Locale("el", "GR")); 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectedResult = lowercaseGreek; 114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (test4 != expectedResult) 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("toLower failed: expected \"" + expectedResult + "\", got \"" + test4 + "\"."); 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test4.replace(0, test4.length(), lowercaseGreek); 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test4.toUpper(); 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectedResult = uppercaseGreek; 121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (test4 != expectedResult) 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("toUpper failed: expected \"" + expectedResult + "\", got \"" + test4 + "\"."); 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // more string case mapping tests with the new implementation 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru beforeLower[]= { 0x61, 0x42, 0x49, 0x3a3, 0xdf, 0x3a3, 0x2f, 0xd93f, 0xdfff }, 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lowerRoot[]= { 0x61, 0x62, 0x69, 0x3c3, 0xdf, 0x3c2, 0x2f, 0xd93f, 0xdfff }, 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lowerTurkish[]={ 0x61, 0x62, 0x131, 0x3c3, 0xdf, 0x3c2, 0x2f, 0xd93f, 0xdfff }, 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru beforeUpper[]= { 0x61, 0x42, 0x69, 0x3c2, 0xdf, 0x3c3, 0x2f, 0xfb03, 0xfb03, 0xfb03, 0xd93f, 0xdfff }, 133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru upperRoot[]= { 0x41, 0x42, 0x49, 0x3a3, 0x53, 0x53, 0x3a3, 0x2f, 0x46, 0x46, 0x49, 0x46, 0x46, 0x49, 0x46, 0x46, 0x49, 0xd93f, 0xdfff }, 134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru upperTurkish[]={ 0x41, 0x42, 0x130, 0x3a3, 0x53, 0x53, 0x3a3, 0x2f, 0x46, 0x46, 0x49, 0x46, 0x46, 0x49, 0x46, 0x46, 0x49, 0xd93f, 0xdfff }, 135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru beforeMiniUpper[]= { 0xdf, 0x61 }, 137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru miniUpper[]= { 0x53, 0x53, 0x41 }; 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s; 140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* lowercase with root locale */ 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s=UnicodeString(FALSE, beforeLower, (int32_t)(sizeof(beforeLower)/U_SIZEOF_UCHAR)); 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s.toLower(""); 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( s.length()!=(sizeof(lowerRoot)/U_SIZEOF_UCHAR) || 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s!=UnicodeString(FALSE, lowerRoot, s.length()) 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("error in toLower(root locale)=\"" + s + "\" expected \"" + UnicodeString(FALSE, lowerRoot, (int32_t)(sizeof(lowerRoot)/U_SIZEOF_UCHAR)) + "\""); 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* lowercase with turkish locale */ 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s=UnicodeString(FALSE, beforeLower, (int32_t)(sizeof(beforeLower)/U_SIZEOF_UCHAR)); 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s.setCharAt(0, beforeLower[0]).toLower(Locale("tr")); 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( s.length()!=(sizeof(lowerTurkish)/U_SIZEOF_UCHAR) || 154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s!=UnicodeString(FALSE, lowerTurkish, s.length()) 155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("error in toLower(turkish locale)=\"" + s + "\" expected \"" + UnicodeString(FALSE, lowerTurkish, (int32_t)(sizeof(lowerTurkish)/U_SIZEOF_UCHAR)) + "\""); 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* uppercase with root locale */ 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s=UnicodeString(FALSE, beforeUpper, (int32_t)(sizeof(beforeUpper)/U_SIZEOF_UCHAR)); 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s.setCharAt(0, beforeUpper[0]).toUpper(Locale("")); 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( s.length()!=(sizeof(upperRoot)/U_SIZEOF_UCHAR) || 163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s!=UnicodeString(FALSE, upperRoot, s.length()) 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("error in toUpper(root locale)=\"" + s + "\" expected \"" + UnicodeString(FALSE, upperRoot, (int32_t)(sizeof(upperRoot)/U_SIZEOF_UCHAR)) + "\""); 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* uppercase with turkish locale */ 169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s=UnicodeString(FALSE, beforeUpper, (int32_t)(sizeof(beforeUpper)/U_SIZEOF_UCHAR)); 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s.toUpper(Locale("tr")); 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( s.length()!=(sizeof(upperTurkish)/U_SIZEOF_UCHAR) || 172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s!=UnicodeString(FALSE, upperTurkish, s.length()) 173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("error in toUpper(turkish locale)=\"" + s + "\" expected \"" + UnicodeString(FALSE, upperTurkish, (int32_t)(sizeof(upperTurkish)/U_SIZEOF_UCHAR)) + "\""); 175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* uppercase a short string with root locale */ 178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s=UnicodeString(FALSE, beforeMiniUpper, (int32_t)(sizeof(beforeMiniUpper)/U_SIZEOF_UCHAR)); 179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s.setCharAt(0, beforeMiniUpper[0]).toUpper(""); 180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( s.length()!=(sizeof(miniUpper)/U_SIZEOF_UCHAR) || 181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s!=UnicodeString(FALSE, miniUpper, s.length()) 182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("error in toUpper(root locale)=\"" + s + "\" expected \"" + UnicodeString(FALSE, miniUpper, (int32_t)(sizeof(miniUpper)/U_SIZEOF_UCHAR)) + "\""); 184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // test some supplementary characters (>= Unicode 3.1) 188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString t; 190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString 192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru deseretInput=UnicodeString("\\U0001043C\\U00010414", "").unescape(), 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru deseretLower=UnicodeString("\\U0001043C\\U0001043C", "").unescape(), 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru deseretUpper=UnicodeString("\\U00010414\\U00010414", "").unescape(); 195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (t=deseretInput).toLower(); 196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(t!=deseretLower) { 197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("error lowercasing Deseret (plane 1) characters"); 198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (t=deseretInput).toUpper(); 200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(t!=deseretUpper) { 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("error uppercasing Deseret (plane 1) characters"); 202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // test some more cases that looked like problems 206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString t; 208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString 210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ljInput=UnicodeString("ab'cD \\uFB00i\\u0131I\\u0130 \\u01C7\\u01C8\\u01C9 \\U0001043C\\U00010414", "").unescape(), 211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ljLower=UnicodeString("ab'cd \\uFB00i\\u0131ii\\u0307 \\u01C9\\u01C9\\u01C9 \\U0001043C\\U0001043C", "").unescape(), 212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ljUpper=UnicodeString("AB'CD FFIII\\u0130 \\u01C7\\u01C7\\u01C7 \\U00010414\\U00010414", "").unescape(); 213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (t=ljInput).toLower("en"); 214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(t!=ljLower) { 215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("error lowercasing LJ characters"); 216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (t=ljInput).toUpper("en"); 218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(t!=ljUpper) { 219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("error uppercasing LJ characters"); 220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_NORMALIZATION 224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // some context-sensitive casing depends on normalization data being present 225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Unicode 3.1.1 SpecialCasing tests 227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString t; 229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // sigmas preceded and/or followed by cased letters 231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString 232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sigmas=UnicodeString("i\\u0307\\u03a3\\u0308j \\u0307\\u03a3\\u0308j i\\u00ad\\u03a3\\u0308 \\u0307\\u03a3\\u0308 ", "").unescape(), 233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sigmasLower=UnicodeString("i\\u0307\\u03c3\\u0308j \\u0307\\u03c3\\u0308j i\\u00ad\\u03c2\\u0308 \\u0307\\u03c3\\u0308 ", "").unescape(), 234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sigmasUpper=UnicodeString("I\\u0307\\u03a3\\u0308J \\u0307\\u03a3\\u0308J I\\u00ad\\u03a3\\u0308 \\u0307\\u03a3\\u0308 ", "").unescape(); 235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (t=sigmas).toLower(); 237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(t!=sigmasLower) { 238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("error in sigmas.toLower()=\"" + t + "\" expected \"" + sigmasLower + "\""); 239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (t=sigmas).toUpper(Locale("")); 242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(t!=sigmasUpper) { 243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("error in sigmas.toUpper()=\"" + t + "\" expected \"" + sigmasUpper + "\""); 244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // turkish & azerbaijani dotless i & dotted I 247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // remove dot above if there was a capital I before and there are no more accents above 248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString 249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dots=UnicodeString("I \\u0130 I\\u0307 I\\u0327\\u0307 I\\u0301\\u0307 I\\u0327\\u0307\\u0301", "").unescape(), 250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dotsTurkish=UnicodeString("\\u0131 i i i\\u0327 \\u0131\\u0301\\u0307 i\\u0327\\u0301", "").unescape(), 251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dotsDefault=UnicodeString("i i\\u0307 i\\u0307 i\\u0327\\u0307 i\\u0301\\u0307 i\\u0327\\u0307\\u0301", "").unescape(); 252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (t=dots).toLower("tr"); 254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(t!=dotsTurkish) { 255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("error in dots.toLower(tr)=\"" + t + "\" expected \"" + dotsTurkish + "\""); 256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (t=dots).toLower("de"); 259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(t!=dotsDefault) { 260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("error in dots.toLower(de)=\"" + t + "\" expected \"" + dotsDefault + "\""); 261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // more Unicode 3.1.1 tests 265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString t; 267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // lithuanian dot above in uppercasing 269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString 270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dots=UnicodeString("a\\u0307 \\u0307 i\\u0307 j\\u0327\\u0307 j\\u0301\\u0307", "").unescape(), 271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dotsLithuanian=UnicodeString("A\\u0307 \\u0307 I J\\u0327 J\\u0301\\u0307", "").unescape(), 272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dotsDefault=UnicodeString("A\\u0307 \\u0307 I\\u0307 J\\u0327\\u0307 J\\u0301\\u0307", "").unescape(); 273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (t=dots).toUpper("lt"); 275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(t!=dotsLithuanian) { 276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("error in dots.toUpper(lt)=\"" + t + "\" expected \"" + dotsLithuanian + "\""); 277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (t=dots).toUpper("de"); 280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(t!=dotsDefault) { 281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("error in dots.toUpper(de)=\"" + t + "\" expected \"" + dotsDefault + "\""); 282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // lithuanian adds dot above to i in lowercasing if there are more above accents 285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString 286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i=UnicodeString("I I\\u0301 J J\\u0301 \\u012e \\u012e\\u0301 \\u00cc\\u00cd\\u0128", "").unescape(), 287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru iLithuanian=UnicodeString("i i\\u0307\\u0301 j j\\u0307\\u0301 \\u012f \\u012f\\u0307\\u0301 i\\u0307\\u0300i\\u0307\\u0301i\\u0307\\u0303", "").unescape(), 288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru iDefault=UnicodeString("i i\\u0301 j j\\u0301 \\u012f \\u012f\\u0301 \\u00ec\\u00ed\\u0129", "").unescape(); 289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (t=i).toLower("lt"); 291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(t!=iLithuanian) { 292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("error in i.toLower(lt)=\"" + t + "\" expected \"" + iLithuanian + "\""); 293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (t=i).toLower("de"); 296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(t!=iDefault) { 297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("error in i.toLower(de)=\"" + t + "\" expected \"" + iDefault + "\""); 298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // test case folding 304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString 306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s=UnicodeString("A\\u00df\\u00b5\\ufb03\\U0001040c\\u0130\\u0131", "").unescape(), 307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru f=UnicodeString("ass\\u03bcffi\\U00010434i\\u0307\\u0131", "").unescape(), 308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru g=UnicodeString("ass\\u03bcffi\\U00010434i\\u0131", "").unescape(), 309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru t; 310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (t=s).foldCase(); 312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(f!=t) { 313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("error in foldCase(\"" + s + "\", default)=\"" + t + "\" but expected \"" + f + "\""); 314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // alternate handling for dotted I/dotless i (U+0130, U+0131) 317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (t=s).foldCase(U_FOLD_CASE_EXCLUDE_SPECIAL_I); 318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(g!=t) { 319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("error in foldCase(\"" + s + "\", U_FOLD_CASE_EXCLUDE_SPECIAL_I)=\"" + t + "\" but expected \"" + g + "\""); 320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// data-driven case mapping tests ------------------------------------------ *** 325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruenum { 327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_LOWER, 328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_UPPER, 329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_TITLE, 330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_FOLD, 331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_COUNT 332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// names of TestData children in casing.txt 335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char *const dataNames[TEST_COUNT+1]={ 336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "lowercasing", 337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "uppercasing", 338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "titlecasing", 339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "casefolding", 340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "" 341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruStringCaseTest::TestCasingImpl(const UnicodeString &input, 345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UnicodeString &output, 346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t whichCase, 347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru void *iter, const char *localeID, uint32_t options) { 348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // UnicodeString 349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString result; 350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *name; 351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale locale(localeID); 352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=input; 354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch(whichCase) { 355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case TEST_LOWER: 356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name="toLower"; 357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result.toLower(locale); 358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case TEST_UPPER: 360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name="toUpper"; 361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result.toUpper(locale); 362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_BREAK_ITERATION 364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case TEST_TITLE: 365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name="toTitle"; 366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result.toTitle((BreakIterator *)iter, locale, options); 367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case TEST_FOLD: 370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name="foldCase"; 371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result.foldCase(options); 372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default: 374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name=""; 375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; // won't happen 376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result!=output) { 3786d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("error: UnicodeString.%s() got a wrong result for a test case from casing.res", name); 379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_BREAK_ITERATION 381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(whichCase==TEST_TITLE && options==0) { 382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=input; 383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result.toTitle((BreakIterator *)iter, locale); 384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result!=output) { 3856d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("error: UnicodeString.toTitle(options=0) got a wrong result for a test case from casing.res"); 386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // UTF-8 391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char utf8In[100], utf8Out[100]; 392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t utf8InLength, utf8OutLength, resultLength; 393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *buffer; 394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 39550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho IcuTestErrorCode errorCode(*this, "TestCasingImpl"); 39650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalUCaseMapPointer csm(ucasemap_open(localeID, options, errorCode)); 397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_BREAK_ITERATION 398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(iter!=NULL) { 399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Clone the break iterator so that the UCaseMap can safely adopt it. 40059d709d503bab6e2b61931737e662dd293b40578ccornelius UBreakIterator *clone=ubrk_safeClone((UBreakIterator *)iter, NULL, NULL, errorCode); 40150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ucasemap_setBreakIterator(csm.getAlias(), clone, errorCode); 402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 40550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho u_strToUTF8(utf8In, (int32_t)sizeof(utf8In), &utf8InLength, input.getBuffer(), input.length(), errorCode); 406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch(whichCase) { 407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case TEST_LOWER: 408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name="ucasemap_utf8ToLower"; 40950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho utf8OutLength=ucasemap_utf8ToLower(csm.getAlias(), 410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru utf8Out, (int32_t)sizeof(utf8Out), 41150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho utf8In, utf8InLength, errorCode); 412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case TEST_UPPER: 414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name="ucasemap_utf8ToUpper"; 41550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho utf8OutLength=ucasemap_utf8ToUpper(csm.getAlias(), 416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru utf8Out, (int32_t)sizeof(utf8Out), 41750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho utf8In, utf8InLength, errorCode); 418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_BREAK_ITERATION 420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case TEST_TITLE: 421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name="ucasemap_utf8ToTitle"; 42250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho utf8OutLength=ucasemap_utf8ToTitle(csm.getAlias(), 423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru utf8Out, (int32_t)sizeof(utf8Out), 42450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho utf8In, utf8InLength, errorCode); 425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case TEST_FOLD: 428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name="ucasemap_utf8FoldCase"; 42950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho utf8OutLength=ucasemap_utf8FoldCase(csm.getAlias(), 430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru utf8Out, (int32_t)sizeof(utf8Out), 43150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho utf8In, utf8InLength, errorCode); 432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default: 434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name=""; 435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru utf8OutLength=0; 436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; // won't happen 437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer=result.getBuffer(utf8OutLength); 43950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho u_strFromUTF8(buffer, result.getCapacity(), &resultLength, utf8Out, utf8OutLength, errorCode); 44050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho result.releaseBuffer(errorCode.isSuccess() ? resultLength : 0); 441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 44250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(errorCode.isFailure()) { 4436d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(errorCode, "error: %s() got an error for a test case from casing.res - %s", name, u_errorName(errorCode)); 44450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errorCode.reset(); 445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if(result!=output) { 446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("error: %s() got a wrong result for a test case from casing.res", name); 447c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru errln("expected \"" + output + "\" got \"" + result + "\"" ); 448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruStringCaseTest::TestCasing() { 453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 45450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if !UCONFIG_NO_BREAK_ITERATION 45550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalUBreakIteratorPointer iter; 45650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif 457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char cLocaleID[100]; 458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString locale, input, output, optionsString, result; 459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t options; 460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t whichCase, type; 46150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalPointer<TestDataModule> driver(TestDataModule::getTestDataModule("casing", *this, status)); 462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_SUCCESS(status)) { 463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(whichCase=0; whichCase<TEST_COUNT; ++whichCase) { 464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if UCONFIG_NO_BREAK_ITERATION 465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(whichCase==TEST_TITLE) { 466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 46950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalPointer<TestData> casingTest(driver->createTestData(dataNames[whichCase], status)); 470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("TestCasing failed to createTestData(%s) - %s", dataNames[whichCase], u_errorName(status)); 472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const DataMap *myCase = NULL; 475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while(casingTest->nextCase(myCase, status)) { 476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru input = myCase->getString("Input", status); 477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru output = myCase->getString("Output", status); 478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(whichCase!=TEST_FOLD) { 480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru locale = myCase->getString("Locale", status); 481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru locale.extract(0, 0x7fffffff, cLocaleID, sizeof(cLocaleID), ""); 483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_BREAK_ITERATION 485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(whichCase==TEST_TITLE) { 486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru type = myCase->getInt("Type", status); 487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(type>=0) { 48850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho iter.adoptInstead(ubrk_open((UBreakIteratorType)type, cLocaleID, NULL, 0, &status)); 489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if(type==-2) { 490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Open a trivial break iterator that only delivers { 0, length } 491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // or even just { 0 } as boundaries. 492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar rules[] = { 0x2e, 0x2a, 0x3b }; // ".*;" 493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UParseError parseError; 49450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho iter.adoptInstead(ubrk_openRules(rules, LENGTHOF(rules), NULL, 0, &parseError, &status)); 495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru options = 0; 499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(whichCase==TEST_TITLE || whichCase==TEST_FOLD) { 500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru optionsString = myCase->getString("Options", status); 501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(optionsString.indexOf((UChar)0x54)>=0) { // T 502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru options|=U_FOLD_CASE_EXCLUDE_SPECIAL_I; 503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(optionsString.indexOf((UChar)0x4c)>=0) { // L 505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru options|=U_TITLECASE_NO_LOWERCASE; 506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(optionsString.indexOf((UChar)0x41)>=0) { // A 508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru options|=U_TITLECASE_NO_BREAK_ADJUSTMENT; 509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 5136d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("error: TestCasing() setup failed for %s test case from casing.res: %s", dataNames[whichCase], u_errorName(status)); 514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 51650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if UCONFIG_NO_BREAK_ITERATION 51750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalPointer<UMemory> iter; 51850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif 51950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho TestCasingImpl(input, output, whichCase, iter.getAlias(), cLocaleID, options); 520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_BREAK_ITERATION 52350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho iter.adoptInstead(NULL); 524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_BREAK_ITERATION 530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // more tests for API coverage 531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru input=UNICODE_STRING_SIMPLE("sTrA\\u00dfE").unescape(); 533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (result=input).toTitle(NULL); 534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result!=UNICODE_STRING_SIMPLE("Stra\\u00dfe").unescape()) { 5356d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("UnicodeString::toTitle(NULL) failed."); 536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 53983a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius 54083a171d1a62abf406f7f44ae671823d5ec20db7dCraig Corneliusvoid 54183a171d1a62abf406f7f44ae671823d5ec20db7dCraig CorneliusStringCaseTest::TestFullCaseFoldingIterator() { 54283a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius UnicodeString ffi=UNICODE_STRING_SIMPLE("ffi"); 54383a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius UnicodeString ss=UNICODE_STRING_SIMPLE("ss"); 54483a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius FullCaseFoldingIterator iter; 54583a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius int32_t count=0; 54683a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius int32_t countSpecific=0; 54783a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius UChar32 c; 54883a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius UnicodeString full; 54983a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius while((c=iter.next(full))>=0) { 55083a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius ++count; 55183a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius // Check that the full Case_Folding has more than 1 code point. 55283a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius if(!full.hasMoreChar32Than(0, 0x7fffffff, 1)) { 55383a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius errln("error: FullCaseFoldingIterator.next()=U+%04lX full Case_Folding has at most 1 code point", (long)c); 55483a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius continue; 55583a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius } 55683a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius // Check that full == Case_Folding(c). 55783a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius UnicodeString cf(c); 55883a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius cf.foldCase(); 55983a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius if(full!=cf) { 56083a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius errln("error: FullCaseFoldingIterator.next()=U+%04lX full Case_Folding != cf(c)", (long)c); 56183a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius continue; 56283a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius } 56383a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius // Spot-check a couple of specific cases. 56483a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius if((full==ffi && c==0xfb03) || (full==ss && (c==0xdf || c==0x1e9e))) { 56583a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius ++countSpecific; 56683a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius } 56783a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius } 56883a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius if(countSpecific!=3) { 56983a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius errln("error: FullCaseFoldingIterator did not yield exactly the expected specific cases"); 57083a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius } 57183a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius if(count<70) { 57283a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius errln("error: FullCaseFoldingIterator yielded only %d (cp, full) pairs", (int)count); 57383a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius } 57483a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius} 575