16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/******************************************************************** 26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * COPYRIGHT: 36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copyright (c) 1997-2012, International Business Machines Corporation and 46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * others. All Rights Reserved. 56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ********************************************************************/ 66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/******************************************************************************** 76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* File CCOLLTST.C 96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Modification History: 116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Name Description 126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Madhu Katragadda Creation 136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org********************************************************************************* 146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/ 156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include <stdio.h> 166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h" 186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_COLLATION 206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "cintltst.h" 226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "ccolltst.h" 236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/ucol.h" 246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/ustring.h" 256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "cmemory.h" 266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid addCollTest(TestNode** root); 286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid addCollTest(TestNode** root) 306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addCollAPITest(root); 326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addCurrencyCollTest(root); 336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_NORMALIZATION 346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addNormTest(root); 356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addGermanCollTest(root); 376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addSpanishCollTest(root); 386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addFrenchCollTest(root); 396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addKannaCollTest(root); 406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTurkishCollTest(root); 416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addEnglishCollTest(root); 426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addFinnishCollTest(root); 436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* WEIVTODO: return tests here */ 456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addRuleBasedCollTest(root); 466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addCollIterTest(root); 476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addAllCollTest(root); 486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addMiscCollTest(root); 496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_BREAK_ITERATION && !UCONFIG_NO_FILE_IO 506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addSearchTest(root); 516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*Internal functions used*/ 576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic char* dumpSk(uint8_t *sourceKey, char *sk) { 586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uint32_t kLen = (uint32_t)strlen((const char *)sourceKey); 596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uint32_t i = 0; 606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *sk = 0; 626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i = 0; i<kLen; i++) { 646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sprintf(sk+2*i, "%02X", sourceKey[i]); 656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return sk; 676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const char *getCompareResult(UCollationResult result) 706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (result == UCOL_LESS) 726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return "LESS"; 746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else if (result == UCOL_EQUAL) 766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return "EQUAL"; 786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else if (result == UCOL_GREATER) 806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return "GREATER"; 826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return "invalid UCollationResult?"; 846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid reportCResult( const UChar source[], const UChar target[], 876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uint8_t *sourceKey, uint8_t *targetKey, 886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCollationResult compareResult, 896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCollationResult keyResult, 906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCollationResult incResult, 916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCollationResult expectedResult ) 926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (expectedResult < -1 || expectedResult > 1) 946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("***** invalid call to reportCResult ****\n"); 966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (compareResult != expectedResult) 1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Compare(%s , %s) returned: %s expected: %s\n", aescstrdup(source,-1), aescstrdup(target,-1), 1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org getCompareResult(compareResult), getCompareResult(expectedResult) ); 1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (incResult != expectedResult) 1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("incCompare(%s , %s) returned: %s expected: %s\n", aescstrdup(source,-1), aescstrdup(target,-1), 1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org getCompareResult(incResult), getCompareResult(expectedResult) ); 1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (keyResult != expectedResult) 1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("KeyCompare(%s , %s) returned: %s expected: %s\n", aescstrdup(source,-1), aescstrdup(target,-1), 1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org getCompareResult(keyResult), getCompareResult(expectedResult) ); 1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (keyResult != compareResult) 1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("difference between sortkey and compare result for (%s , %s) Keys: %s compare %s\n", aescstrdup(source,-1), aescstrdup(target,-1), 1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org getCompareResult(keyResult), getCompareResult(compareResult)); 1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(keyResult != expectedResult || keyResult != compareResult) 1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char sk[10000]; 1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("SortKey1: %s\n", dumpSk(sourceKey, sk)); 1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("SortKey2: %s\n", dumpSk(targetKey, sk)); 1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif /* #if !UCONFIG_NO_COLLATION */ 132