1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/******************************************************************** 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * COPYRIGHT: 354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * Copyright (c) 1997-2012, International Business Machines Corporation and 4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * others. All Rights Reserved. 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ********************************************************************/ 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/******************************************************************************** 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* File CCOLLTST.C 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Modification History: 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Name Description 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Madhu Katragadda Creation 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru********************************************************************************* 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <stdio.h> 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_COLLATION 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cintltst.h" 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "ccolltst.h" 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ucol.h" 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ustring.h" 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cmemory.h" 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid addCollTest(TestNode** root); 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid addCollTest(TestNode** root) 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addCollAPITest(root); 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addCurrencyCollTest(root); 3354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#if !UCONFIG_NO_NORMALIZATION 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addNormTest(root); 3554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#endif 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addGermanCollTest(root); 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addSpanishCollTest(root); 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addFrenchCollTest(root); 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addKannaCollTest(root); 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTurkishCollTest(root); 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addEnglishCollTest(root); 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addFinnishCollTest(root); 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* WEIVTODO: return tests here */ 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addRuleBasedCollTest(root); 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addCollIterTest(root); 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addAllCollTest(root); 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addMiscCollTest(root); 4950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if !UCONFIG_NO_BREAK_ITERATION && !UCONFIG_NO_FILE_IO 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addSearchTest(root); 51c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#endif 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*Internal functions used*/ 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic char* dumpSk(uint8_t *sourceKey, char *sk) { 58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t kLen = (uint32_t)strlen((const char *)sourceKey); 59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t i = 0; 60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *sk = 0; 62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i = 0; i<kLen; i++) { 64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sprintf(sk+2*i, "%02X", sourceKey[i]); 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return sk; 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 69c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Querustatic const char *getCompareResult(UCollationResult result) 70c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru{ 71c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (result == UCOL_LESS) 72c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 73c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru return "LESS"; 74c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 75c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru else if (result == UCOL_EQUAL) 76c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 77c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru return "EQUAL"; 78c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 79c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru else if (result == UCOL_GREATER) 80c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 81c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru return "GREATER"; 82c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 83c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru return "invalid UCollationResult?"; 84c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru} 85c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid reportCResult( const UChar source[], const UChar target[], 87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint8_t *sourceKey, uint8_t *targetKey, 88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCollationResult compareResult, 89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCollationResult keyResult, 90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCollationResult incResult, 91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCollationResult expectedResult ) 92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (expectedResult < -1 || expectedResult > 1) 94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("***** invalid call to reportCResult ****\n"); 96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (compareResult != expectedResult) 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Compare(%s , %s) returned: %s expected: %s\n", aescstrdup(source,-1), aescstrdup(target,-1), 102c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru getCompareResult(compareResult), getCompareResult(expectedResult) ); 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (incResult != expectedResult) 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("incCompare(%s , %s) returned: %s expected: %s\n", aescstrdup(source,-1), aescstrdup(target,-1), 108c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru getCompareResult(incResult), getCompareResult(expectedResult) ); 109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (keyResult != expectedResult) 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("KeyCompare(%s , %s) returned: %s expected: %s\n", aescstrdup(source,-1), aescstrdup(target,-1), 114c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru getCompareResult(keyResult), getCompareResult(expectedResult) ); 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (keyResult != compareResult) 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("difference between sortkey and compare result for (%s , %s) Keys: %s compare %s\n", aescstrdup(source,-1), aescstrdup(target,-1), 120c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru getCompareResult(keyResult), getCompareResult(compareResult)); 121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(keyResult != expectedResult || keyResult != compareResult) 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 125c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru char sk[10000]; 126c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru log_verbose("SortKey1: %s\n", dumpSk(sourceKey, sk)); 127c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru log_verbose("SortKey2: %s\n", dumpSk(targetKey, sk)); 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_COLLATION */ 132