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