2 *******************************************************************************
\r
3 * Copyright (C) 1996-2006, International Business Machines Corporation and *
\r
4 * others. All Rights Reserved. *
\r
5 *******************************************************************************
\r
8 package com.ibm.icu.dev.test.lang;
\r
10 import com.ibm.icu.lang.UCharacter;
\r
11 import com.ibm.icu.lang.UCharacterCategory;
\r
12 import java.io.FileWriter;
\r
13 import java.io.PrintWriter;
\r
14 import java.util.Hashtable;
\r
15 import java.util.Enumeration;
\r
18 * A class to compare the difference in methods between java.lang.Character and
\r
20 * @author Syn Wee Quek
\r
21 * @since oct 06 2000
\r
22 * @see com.ibm.icu.lang.UCharacter
\r
25 public final class UCharacterCompare
\r
27 // private variables ================================================
\r
29 private static Hashtable m_hashtable_ = new Hashtable();
\r
31 // public methods ======================================================
\r
34 * Main testing method
\r
36 public static void main(String arg[])
\r
38 System.out.println("Starting character compare");
\r
42 if (arg.length == 0)
\r
43 f = new FileWriter("compare.txt");
\r
45 f = new FileWriter(arg[0]);
\r
46 PrintWriter p = new PrintWriter(f);
\r
47 p.print("char character name ");
\r
48 p.println("method name ucharacter character");
\r
49 for (char i = Character.MIN_VALUE; i < Character.MAX_VALUE; i ++)
\r
51 System.out.println("character \\u" + Integer.toHexString(i));
\r
52 if (UCharacter.isDefined(i) != Character.isDefined(i))
\r
53 trackDifference(p, i, "isDefined()", "" + UCharacter.isDefined(i),
\r
54 "" + Character.isDefined(i));
\r
57 if (UCharacter.digit(i, 10) != Character.digit(i, 10))
\r
58 trackDifference(p, i, "digit()", "" + UCharacter.digit(i, 10),
\r
59 "" + Character.digit(i, 10));
\r
60 if (UCharacter.getNumericValue(i) != Character.getNumericValue(i))
\r
61 trackDifference(p, i, "getNumericValue()",
\r
62 "" + UCharacter.getNumericValue(i),
\r
63 "" + Character.getNumericValue(i));
\r
64 if (!compareType(UCharacter.getType(i), Character.getType(i)))
\r
65 trackDifference(p, i, "getType()", "" + UCharacter.getType(i),
\r
66 "" + Character.getType(i));
\r
67 if (UCharacter.isDigit(i) != Character.isDigit(i))
\r
68 trackDifference(p, i, "isDigit()",
\r
69 "" + UCharacter.isDigit(i),
\r
70 "" + Character.isDigit(i));
\r
71 if (UCharacter.isISOControl(i) != Character.isISOControl(i))
\r
72 trackDifference(p, i, "isISOControl()",
\r
73 "" + UCharacter.isISOControl(i),
\r
74 "" + Character.isISOControl(i));
\r
75 if (UCharacter.isLetter(i) != Character.isLetter(i))
\r
76 trackDifference(p, i, "isLetter()", "" + UCharacter.isLetter(i),
\r
77 "" + Character.isLetter(i));
\r
78 if (UCharacter.isLetterOrDigit(i) != Character.isLetterOrDigit(i))
\r
79 trackDifference(p, i, "isLetterOrDigit()",
\r
80 "" + UCharacter.isLetterOrDigit(i),
\r
81 "" + Character.isLetterOrDigit(i));
\r
82 if (UCharacter.isLowerCase(i) != Character.isLowerCase(i))
\r
83 trackDifference(p, i, "isLowerCase()",
\r
84 "" + UCharacter.isLowerCase(i),
\r
85 "" + Character.isLowerCase(i));
\r
86 if (UCharacter.isWhitespace(i) != Character.isWhitespace(i))
\r
87 trackDifference(p, i, "isWhitespace()",
\r
88 "" + UCharacter.isWhitespace(i),
\r
89 "" + Character.isWhitespace(i));
\r
90 if (UCharacter.isSpaceChar(i) != Character.isSpaceChar(i))
\r
91 trackDifference(p, i, "isSpaceChar()",
\r
92 "" + UCharacter.isSpaceChar(i),
\r
93 "" + Character.isSpaceChar(i));
\r
94 if (UCharacter.isTitleCase(i) != Character.isTitleCase(i))
\r
95 trackDifference(p, i, "isTitleChar()",
\r
96 "" + UCharacter.isTitleCase(i),
\r
97 "" + Character.isTitleCase(i));
\r
98 if (UCharacter.isUnicodeIdentifierPart(i) !=
\r
99 Character.isUnicodeIdentifierPart(i))
\r
100 trackDifference(p, i, "isUnicodeIdentifierPart()",
\r
101 "" + UCharacter.isUnicodeIdentifierPart(i),
\r
102 "" + Character.isUnicodeIdentifierPart(i));
\r
103 if (UCharacter.isUnicodeIdentifierStart(i) !=
\r
104 Character.isUnicodeIdentifierStart(i))
\r
105 trackDifference(p, i, "isUnicodeIdentifierStart()",
\r
106 "" + UCharacter.isUnicodeIdentifierStart(i),
\r
107 "" + Character.isUnicodeIdentifierStart(i));
\r
108 if (UCharacter.isIdentifierIgnorable(i) !=
\r
109 Character.isIdentifierIgnorable(i))
\r
110 trackDifference(p, i, "isIdentifierIgnorable()",
\r
111 "" + UCharacter.isIdentifierIgnorable(i),
\r
112 "" + Character.isIdentifierIgnorable(i));
\r
113 if (UCharacter.isUpperCase(i) != Character.isUpperCase(i))
\r
114 trackDifference(p, i, "isUpperCase()",
\r
115 "" + UCharacter.isUpperCase(i),
\r
116 "" + Character.isUpperCase(i));
\r
117 if (UCharacter.toLowerCase(i) != Character.toLowerCase(i))
\r
118 trackDifference(p, i, "toLowerCase()",
\r
119 Integer.toHexString(UCharacter.toLowerCase(i)),
\r
120 Integer.toHexString(Character.toLowerCase(i)));
\r
121 if (!UCharacter.toString(i).equals(new Character(i).toString()))
\r
122 trackDifference(p, i, "toString()",
\r
123 UCharacter.toString(i),
\r
124 new Character(i).toString());
\r
125 if (UCharacter.toTitleCase(i) != Character.toTitleCase(i))
\r
126 trackDifference(p, i, "toTitleCase()",
\r
127 Integer.toHexString(UCharacter.toTitleCase(i)),
\r
128 Integer.toHexString(Character.toTitleCase(i)));
\r
129 if (UCharacter.toUpperCase(i) != Character.toUpperCase(i))
\r
130 trackDifference(p, i, "toUpperCase()",
\r
131 Integer.toHexString(UCharacter.toUpperCase(i)),
\r
132 Integer.toHexString(Character.toUpperCase(i)));
\r
138 catch (Exception e)
\r
140 e.printStackTrace();
\r
144 // private methods ===================================================
\r
148 * @param uchartype UCharacter type
\r
149 * @param jchartype java.lang.Character type
\r
151 private static boolean compareType(int uchartype, int jchartype)
\r
153 if (uchartype == UCharacterCategory.UNASSIGNED &&
\r
154 jchartype == Character.UNASSIGNED)
\r
156 if (uchartype == UCharacterCategory.UPPERCASE_LETTER &&
\r
157 jchartype == Character.UPPERCASE_LETTER)
\r
159 if (uchartype == UCharacterCategory.LOWERCASE_LETTER &&
\r
160 jchartype == Character.LOWERCASE_LETTER)
\r
162 if (uchartype == UCharacterCategory.TITLECASE_LETTER &&
\r
163 jchartype == Character.TITLECASE_LETTER)
\r
165 if (uchartype == UCharacterCategory.MODIFIER_LETTER &&
\r
166 jchartype == Character.MODIFIER_LETTER)
\r
168 if (uchartype == UCharacterCategory.OTHER_LETTER &&
\r
169 jchartype == Character.OTHER_LETTER)
\r
171 if (uchartype == UCharacterCategory.NON_SPACING_MARK &&
\r
172 jchartype == Character.NON_SPACING_MARK)
\r
174 if (uchartype == UCharacterCategory.ENCLOSING_MARK &&
\r
175 jchartype == Character.ENCLOSING_MARK)
\r
177 if (uchartype == UCharacterCategory.COMBINING_SPACING_MARK &&
\r
178 jchartype == Character.COMBINING_SPACING_MARK)
\r
180 if (uchartype == UCharacterCategory.DECIMAL_DIGIT_NUMBER &&
\r
181 jchartype == Character.DECIMAL_DIGIT_NUMBER)
\r
183 if (uchartype == UCharacterCategory.LETTER_NUMBER &&
\r
184 jchartype == Character.LETTER_NUMBER)
\r
186 if (uchartype == UCharacterCategory.OTHER_NUMBER &&
\r
187 jchartype == Character.OTHER_NUMBER)
\r
189 if (uchartype == UCharacterCategory.SPACE_SEPARATOR &&
\r
190 jchartype == Character.SPACE_SEPARATOR)
\r
192 if (uchartype == UCharacterCategory.LINE_SEPARATOR &&
\r
193 jchartype == Character.LINE_SEPARATOR)
\r
195 if (uchartype == UCharacterCategory.PARAGRAPH_SEPARATOR &&
\r
196 jchartype == Character.PARAGRAPH_SEPARATOR)
\r
198 if (uchartype == UCharacterCategory.CONTROL &&
\r
199 jchartype == Character.CONTROL)
\r
201 if (uchartype == UCharacterCategory.FORMAT &&
\r
202 jchartype == Character.FORMAT)
\r
204 if (uchartype == UCharacterCategory.PRIVATE_USE &&
\r
205 jchartype == Character.PRIVATE_USE)
\r
207 if (uchartype == UCharacterCategory.SURROGATE &&
\r
208 jchartype == Character.SURROGATE)
\r
210 if (uchartype == UCharacterCategory.DASH_PUNCTUATION &&
\r
211 jchartype == Character.DASH_PUNCTUATION)
\r
213 if (uchartype == UCharacterCategory.START_PUNCTUATION &&
\r
214 jchartype == Character.START_PUNCTUATION)
\r
216 if (uchartype == UCharacterCategory.END_PUNCTUATION &&
\r
217 jchartype == Character.END_PUNCTUATION)
\r
219 if (uchartype == UCharacterCategory.CONNECTOR_PUNCTUATION &&
\r
220 jchartype == Character.CONNECTOR_PUNCTUATION)
\r
222 if (uchartype == UCharacterCategory.OTHER_PUNCTUATION &&
\r
223 jchartype == Character.OTHER_PUNCTUATION)
\r
225 if (uchartype == UCharacterCategory.MATH_SYMBOL &&
\r
226 jchartype == Character.MATH_SYMBOL)
\r
228 if (uchartype == UCharacterCategory.CURRENCY_SYMBOL &&
\r
229 jchartype == Character.CURRENCY_SYMBOL)
\r
231 if (uchartype == UCharacterCategory.MODIFIER_SYMBOL &&
\r
232 jchartype == Character.MODIFIER_SYMBOL)
\r
234 if (uchartype == UCharacterCategory.OTHER_SYMBOL &&
\r
235 jchartype == Character.OTHER_SYMBOL)
\r
237 if (uchartype == UCharacterCategory.INITIAL_PUNCTUATION &&
\r
238 jchartype == Character.START_PUNCTUATION)
\r
240 if (uchartype == UCharacterCategory.FINAL_PUNCTUATION &&
\r
241 jchartype == Character.END_PUNCTUATION)
\r
243 /*if (uchartype == UCharacterCategory.GENERAL_OTHER_TYPES &&
\r
244 jchartype == Character.GENERAL_OTHER_TYPES)
\r
250 * Difference writing to file
\r
251 * @param f file outputstream
\r
252 * @param ch code point
\r
253 * @param method for testing
\r
254 * @param ucharval UCharacter value after running method
\r
255 * @param charval Character value after running method
\r
257 private static void trackDifference(PrintWriter f, int ch, String method,
\r
258 String ucharval, String charval)
\r
261 if (m_hashtable_.containsKey(method))
\r
263 Integer value = (Integer)m_hashtable_.get(method);
\r
264 m_hashtable_.put(method, new Integer(value.intValue() + 1));
\r
267 m_hashtable_.put(method, new Integer(1));
\r
269 String temp = Integer.toHexString(ch);
\r
270 StringBuffer s = new StringBuffer(temp);
\r
271 for (int i = 0; i < 6 - temp.length(); i ++)
\r
273 temp = UCharacter.getExtendedName(ch);
\r
277 for (int i = 0; i < 73 - temp.length(); i ++)
\r
281 for (int i = 0; i < 27 - method.length(); i ++)
\r
283 s.append(ucharval);
\r
284 for (int i = 0; i < 11 - ucharval.length(); i ++)
\r
287 f.println(s.toString());
\r
291 * Does up a summary of the differences
\r
292 * @param f file outputstream
\r
294 private static void summary(PrintWriter f)
\r
296 f.println("==================================================");
\r
297 f.println("Summary of differences");
\r
298 for (Enumeration e = m_hashtable_.keys() ; e.hasMoreElements() ;)
\r
300 StringBuffer method = new StringBuffer((String)e.nextElement());
\r
301 int count = ((Integer)m_hashtable_.get(method.toString())).intValue();
\r
302 for (int i = 30 - method.length(); i > 0; i --)
\r
303 method.append(' ');
\r
304 f.println(method + " " + count);
\r