2 *******************************************************************************
\r
3 * Copyright (C) 2007, International Business Machines Corporation and *
\r
4 * others. All Rights Reserved. *
\r
5 *******************************************************************************
\r
7 package com.ibm.icu.dev.test.util;
\r
9 import java.util.Iterator;
\r
11 import com.ibm.icu.dev.test.TestFmwk;
\r
12 import com.ibm.icu.impl.TextTrieMap;
\r
14 public class TextTrieMapTest extends TestFmwk {
\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
24 private static final Integer FOO = new Integer(-1);
\r
25 private static final Integer BAR = new Integer(-2);
\r
27 private static final Object[][] TESTDATA = {
\r
51 private static final Object[][] TESTCASES = {
\r
52 {"Sunday", SUN, SUN},
\r
53 {"sunday", null, SUN},
\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
64 public static void main(String[] args) throws Exception {
\r
65 TextTrieMapTest test = new TextTrieMapTest();
\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
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
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
89 textBuf.append(TESTCASES[i][0]);
\r
90 itr = map.get(textBuf.toString(), i);
\r
91 checkResult(itr, TESTCASES[i][1]);
\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
99 // Make sure the all entries are returned
\r
100 itr = map.get("Sunday");
\r
101 checkResult(itr, new Object[]{FOO, SUN});
\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
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
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
124 textBuf.append(TESTCASES[i][0]);
\r
125 itr = map.get(textBuf.toString(), i);
\r
126 checkResult(itr, TESTCASES[i][2]);
\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
134 // Make sure the all entries are returned
\r
135 itr = map.get("Sunday");
\r
136 checkResult(itr, new Object[]{SUN, FOO, BAR});
\r
139 private boolean eql(Object o1, Object o2) {
\r
140 if (o1 == null || o2 == null) {
\r
141 if (o1 == null && o2 == null) {
\r
146 return o1.equals(o2);
\r
149 private void checkResult(Iterator itr, Object expected) {
\r
151 if (expected != null) {
\r
152 errln("FAIL: Empty results - Expected: " + expected);
\r
156 if (expected == null && itr != null) {
\r
157 errln("FAIL: Empty result is expected");
\r
162 if (expected instanceof Object[]) {
\r
163 exp = (Object[])expected;
\r
165 exp = new Object[]{expected};
\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
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