]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-4_4_2-src/main/tests/core/src/com/ibm/icu/dev/test/util/TextTrieMapTest.java
go
[Dictionary.git] / jars / icu4j-4_4_2-src / main / tests / core / src / com / ibm / icu / dev / test / util / TextTrieMapTest.java
1 /*\r
2  *******************************************************************************\r
3  * Copyright (C) 2007, International Business Machines Corporation and         *\r
4  * others. All Rights Reserved.                                                *\r
5  *******************************************************************************\r
6 */\r
7 package com.ibm.icu.dev.test.util;\r
8 \r
9 import java.util.Iterator;\r
10 \r
11 import com.ibm.icu.dev.test.TestFmwk;\r
12 import com.ibm.icu.impl.TextTrieMap;\r
13 \r
14 public class TextTrieMapTest extends TestFmwk {\r
15 \r
16     private static final Integer SUN = new Integer(1);\r
17     private static final Integer MON = new Integer(2);\r
18     private static final Integer TUE = new Integer(3);\r
19     private static final Integer WED = new Integer(4);\r
20     private static final Integer THU = new Integer(5);\r
21     private static final Integer FRI = new Integer(6);\r
22     private static final Integer SAT = new Integer(7);\r
23 \r
24     private static final Integer FOO = new Integer(-1);\r
25     private static final Integer BAR = new Integer(-2);\r
26     \r
27     private static final Object[][] TESTDATA = {\r
28         {"Sunday", SUN},\r
29         {"Monday", MON},\r
30         {"Tuesday", TUE},\r
31         {"Wednesday", WED},\r
32         {"Thursday", THU},\r
33         {"Friday", FRI},\r
34         {"Saturday", SAT},\r
35         {"Sun", SUN},\r
36         {"Mon", MON},\r
37         {"Tue", TUE},\r
38         {"Wed", WED},\r
39         {"Thu", THU},\r
40         {"Fri", FRI},\r
41         {"Sat", SAT},\r
42         {"S", SUN},\r
43         {"M", MON},\r
44         {"T", TUE},\r
45         {"W", WED},\r
46         {"T", THU},\r
47         {"F", FRI},\r
48         {"S", SAT}\r
49     };\r
50 \r
51     private static final Object[][] TESTCASES = {\r
52         {"Sunday", SUN, SUN},\r
53         {"sunday", null, SUN},\r
54         {"Mo", MON, MON},\r
55         {"mo", null, MON},\r
56         {"Thursday Friday", THU, THU},\r
57         {"T", new Object[]{TUE, THU}, new Object[]{TUE, THU}},\r
58         {"TEST", new Object[]{TUE, THU}, new Object[]{TUE, THU}},\r
59         {"SUN", new Object[]{SUN, SAT}, SUN},\r
60         {"super", null, SUN},\r
61         {"NO", null, null}\r
62     };\r
63     \r
64     public static void main(String[] args) throws Exception {\r
65         TextTrieMapTest test = new TextTrieMapTest();\r
66         test.run(args);\r
67     }\r
68 \r
69     public void TestCaseSensitive() {\r
70         Iterator itr = null;\r
71         TextTrieMap map = new TextTrieMap(false);\r
72         for (int i = 0; i < TESTDATA.length; i++) {\r
73             map.put((String)TESTDATA[i][0], TESTDATA[i][1]);\r
74         }\r
75 \r
76         logln("Test for get(String)");\r
77         for (int i = 0; i < TESTCASES.length; i++) {\r
78             itr = map.get((String)TESTCASES[i][0]);\r
79             checkResult(itr, TESTCASES[i][1]);\r
80         }\r
81 \r
82         logln("Test for get(String, int)");\r
83         StringBuffer textBuf = new StringBuffer();\r
84         for (int i = 0; i < TESTCASES.length; i++) {\r
85             textBuf.setLength(0);\r
86             for (int j = 0; j < i; j++) {\r
87                 textBuf.append('X');\r
88             }\r
89             textBuf.append(TESTCASES[i][0]);\r
90             itr = map.get(textBuf.toString(), i);\r
91             checkResult(itr, TESTCASES[i][1]);\r
92         }\r
93 \r
94         // Add duplicated entry\r
95         map.put("Sunday", FOO);\r
96         // Add duplicated entry with different casing\r
97         map.put("sunday", BAR);\r
98 \r
99         // Make sure the all entries are returned\r
100         itr = map.get("Sunday");\r
101         checkResult(itr, new Object[]{FOO, SUN});\r
102     }\r
103 \r
104     public void TestCaseInsensitive() {\r
105         Iterator itr = null;\r
106         TextTrieMap map = new TextTrieMap(true);\r
107         for (int i = 0; i < TESTDATA.length; i++) {\r
108             map.put((String)TESTDATA[i][0], TESTDATA[i][1]);\r
109         }\r
110 \r
111         logln("Test for get(String)");\r
112         for (int i = 0; i < TESTCASES.length; i++) {\r
113             itr = map.get((String)TESTCASES[i][0]);\r
114             checkResult(itr, TESTCASES[i][2]);\r
115         }\r
116         \r
117         logln("Test for get(String, int)");\r
118         StringBuffer textBuf = new StringBuffer();\r
119         for (int i = 0; i < TESTCASES.length; i++) {\r
120             textBuf.setLength(0);\r
121             for (int j = 0; j < i; j++) {\r
122                 textBuf.append('X');\r
123             }\r
124             textBuf.append(TESTCASES[i][0]);\r
125             itr = map.get(textBuf.toString(), i);\r
126             checkResult(itr, TESTCASES[i][2]);\r
127         }\r
128 \r
129         // Add duplicated entry\r
130         map.put("Sunday", FOO);\r
131         // Add duplicated entry with different casing\r
132         map.put("sunday", BAR);\r
133 \r
134         // Make sure the all entries are returned\r
135         itr = map.get("Sunday");\r
136         checkResult(itr, new Object[]{SUN, FOO, BAR});\r
137     }\r
138 \r
139     private boolean eql(Object o1, Object o2) {\r
140         if (o1 == null || o2 == null) {\r
141             if (o1 == null && o2 == null) {\r
142                 return true;\r
143             }\r
144             return false;\r
145         }\r
146         return o1.equals(o2);\r
147     }\r
148 \r
149     private void checkResult(Iterator itr, Object expected) {\r
150         if (itr == null) {\r
151             if (expected != null) {\r
152                 errln("FAIL: Empty results - Expected: " + expected);\r
153             }\r
154             return;\r
155         }\r
156         if (expected == null && itr != null) {\r
157             errln("FAIL: Empty result is expected");\r
158             return;\r
159         }\r
160 \r
161         Object[] exp;\r
162         if (expected instanceof Object[]) {\r
163             exp = (Object[])expected;\r
164         } else {\r
165             exp = new Object[]{expected};\r
166         }\r
167 \r
168         boolean[] found = new boolean[exp.length];\r
169         while (itr.hasNext()) {\r
170             Object val = itr.next();\r
171             for (int i = 0; i < exp.length; i++) {\r
172                 if (eql(exp[i], val)) {\r
173                     found[i] = true;\r
174                 }\r
175             }\r
176         }\r
177         for (int i = 0; i < exp.length; i++) {\r
178             if (found[i] == false) {\r
179                 errln("FAIL: The search result does not contain " + exp[i]);\r
180             }\r
181         }\r
182     }\r
183 }\r