cstrcase.c revision b13da9df870a61b11249bf741347908dbea0edd8
1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru******************************************************************************* 3b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Copyright (C) 2002-2007, International Business Machines 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Corporation and others. All Rights Reserved. 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru******************************************************************************* 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* file name: cstrcase.c 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: 2002feb21 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 <string.h> 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/uchar.h" 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ustring.h" 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/uloc.h" 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ubrk.h" 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ucasemap.h" 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cmemory.h" 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cintltst.h" 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0])) 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* test string case mapping functions --------------------------------------- */ 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruTestCaseLower(void) { 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru beforeLower[]= { 0x61, 0x42, 0x49, 0x3a3, 0xdf, 0x3a3, 0x2f, 0xd93f, 0xdfff }, 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lowerRoot[]= { 0x61, 0x62, 0x69, 0x3c3, 0xdf, 0x3c2, 0x2f, 0xd93f, 0xdfff }, 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lowerTurkish[]={ 0x61, 0x62, 0x131, 0x3c3, 0xdf, 0x3c2, 0x2f, 0xd93f, 0xdfff }; 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar buffer[32]; 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t length; 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode errorCode; 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* lowercase with root locale and separate buffers */ 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]=0xabcd; 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strToLower(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru beforeLower, sizeof(beforeLower)/U_SIZEOF_UCHAR, 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "", 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( U_FAILURE(errorCode) || 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length!=(sizeof(lowerRoot)/U_SIZEOF_UCHAR) || 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcmp(lowerRoot, buffer, length*U_SIZEOF_UCHAR)!=0 || 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[length]!=0 56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strToLower(root locale)=%ld error=%s string matches: %s\t\nlowerRoot=%s\t\nbuffer=%s\n", 58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode), 60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcmp(lowerRoot, buffer, length*U_SIZEOF_UCHAR)==0 && 61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querubuffer[length]==0 ? "yes" : "no", 62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru aescstrdup(lowerRoot,-1), 63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru aescstrdup(buffer,-1)); 64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* lowercase with turkish locale and in the same buffer */ 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcpy(buffer, beforeLower, sizeof(beforeLower)); 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[sizeof(beforeLower)/U_SIZEOF_UCHAR]=0; 69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strToLower(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, 71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer, -1, /* implicit srcLength */ 72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "tr", 73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( U_FAILURE(errorCode) || 75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length!=(sizeof(lowerTurkish)/U_SIZEOF_UCHAR) || 76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcmp(lowerTurkish, buffer, length*U_SIZEOF_UCHAR)!=0 || 77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[length]!=0 78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strToLower(turkish locale)=%ld error=%s string matches: %s\n", 80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode), 82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcmp(lowerTurkish, buffer, length*U_SIZEOF_UCHAR)==0 && buffer[length]==0 ? "yes" : "no"); 83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test preflighting */ 86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]=buffer[2]=0xabcd; 87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strToLower(buffer, 2, /* set destCapacity=2 */ 89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru beforeLower, sizeof(beforeLower)/U_SIZEOF_UCHAR, 90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "", 91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( errorCode!=U_BUFFER_OVERFLOW_ERROR || 93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length!=(sizeof(lowerRoot)/U_SIZEOF_UCHAR) || 94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcmp(lowerRoot, buffer, 2*U_SIZEOF_UCHAR)!=0 || 95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[2]!=0xabcd 96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strToLower(root locale preflighting)=%ld error=%s string matches: %s\n", 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode), 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcmp(lowerRoot, buffer, 2*U_SIZEOF_UCHAR)==0 && buffer[2]==0xabcd ? "yes" : "no"); 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test error handling */ 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strToLower(NULL, sizeof(buffer)/U_SIZEOF_UCHAR, 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru beforeLower, sizeof(beforeLower)/U_SIZEOF_UCHAR, 107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "", 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(errorCode!=U_ILLEGAL_ARGUMENT_ERROR) { 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strToLower(root locale dest=NULL)=%ld error=%s\n", 111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode)); 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]=0xabcd; 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strToLower(buffer, -1, 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru beforeLower, sizeof(beforeLower)/U_SIZEOF_UCHAR, 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "", 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( errorCode!=U_ILLEGAL_ARGUMENT_ERROR || 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]!=0xabcd 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strToLower(root locale destCapacity=-1)=%ld error=%s buffer[0]==0x%lx\n", 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode), 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]); 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruTestCaseUpper(void) { 133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar 134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru beforeUpper[]= { 0x61, 0x42, 0x69, 0x3c2, 0xdf, 0x3c3, 0x2f, 0xfb03, 0xd93f, 0xdfff }, 136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru upperRoot[]= { 0x41, 0x42, 0x49, 0x3a3, 0x53, 0x53, 0x3a3, 0x2f, 0x46, 0x46, 0x49, 0xd93f, 0xdfff }, 137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru upperTurkish[]={ 0x41, 0x42, 0x130, 0x3a3, 0x53, 0x53, 0x3a3, 0x2f, 0x46, 0x46, 0x49, 0xd93f, 0xdfff }; 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar buffer[32]; 140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t length; 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode errorCode; 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* uppercase with root locale and in the same buffer */ 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcpy(buffer, beforeUpper, sizeof(beforeUpper)); 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strToUpper(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer, sizeof(beforeUpper)/U_SIZEOF_UCHAR, 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "", 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( U_FAILURE(errorCode) || 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length!=(sizeof(upperRoot)/U_SIZEOF_UCHAR) || 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcmp(upperRoot, buffer, length*U_SIZEOF_UCHAR)!=0 || 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[length]!=0 154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strToUpper(root locale)=%ld error=%s string matches: %s\n", 156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode), 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcmp(upperRoot, buffer, length*U_SIZEOF_UCHAR)==0 && buffer[length]==0 ? "yes" : "no"); 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* uppercase with turkish locale and separate buffers */ 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]=0xabcd; 163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strToUpper(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, 165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru beforeUpper, sizeof(beforeUpper)/U_SIZEOF_UCHAR, 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "tr", 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( U_FAILURE(errorCode) || 169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length!=(sizeof(upperTurkish)/U_SIZEOF_UCHAR) || 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcmp(upperTurkish, buffer, length*U_SIZEOF_UCHAR)!=0 || 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[length]!=0 172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strToUpper(turkish locale)=%ld error=%s string matches: %s\n", 174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode), 176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcmp(upperTurkish, buffer, length*U_SIZEOF_UCHAR)==0 && buffer[length]==0 ? "yes" : "no"); 177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test preflighting */ 180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strToUpper(NULL, 0, 182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru beforeUpper, sizeof(beforeUpper)/U_SIZEOF_UCHAR, 183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "tr", 184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( errorCode!=U_BUFFER_OVERFLOW_ERROR || 186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length!=(sizeof(upperTurkish)/U_SIZEOF_UCHAR) 187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strToUpper(turkish locale pure preflighting)=%ld error=%s\n", 189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode)); 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test error handling */ 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]=0xabcd; 195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strToUpper(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, 197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NULL, sizeof(beforeUpper)/U_SIZEOF_UCHAR, 198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "tr", 199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( errorCode!=U_ILLEGAL_ARGUMENT_ERROR || 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]!=0xabcd 202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strToUpper(turkish locale src=NULL)=%ld error=%s buffer[0]==0x%lx\n", 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode), 206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]); 207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]=0xabcd; 210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strToUpper(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, 212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru beforeUpper, -2, 213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "tr", 214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( errorCode!=U_ILLEGAL_ARGUMENT_ERROR || 216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]!=0xabcd 217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strToUpper(turkish locale srcLength=-2)=%ld error=%s buffer[0]==0x%lx\n", 219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode), 221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]); 222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_BREAK_ITERATION 226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void 228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruTestCaseTitle(void) { 229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar 230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru beforeTitle[]= { 0x61, 0x42, 0x20, 0x69, 0x3c2, 0x20, 0xdf, 0x3c3, 0x2f, 0xfb03, 0xd93f, 0xdfff }, 232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru titleWord[]= { 0x41, 0x62, 0x20, 0x49, 0x3c2, 0x20, 0x53, 0x73, 0x3c3, 0x2f, 0x46, 0x66, 0x69, 0xd93f, 0xdfff }, 233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru titleChar[]= { 0x41, 0x42, 0x20, 0x49, 0x3a3, 0x20, 0x53, 0x73, 0x3a3, 0x2f, 0x46, 0x66, 0x69, 0xd93f, 0xdfff }; 234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar buffer[32]; 236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBreakIterator *titleIterChars; 237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t length; 238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode errorCode; 239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru titleIterChars=ubrk_open(UBRK_CHARACTER, "", beforeTitle, sizeof(beforeTitle)/U_SIZEOF_UCHAR, &errorCode); 242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(errorCode)) { 243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error: ubrk_open(UBRK_CHARACTER)->%s\n", u_errorName(errorCode)); 244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* titlecase with standard break iterator and in the same buffer */ 248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcpy(buffer, beforeTitle, sizeof(beforeTitle)); 249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strToTitle(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, 251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer, sizeof(beforeTitle)/U_SIZEOF_UCHAR, 252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NULL, "", 253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( U_FAILURE(errorCode) || 255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length!=(sizeof(titleWord)/U_SIZEOF_UCHAR) || 256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcmp(titleWord, buffer, length*U_SIZEOF_UCHAR)!=0 || 257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[length]!=0 258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strToTitle(standard iterator)=%ld error=%s string matches: %s\n", 260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode), 262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcmp(titleWord, buffer, length*U_SIZEOF_UCHAR)==0 && buffer[length]==0 ? "yes" : "no"); 263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* titlecase with UBRK_CHARACTERS and separate buffers */ 266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]=0xabcd; 267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strToTitle(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, 269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru beforeTitle, sizeof(beforeTitle)/U_SIZEOF_UCHAR, 270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru titleIterChars, "", 271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( U_FAILURE(errorCode) || 273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length!=(sizeof(titleChar)/U_SIZEOF_UCHAR) || 274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcmp(titleChar, buffer, length*U_SIZEOF_UCHAR)!=0 || 275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[length]!=0 276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strToTitle(UBRK_CHARACTERS)=%ld error=%s string matches: %s\n", 278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode), 280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcmp(titleChar, buffer, length*U_SIZEOF_UCHAR)==0 && buffer[length]==0 ? "yes" : "no"); 281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test preflighting */ 284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strToTitle(NULL, 0, 286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru beforeTitle, sizeof(beforeTitle)/U_SIZEOF_UCHAR, 287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru titleIterChars, "", 288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( errorCode!=U_BUFFER_OVERFLOW_ERROR || 290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length!=(sizeof(titleChar)/U_SIZEOF_UCHAR) 291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strToTitle(UBRK_CHARACTERS pure preflighting)=%ld error=%s\n", 293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode)); 295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test error handling */ 298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]=0xabcd; 299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strToTitle(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, 301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NULL, sizeof(beforeTitle)/U_SIZEOF_UCHAR, 302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru titleIterChars, "", 303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( errorCode!=U_ILLEGAL_ARGUMENT_ERROR || 305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]!=0xabcd 306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strToTitle(UBRK_CHARACTERS src=NULL)=%ld error=%s buffer[0]==0x%lx\n", 308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode), 310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]); 311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]=0xabcd; 314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strToTitle(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, 316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru beforeTitle, -2, 317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru titleIterChars, "", 318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( errorCode!=U_ILLEGAL_ARGUMENT_ERROR || 320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]!=0xabcd 321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strToTitle(UBRK_CHARACTERS srcLength=-2)=%ld error=%s buffer[0]==0x%lx\n", 323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode), 325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]); 326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ubrk_close(titleIterChars); 329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* test case folding and case-insensitive string compare -------------------- */ 334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void 336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruTestCaseFolding(void) { 337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* 338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * CaseFolding.txt says about i and its cousins: 339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 0049; C; 0069; # LATIN CAPITAL LETTER I 340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 0049; T; 0131; # LATIN CAPITAL LETTER I 341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 0130; F; 0069 0307; # LATIN CAPITAL LETTER I WITH DOT ABOVE 343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 0130; T; 0069; # LATIN CAPITAL LETTER I WITH DOT ABOVE 344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * That's all. 345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * See CaseFolding.txt and the Unicode Standard for how to apply the case foldings. 346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar32 348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru simple[]={ 349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* input, default, exclude special i */ 350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x61, 0x61, 0x61, 351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x49, 0x69, 0x131, 352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x130, 0x130, 0x69, 353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x131, 0x131, 0x131, 354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xdf, 0xdf, 0xdf, 355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xfb03, 0xfb03, 0xfb03, 356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x1040e,0x10436,0x10436, 357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x5ffff,0x5ffff,0x5ffff 358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar 361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru mixed[]= { 0x61, 0x42, 0x130, 0x49, 0x131, 0x3d0, 0xdf, 0xfb03, 0xd93f, 0xdfff }, 362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru foldedDefault[]= { 0x61, 0x62, 0x69, 0x307, 0x69, 0x131, 0x3b2, 0x73, 0x73, 0x66, 0x66, 0x69, 0xd93f, 0xdfff }, 363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru foldedExcludeSpecialI[]={ 0x61, 0x62, 0x69, 0x131, 0x131, 0x3b2, 0x73, 0x73, 0x66, 0x66, 0x69, 0xd93f, 0xdfff }; 364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UVersionInfo unicodeVersion={ 0, 0, 17, 89 }, unicode_3_1={ 3, 1, 0, 0 }; 366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UChar32 *p; 368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar buffer[32]; 371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t length; 372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode errorCode; 373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool isUnicode_3_1; 374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* if unicodeVersion()>=3.1 then test exclude-special-i cases as well */ 376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_getUnicodeVersion(unicodeVersion); 377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru isUnicode_3_1= uprv_memcmp(unicodeVersion, unicode_3_1, 4)>=0; 378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test simple case folding */ 380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru p=simple; 381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i=0; i<sizeof(simple)/12; p+=3, ++i) { 382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_foldCase(p[0], U_FOLD_CASE_DEFAULT)!=p[1]) { 383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error: u_foldCase(0x%04lx, default)=0x%04lx instead of 0x%04lx\n", 384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru p[0], u_foldCase(p[0], U_FOLD_CASE_DEFAULT), p[1]); 385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(isUnicode_3_1 && u_foldCase(p[0], U_FOLD_CASE_EXCLUDE_SPECIAL_I)!=p[2]) { 389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error: u_foldCase(0x%04lx, exclude special i)=0x%04lx instead of 0x%04lx\n", 390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru p[0], u_foldCase(p[0], U_FOLD_CASE_EXCLUDE_SPECIAL_I), p[2]); 391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test full string case folding with default option and separate buffers */ 396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]=0xabcd; 397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strFoldCase(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, 399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru mixed, sizeof(mixed)/U_SIZEOF_UCHAR, 400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_FOLD_CASE_DEFAULT, 401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( U_FAILURE(errorCode) || 403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length!=(sizeof(foldedDefault)/U_SIZEOF_UCHAR) || 404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcmp(foldedDefault, buffer, length*U_SIZEOF_UCHAR)!=0 || 405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[length]!=0 406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strFoldCase(default)=%ld error=%s string matches: %s\n", 408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode), 410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcmp(foldedDefault, buffer, length*U_SIZEOF_UCHAR)==0 && buffer[length]==0 ? "yes" : "no"); 411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* exclude special i */ 414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(isUnicode_3_1) { 415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]=0xabcd; 416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strFoldCase(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, 418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru mixed, sizeof(mixed)/U_SIZEOF_UCHAR, 419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_FOLD_CASE_EXCLUDE_SPECIAL_I, 420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( U_FAILURE(errorCode) || 422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length!=(sizeof(foldedExcludeSpecialI)/U_SIZEOF_UCHAR) || 423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcmp(foldedExcludeSpecialI, buffer, length*U_SIZEOF_UCHAR)!=0 || 424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[length]!=0 425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strFoldCase(exclude special i)=%ld error=%s string matches: %s\n", 427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode), 429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcmp(foldedExcludeSpecialI, buffer, length*U_SIZEOF_UCHAR)==0 && buffer[length]==0 ? "yes" : "no"); 430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test full string case folding with default option and in the same buffer */ 434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcpy(buffer, mixed, sizeof(mixed)); 435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[sizeof(mixed)/U_SIZEOF_UCHAR]=0; 436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strFoldCase(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, 438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer, -1, /* implicit srcLength */ 439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_FOLD_CASE_DEFAULT, 440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( U_FAILURE(errorCode) || 442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length!=(sizeof(foldedDefault)/U_SIZEOF_UCHAR) || 443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcmp(foldedDefault, buffer, length*U_SIZEOF_UCHAR)!=0 || 444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[length]!=0 445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strFoldCase(default same buffer)=%ld error=%s string matches: %s\n", 447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode), 449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcmp(foldedDefault, buffer, length*U_SIZEOF_UCHAR)==0 && buffer[length]==0 ? "yes" : "no"); 450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test full string case folding, exclude special i, in the same buffer */ 453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(isUnicode_3_1) { 454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcpy(buffer, mixed, sizeof(mixed)); 455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strFoldCase(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, 457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer, sizeof(mixed)/U_SIZEOF_UCHAR, 458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_FOLD_CASE_EXCLUDE_SPECIAL_I, 459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( U_FAILURE(errorCode) || 461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length!=(sizeof(foldedExcludeSpecialI)/U_SIZEOF_UCHAR) || 462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcmp(foldedExcludeSpecialI, buffer, length*U_SIZEOF_UCHAR)!=0 || 463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[length]!=0 464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strFoldCase(exclude special i same buffer)=%ld error=%s string matches: %s\n", 466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode), 468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcmp(foldedExcludeSpecialI, buffer, length*U_SIZEOF_UCHAR)==0 && buffer[length]==0 ? "yes" : "no"); 469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test preflighting */ 473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]=buffer[2]=0xabcd; 474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strFoldCase(buffer, 2, /* set destCapacity=2 */ 476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru mixed, sizeof(mixed)/U_SIZEOF_UCHAR, 477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_FOLD_CASE_DEFAULT, 478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( errorCode!=U_BUFFER_OVERFLOW_ERROR || 480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length!=(sizeof(foldedDefault)/U_SIZEOF_UCHAR) || 481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcmp(foldedDefault, buffer, 2*U_SIZEOF_UCHAR)!=0 || 482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[2]!=0xabcd 483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strFoldCase(default preflighting)=%ld error=%s string matches: %s\n", 485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode), 487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcmp(foldedDefault, buffer, 2*U_SIZEOF_UCHAR)==0 && buffer[2]==0xabcd ? "yes" : "no"); 488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strFoldCase(NULL, 0, 492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru mixed, sizeof(mixed)/U_SIZEOF_UCHAR, 493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_FOLD_CASE_DEFAULT, 494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( errorCode!=U_BUFFER_OVERFLOW_ERROR || 496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length!=(sizeof(foldedDefault)/U_SIZEOF_UCHAR) 497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strFoldCase(default pure preflighting)=%ld error=%s\n", 499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode)); 501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test error handling */ 504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strFoldCase(NULL, sizeof(buffer)/U_SIZEOF_UCHAR, 506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru mixed, sizeof(mixed)/U_SIZEOF_UCHAR, 507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_FOLD_CASE_DEFAULT, 508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(errorCode!=U_ILLEGAL_ARGUMENT_ERROR) { 510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strFoldCase(default dest=NULL)=%ld error=%s\n", 511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode)); 513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]=0xabcd; 516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strFoldCase(buffer, -1, 518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru mixed, sizeof(mixed)/U_SIZEOF_UCHAR, 519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_FOLD_CASE_DEFAULT, 520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( errorCode!=U_ILLEGAL_ARGUMENT_ERROR || 522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]!=0xabcd 523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strFoldCase(default destCapacity=-1)=%ld error=%s buffer[0]==0x%lx\n", 525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode), 527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]); 528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]=0xabcd; 531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strFoldCase(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, 533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NULL, sizeof(mixed)/U_SIZEOF_UCHAR, 534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_FOLD_CASE_EXCLUDE_SPECIAL_I, 535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( errorCode!=U_ILLEGAL_ARGUMENT_ERROR || 537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]!=0xabcd 538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strFoldCase(exclude special i src=NULL)=%ld error=%s buffer[0]==0x%lx\n", 540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode), 542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]); 543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]=0xabcd; 546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strFoldCase(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, 548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru mixed, -2, 549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_FOLD_CASE_EXCLUDE_SPECIAL_I, 550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( errorCode!=U_ILLEGAL_ARGUMENT_ERROR || 552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]!=0xabcd 553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strFoldCase(exclude special i srcLength=-2)=%ld error=%s buffer[0]==0x%lx\n", 555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode), 557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]); 558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void 562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruTestCaseCompare(void) { 563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar 564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru mixed[]= { 0x61, 0x42, 0x131, 0x3a3, 0xdf, 0xfb03, 0xd93f, 0xdfff, 0 }, 566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru otherDefault[]= { 0x41, 0x62, 0x131, 0x3c3, 0x73, 0x53, 0x46, 0x66, 0x49, 0xd93f, 0xdfff, 0 }, 567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru otherExcludeSpecialI[]={ 0x41, 0x62, 0x131, 0x3c3, 0x53, 0x73, 0x66, 0x46, 0x69, 0xd93f, 0xdfff, 0 }, 568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru different[]= { 0x41, 0x62, 0x131, 0x3c3, 0x73, 0x53, 0x46, 0x66, 0x49, 0xd93f, 0xdffd, 0 }; 569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UVersionInfo unicodeVersion={ 0, 0, 17, 89 }, unicode_3_1={ 3, 1, 0, 0 }; 571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t result, lenMixed, lenOtherDefault, lenOtherExcludeSpecialI, lenDifferent; 573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode errorCode; 574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool isUnicode_3_1; 575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lenMixed=u_strlen(mixed); 579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lenOtherDefault=u_strlen(otherDefault); 580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lenOtherExcludeSpecialI=u_strlen(otherExcludeSpecialI); 581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lenDifferent=u_strlen(different); 582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* if unicodeVersion()>=3.1 then test exclude-special-i cases as well */ 584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_getUnicodeVersion(unicodeVersion); 585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru isUnicode_3_1= uprv_memcmp(unicodeVersion, unicode_3_1, 4)>=0; 586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test u_strcasecmp() */ 588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=u_strcasecmp(mixed, otherDefault, U_FOLD_CASE_DEFAULT); 589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result!=0) { 590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error: u_strcasecmp(mixed, other, default)=%ld instead of 0\n", result); 591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=u_strCaseCompare(mixed, -1, otherDefault, -1, U_FOLD_CASE_DEFAULT, &errorCode); 593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result!=0) { 594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error: u_strCaseCompare(mixed, other, default)=%ld instead of 0\n", result); 595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test u_strcasecmp() - exclude special i */ 598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=u_strcasecmp(mixed, otherExcludeSpecialI, U_FOLD_CASE_EXCLUDE_SPECIAL_I); 599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result!=0) { 600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error: u_strcasecmp(mixed, other, exclude special i)=%ld instead of 0\n", result); 601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=u_strCaseCompare(mixed, lenMixed, otherExcludeSpecialI, lenOtherExcludeSpecialI, U_FOLD_CASE_EXCLUDE_SPECIAL_I, &errorCode); 603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result!=0) { 604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error: u_strCaseCompare(mixed, other, exclude special i)=%ld instead of 0\n", result); 605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test u_strcasecmp() */ 608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=u_strcasecmp(mixed, different, U_FOLD_CASE_DEFAULT); 609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result<=0) { 610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error: u_strcasecmp(mixed, different, default)=%ld instead of positive\n", result); 611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=u_strCaseCompare(mixed, -1, different, lenDifferent, U_FOLD_CASE_DEFAULT, &errorCode); 613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result<=0) { 614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error: u_strCaseCompare(mixed, different, default)=%ld instead of positive\n", result); 615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test u_strncasecmp() - stop before the sharp s (U+00df) */ 618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=u_strncasecmp(mixed, different, 4, U_FOLD_CASE_DEFAULT); 619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result!=0) { 620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error: u_strncasecmp(mixed, different, 4, default)=%ld instead of 0\n", result); 621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=u_strCaseCompare(mixed, 4, different, 4, U_FOLD_CASE_DEFAULT, &errorCode); 623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result!=0) { 624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error: u_strCaseCompare(mixed, 4, different, 4, default)=%ld instead of 0\n", result); 625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test u_strncasecmp() - stop in the middle of the sharp s (U+00df) */ 628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=u_strncasecmp(mixed, different, 5, U_FOLD_CASE_DEFAULT); 629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result<=0) { 630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error: u_strncasecmp(mixed, different, 5, default)=%ld instead of positive\n", result); 631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=u_strCaseCompare(mixed, 5, different, 5, U_FOLD_CASE_DEFAULT, &errorCode); 633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result<=0) { 634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error: u_strCaseCompare(mixed, 5, different, 5, default)=%ld instead of positive\n", result); 635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test u_memcasecmp() - stop before the sharp s (U+00df) */ 638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=u_memcasecmp(mixed, different, 4, U_FOLD_CASE_DEFAULT); 639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result!=0) { 640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error: u_memcasecmp(mixed, different, 4, default)=%ld instead of 0\n", result); 641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test u_memcasecmp() - stop in the middle of the sharp s (U+00df) */ 644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=u_memcasecmp(mixed, different, 5, U_FOLD_CASE_DEFAULT); 645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result<=0) { 646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error: u_memcasecmp(mixed, different, 5, default)=%ld instead of positive\n", result); 647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* test UCaseMap ------------------------------------------------------------ */ 651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * API test for UCaseMap; 654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * test cases for actual case mappings using UCaseMap see 655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * intltest utility/UnicodeStringTest/StringCaseTest/TestCasing 656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void 658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruTestUCaseMap(void) { 659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const char 660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru aBc[] ={ 0x61, 0x42, 0x63, 0 }, 661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru abc[] ={ 0x61, 0x62, 0x63, 0 }, 662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ABCg[]={ 0x41, 0x42, 0x43, 0x67, 0 }, 663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru defg[]={ 0x64, 0x65, 0x66, 0x67, 0 }; 664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char utf8Out[8]; 665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCaseMap *csm; 667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *locale; 668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t options; 669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t length; 670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode errorCode; 671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru csm=ucasemap_open("tur", 0xa5, &errorCode); 674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(errorCode)) { 675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucasemap_open(\"tur\") failed - %s\n", u_errorName(errorCode)); 676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru locale=ucasemap_getLocale(csm); 679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(0!=strcmp(locale, "tr")) { 680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucasemap_getLocale(ucasemap_open(\"tur\"))==%s!=\"tr\"\n", locale); 681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* overly long locale IDs get truncated to their language code to avoid unnecessary allocation */ 683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucasemap_setLocale(csm, "I-kLInGOn-the-quick-brown-fox-jumps-over-the-lazy-dog", &errorCode); 684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru locale=ucasemap_getLocale(csm); 685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(0!=strcmp(locale, "i-klingon")) { 686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucasemap_getLocale(ucasemap_setLocale(\"I-kLInGOn-the-quick-br...\"))==%s!=\"i-klingon\"\n", locale); 687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru options=ucasemap_getOptions(csm); 691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(options!=0xa5) { 692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucasemap_getOptions(ucasemap_open(0xa5))==0x%lx!=0xa5\n", (long)options); 693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucasemap_setOptions(csm, 0x333333, &errorCode); 695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru options=ucasemap_getOptions(csm); 696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(options!=0x333333) { 697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucasemap_getOptions(ucasemap_setOptions(0x333333))==0x%lx!=0x333333\n", (long)options); 698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test case mapping API; not all permutations necessary due to shared implementation code */ 701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* NUL terminated source */ 703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=ucasemap_utf8ToLower(csm, utf8Out, (int32_t)sizeof(utf8Out), aBc, -1, &errorCode); 705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(errorCode) || length!=3 || 0!=strcmp(abc, utf8Out)) { 706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucasemap_utf8ToLower(aBc\\0) failed\n"); 707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* incoming failure code */ 710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_PARSE_ERROR; 711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcpy(utf8Out, defg); 712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=ucasemap_utf8ToLower(csm, utf8Out, (int32_t)sizeof(utf8Out), aBc, -1, &errorCode); 713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(errorCode!=U_PARSE_ERROR || 0!=strcmp(defg, utf8Out)) { 714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucasemap_utf8ToLower(failure) failed\n"); 715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* overlapping input & output */ 718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcpy(utf8Out, aBc); 720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=ucasemap_utf8ToUpper(csm, utf8Out, 2, utf8Out+1, 2, &errorCode); 721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(errorCode!=U_ILLEGAL_ARGUMENT_ERROR || 0!=strcmp(aBc, utf8Out)) { 722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucasemap_utf8ToUpper(overlap 1) failed\n"); 723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* overlap in the other direction */ 726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcpy(utf8Out, aBc); 728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=ucasemap_utf8ToUpper(csm, utf8Out+1, 2, utf8Out, 2, &errorCode); 729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(errorCode!=U_ILLEGAL_ARGUMENT_ERROR || 0!=strcmp(aBc, utf8Out)) { 730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucasemap_utf8ToUpper(overlap 2) failed\n"); 731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* NULL destination */ 734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcpy(utf8Out, defg); 736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=ucasemap_utf8ToLower(csm, NULL, (int32_t)sizeof(utf8Out), aBc, -1, &errorCode); 737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(errorCode!=U_ILLEGAL_ARGUMENT_ERROR || 0!=strcmp(defg, utf8Out)) { 738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucasemap_utf8ToLower(dest=NULL) failed\n"); 739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* destCapacity<0 */ 742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcpy(utf8Out, defg); 744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=ucasemap_utf8ToLower(csm, utf8Out, -2, aBc, -1, &errorCode); 745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(errorCode!=U_ILLEGAL_ARGUMENT_ERROR || 0!=strcmp(defg, utf8Out)) { 746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucasemap_utf8ToLower(destCapacity<0) failed\n"); 747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* NULL source */ 750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcpy(utf8Out, defg); 752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=ucasemap_utf8ToLower(csm, utf8Out, (int32_t)sizeof(utf8Out), NULL, -1, &errorCode); 753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(errorCode!=U_ILLEGAL_ARGUMENT_ERROR || 0!=strcmp(defg, utf8Out)) { 754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucasemap_utf8ToLower(src=NULL) failed\n"); 755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* srcLength<-1 */ 758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcpy(utf8Out, defg); 760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=ucasemap_utf8ToLower(csm, utf8Out, (int32_t)sizeof(utf8Out), aBc, -2, &errorCode); 761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(errorCode!=U_ILLEGAL_ARGUMENT_ERROR || 0!=strcmp(defg, utf8Out)) { 762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucasemap_utf8ToLower(srcLength<-1) failed\n"); 763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* buffer overflow */ 766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcpy(utf8Out, defg); 768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=ucasemap_utf8ToUpper(csm, utf8Out, 2, aBc, 3, &errorCode); 769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(errorCode!=U_BUFFER_OVERFLOW_ERROR || length!=3 || 0!=strcmp(defg+2, utf8Out+2)) { 770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucasemap_utf8ToUpper(overflow) failed\n"); 771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* dest not terminated (leaves g from defg alone) */ 774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcpy(utf8Out, defg); 776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=ucasemap_utf8ToUpper(csm, utf8Out, 3, aBc, 3, &errorCode); 777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(errorCode!=U_STRING_NOT_TERMINATED_WARNING || length!=3 || 0!=strcmp(ABCg, utf8Out)) { 778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucasemap_utf8ToUpper(overflow) failed\n"); 779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* C API coverage for case folding. More thorough test via C++ intltest's StringCaseTest::TestCasing(). */ 782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru utf8Out[0]=0; 784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=ucasemap_utf8FoldCase(csm, utf8Out, (int32_t)sizeof(utf8Out), aBc, 3, &errorCode); 785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(errorCode) || length!=3 || 0!=strcmp(abc, utf8Out)) { 786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucasemap_utf8FoldCase(aBc) failed\n"); 787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucasemap_close(csm); 790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_BREAK_ITERATION 793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Try titlecasing with options. */ 795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void 796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruTestUCaseMapToTitle(void) { 797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* "a 'CaT. A 'dOg! 'eTc." where '=U+02BB */ 798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* 799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Note: The sentence BreakIterator does not recognize a '.' 800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * as a sentence terminator if it is followed by lowercase. 801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * That is why the example has the '!'. 802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar 804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru beforeTitle[]= { 0x61, 0x20, 0x2bb, 0x43, 0x61, 0x54, 0x2e, 0x20, 0x41, 0x20, 0x2bb, 0x64, 0x4f, 0x67, 0x21, 0x20, 0x2bb, 0x65, 0x54, 0x63, 0x2e }, 806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru titleWord[]= { 0x41, 0x20, 0x2bb, 0x43, 0x61, 0x74, 0x2e, 0x20, 0x41, 0x20, 0x2bb, 0x44, 0x6f, 0x67, 0x21, 0x20, 0x2bb, 0x45, 0x74, 0x63, 0x2e }, 807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru titleWordNoAdjust[]={ 0x41, 0x20, 0x2bb, 0x63, 0x61, 0x74, 0x2e, 0x20, 0x41, 0x20, 0x2bb, 0x64, 0x6f, 0x67, 0x21, 0x20, 0x2bb, 0x65, 0x74, 0x63, 0x2e }, 808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru titleSentNoLower[]= { 0x41, 0x20, 0x2bb, 0x43, 0x61, 0x54, 0x2e, 0x20, 0x41, 0x20, 0x2bb, 0x64, 0x4f, 0x67, 0x21, 0x20, 0x2bb, 0x45, 0x54, 0x63, 0x2e }; 809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar buffer[32]; 811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCaseMap *csm; 812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBreakIterator *sentenceIter; 813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UBreakIterator *iter; 814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t length; 815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode errorCode; 816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru csm=ucasemap_open("", 0, &errorCode); 819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(errorCode)) { 820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucasemap_open(\"\") failed - %s\n", u_errorName(errorCode)); 821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru iter=ucasemap_getBreakIterator(csm); 825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(iter!=NULL) { 826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucasemap_getBreakIterator() returns %p!=NULL before setting any iterator or titlecasing\n", iter); 827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Use default UBreakIterator: Word breaks. */ 830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=ucasemap_toTitle(csm, buffer, LENGTHOF(buffer), beforeTitle, LENGTHOF(beforeTitle), &errorCode); 831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( U_FAILURE(errorCode) || 832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length!=LENGTHOF(titleWord) || 833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0!=u_memcmp(buffer, titleWord, length) || 834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[length]!=0 835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucasemap_toTitle(default iterator)=%ld failed - %s\n", (long)length, u_errorName(errorCode)); 837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru iter=ucasemap_getBreakIterator(csm); 840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(iter==NULL) { 841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucasemap_getBreakIterator() returns NULL after titlecasing\n"); 842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Try U_TITLECASE_NO_BREAK_ADJUSTMENT. */ 845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucasemap_setOptions(csm, U_TITLECASE_NO_BREAK_ADJUSTMENT, &errorCode); 846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(errorCode)) { 847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error: ucasemap_setOptions(U_TITLECASE_NO_BREAK_ADJUSTMENT) failed - %s\n", u_errorName(errorCode)); 848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=ucasemap_toTitle(csm, buffer, LENGTHOF(buffer), beforeTitle, LENGTHOF(beforeTitle), &errorCode); 852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( U_FAILURE(errorCode) || 853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length!=LENGTHOF(titleWordNoAdjust) || 854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0!=u_memcmp(buffer, titleWordNoAdjust, length) || 855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[length]!=0 856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucasemap_toTitle(default iterator, no break adjustment)=%ld failed - %s\n", (long)length, u_errorName(errorCode)); 858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Set a sentence break iterator. */ 861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sentenceIter=ubrk_open(UBRK_SENTENCE, "", NULL, 0, &errorCode); 863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(errorCode)) { 864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error: ubrk_open(UBRK_SENTENCE) failed - %s\n", u_errorName(errorCode)); 865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucasemap_close(csm); 866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucasemap_setBreakIterator(csm, sentenceIter, &errorCode); 869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(errorCode)) { 870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error: ucasemap_setBreakIterator(sentence iterator) failed - %s\n", u_errorName(errorCode)); 871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ubrk_close(sentenceIter); 872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucasemap_close(csm); 873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru iter=ucasemap_getBreakIterator(csm); 876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(iter!=sentenceIter) { 877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucasemap_getBreakIterator() returns %p!=%p after setting the iterator\n", iter, sentenceIter); 878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucasemap_setOptions(csm, U_TITLECASE_NO_LOWERCASE, &errorCode); 881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(errorCode)) { 882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error: ucasemap_setOptions(U_TITLECASE_NO_LOWERCASE) failed - %s\n", u_errorName(errorCode)); 883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Use the sentence break iterator with the option. Preflight first. */ 887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=ucasemap_toTitle(csm, NULL, 0, beforeTitle, LENGTHOF(beforeTitle), &errorCode); 888b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( errorCode!=U_BUFFER_OVERFLOW_ERROR || 889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length!=LENGTHOF(titleSentNoLower) 890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucasemap_toTitle(preflight sentence break iterator, no lowercasing)=%ld failed - %s\n", (long)length, u_errorName(errorCode)); 892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]=0; 896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=ucasemap_toTitle(csm, buffer, LENGTHOF(buffer), beforeTitle, LENGTHOF(beforeTitle), &errorCode); 897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( U_FAILURE(errorCode) || 898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length!=LENGTHOF(titleSentNoLower) || 899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0!=u_memcmp(buffer, titleSentNoLower, length) || 900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[length]!=0 901b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 902b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucasemap_toTitle(sentence break iterator, no lowercasing)=%ld failed - %s\n", (long)length, u_errorName(errorCode)); 903b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 904b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 905b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* UTF-8 C API coverage. More thorough test via C++ intltest's StringCaseTest::TestCasing(). */ 906b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 907b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char utf8BeforeTitle[64], utf8TitleSentNoLower[64], utf8[64]; 908b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t utf8BeforeTitleLength, utf8TitleSentNoLowerLength; 909b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 910b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 911b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_strToUTF8(utf8BeforeTitle, (int32_t)sizeof(utf8BeforeTitle), &utf8BeforeTitleLength, beforeTitle, LENGTHOF(beforeTitle), &errorCode); 912b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_strToUTF8(utf8TitleSentNoLower, (int32_t)sizeof(utf8TitleSentNoLower), &utf8TitleSentNoLowerLength, titleSentNoLower, LENGTHOF(titleSentNoLower), &errorCode); 913b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 914b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=ucasemap_utf8ToTitle(csm, utf8, (int32_t)sizeof(utf8), utf8BeforeTitle, utf8BeforeTitleLength, &errorCode); 915b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( U_FAILURE(errorCode) || 916b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length!=utf8TitleSentNoLowerLength || 917b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0!=uprv_memcmp(utf8, utf8TitleSentNoLower, length) || 918b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru utf8[length]!=0 919b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 920b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucasemap_utf8ToTitle(sentence break iterator, no lowercasing)=%ld failed - %s\n", (long)length, u_errorName(errorCode)); 921b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 922b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 923b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 924b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucasemap_close(csm); 925b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 926b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 927b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 928b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 929b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid addCaseTest(TestNode** root); 930b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 931b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid addCaseTest(TestNode** root) { 932b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* cstrcase.c functions, declared in cucdtst.h */ 933b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestCaseLower, "tsutil/cstrcase/TestCaseLower"); 934b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestCaseUpper, "tsutil/cstrcase/TestCaseUpper"); 935b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_BREAK_ITERATION 936b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestCaseTitle, "tsutil/cstrcase/TestCaseTitle"); 937b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 938b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestCaseFolding, "tsutil/cstrcase/TestCaseFolding"); 939b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestCaseCompare, "tsutil/cstrcase/TestCaseCompare"); 940b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestUCaseMap, "tsutil/cstrcase/TestUCaseMap"); 941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_BREAK_ITERATION 942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestUCaseMapToTitle, "tsutil/cstrcase/TestUCaseMapToTitle"); 943b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 944b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 945