1/********************************************************************
2 * COPYRIGHT:
3 * Copyright (c) 1997-2009, International Business Machines Corporation and
4 * others. All Rights Reserved.
5 ********************************************************************/
6/********************************************************************************
7*
8* File CTURTST.C
9*
10* Modification History:
11*        Name                     Description
12*     Madhu Katragadda            Ported for C API
13*********************************************************************************/
14/**
15 * CollationTurkishTest is a third level test class.  This tests the locale
16 * specific primary, secondary and tertiary rules.  For example, the ignorable
17 * character '-' in string "black-bird".  The en_US locale uses the default
18 * collation rules as its sorting sequence.
19 */
20
21#include <stdlib.h>
22
23#include "unicode/utypes.h"
24
25#if !UCONFIG_NO_COLLATION
26
27#include "unicode/ucol.h"
28#include "unicode/uloc.h"
29#include "cintltst.h"
30#include "ccolltst.h"
31#include "callcoll.h"
32#include "cturtst.h"
33#include "unicode/ustring.h"
34#include "string.h"
35
36static UCollator *myCollation;
37const static UChar testSourceCases[][MAX_TOKEN_LEN] = {
38    {0x0073/*'s'*/, 0x0327, 0x0000},
39    {0x0076/*'v'*/, 0x00E4, 0x0074/*'t'*/, 0x0000},
40    {0x006f/*'o'*/, 0x006c/*'l'*/, 0x0064/*'d'*/, 0x0000},
41    {0x00FC, 0x006f/*'o'*/, 0x0069/*'i'*/, 0x0064/*'d'*/, 0x0000},
42    {0x0068/*'h'*/, 0x011E, 0x0061/*'a'*/, 0x006c/*'l'*/, 0x0074/*'t'*/, 0x0000},
43    {0x0073/*'s'*/, 0x0074/*'t'*/, 0x0072/*'r'*/, 0x0065/*'e'*/, 0x0073/*'s'*/, 0x015E, 0x0000},
44    {0x0076/*'v'*/, 0x006f/*'o'*/, 0x0131, 0x0064/*'d'*/, 0x0000},
45    {0x0069/*'i'*/, 0x0064/*'d'*/, 0x0065/*'e'*/, 0x0061/*'a'*/, 0x0000},
46    {0x00FC, 0x006f/*'o'*/, 0x0069/*'i'*/, 0x0064 /*d'*/, 0x0000},
47    {0x0076/*'v'*/, 0x006f/*'o'*/, 0x0131, 0x0064 /*d'*/, 0x0000},
48    {0x0069/*'i'*/, 0x0064/*'d'*/, 0x0065/*'e'*/, 0x0061/*'a'*/, 0x0000},
49};
50
51const static UChar testTargetCases[][MAX_TOKEN_LEN] = {
52    {0x0075/*'u'*/, 0x0308, 0x0000},
53    {0x0076/*'v'*/, 0x0062/*'b'*/, 0x0074/*'t'*/, 0x0000},
54    {0x00D6, 0x0061/*'a'*/, 0x0079/*'y'*/, 0x0000},
55    {0x0076/*'v'*/, 0x006f/*'o'*/, 0x0069/*'i'*/, 0x0064 /*d'*/, 0x0000},
56    {0x0068/*'h'*/, 0x0061/*'a'*/,  0x006c/*'l'*/, 0x0074/*'t'*/, 0x0000},
57    {0x015E, 0x0074/*'t'*/, 0x0072/*'r'*/, 0x0065/*'e'*/, 0x015E, 0x0073/*'s'*/, 0x0000},
58    {0x0076/*'v'*/, 0x006f/*'o'*/, 0x0069/*'i'*/, 0x0064 /*d'*/, 0x0000},
59    {0x0049/*'I'*/, 0x0064/*'d'*/, 0x0065/*'e'*/, 0x0061/*'a'*/, 0x0000},
60    {0x0076/*'v'*/, 0x006f/*'o'*/, 0x0069/*'i'*/, 0x0064 /*d'*/, 0x0000},
61    {0x0076/*'v'*/, 0x006f/*'o'*/, 0x0069/*'i'*/, 0x0064 /*d'*/, 0x0000},
62    {0x0049/*'I'*/, 0x0064/*'d'*/, 0x0065/*'e'*/, 0x0061/*'a'*/, 0x0000},
63};
64
65const static UCollationResult results[] = {
66    UCOL_LESS,
67    UCOL_LESS,
68    UCOL_LESS,
69    UCOL_LESS,
70    UCOL_GREATER,
71    UCOL_LESS,
72    UCOL_LESS,
73    UCOL_GREATER,
74    /* test priamry > 8 */
75    UCOL_LESS,
76    UCOL_LESS, /*Turkish translator made a primary differnce between dotted and dotless I */
77    UCOL_GREATER
78};
79
80
81
82void addTurkishCollTest(TestNode** root)
83{
84
85    addTest(root, &TestPrimary, "tscoll/cturtst/TestPrimary");
86    addTest(root, &TestTertiary, "tscoll/cturtst/TestTertiary");
87
88
89}
90
91static void TestTertiary( )
92{
93
94    int32_t i;
95
96    UErrorCode status = U_ZERO_ERROR;
97    myCollation = ucol_open("tr", &status);
98    if(U_FAILURE(status)){
99        log_err_status(status, "ERROR: in creation of rule based collator: %s\n", myErrorName(status));
100        return;
101    }
102    log_verbose("Testing Turkish Collation with Tertiary strength\n");
103    ucol_setStrength(myCollation, UCOL_TERTIARY);
104    for (i = 0; i < 8 ; i++)
105    {
106        doTest(myCollation, testSourceCases[i], testTargetCases[i], results[i]);
107    }
108    ucol_close(myCollation);
109}
110
111static void TestPrimary()
112{
113
114    int32_t i;
115
116    UErrorCode status = U_ZERO_ERROR;
117    myCollation = ucol_open("tr", &status);
118    if(U_FAILURE(status)){
119        log_err_status(status, "ERROR: in creation of rule based collator: %s\n", myErrorName(status));
120        return;
121    }
122    log_verbose("Testing Turkish Collation with Primary strength\n");
123    ucol_setStrength(myCollation, UCOL_PRIMARY);
124    for (i = 8; i < 11; i++)
125    {
126        doTest(myCollation, testSourceCases[i], testTargetCases[i], results[i]);
127    }
128    ucol_close(myCollation);
129}
130
131#endif /* #if !UCONFIG_NO_COLLATION */
132