2 *******************************************************************************
\r
3 * Copyright (C) 1996-2010, 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 java.io.FileWriter;
\r
11 import java.io.PrintWriter;
\r
12 import java.util.Enumeration;
\r
13 import java.util.Hashtable;
\r
15 import com.ibm.icu.lang.UCharacter;
\r
16 import com.ibm.icu.lang.UCharacterCategory;
\r
19 * A class to compare the difference in methods between java.lang.Character and
\r
21 * @author Syn Wee Quek
\r
22 * @since oct 06 2000
\r
23 * @see com.ibm.icu.lang.UCharacter
\r
26 public final class UCharacterCompare
\r
28 // private variables ================================================
\r
30 private static Hashtable m_hashtable_ = new Hashtable();
\r
32 // public methods ======================================================
\r
35 * Main testing method
\r
37 public static void main(String arg[])
\r
39 System.out.println("Starting character compare");
\r
43 if (arg.length == 0)
\r
44 f = new FileWriter("compare.txt");
\r
46 f = new FileWriter(arg[0]);
\r
47 PrintWriter p = new PrintWriter(f);
\r
48 p.print("char character name ");
\r
49 p.println("method name ucharacter character");
\r
50 for (char i = Character.MIN_VALUE; i < Character.MAX_VALUE; i ++)
\r
52 System.out.println("character \\u" + Integer.toHexString(i));
\r
53 if (UCharacter.isDefined(i) != Character.isDefined(i))
\r
54 trackDifference(p, i, "isDefined()", "" + UCharacter.isDefined(i),
\r
55 "" + Character.isDefined(i));
\r
58 if (UCharacter.digit(i, 10) != Character.digit(i, 10))
\r
59 trackDifference(p, i, "digit()", "" + UCharacter.digit(i, 10),
\r
60 "" + Character.digit(i, 10));
\r
61 if (UCharacter.getNumericValue(i) != Character.getNumericValue(i))
\r
62 trackDifference(p, i, "getNumericValue()",
\r
63 "" + UCharacter.getNumericValue(i),
\r
64 "" + Character.getNumericValue(i));
\r
65 if (!compareType(UCharacter.getType(i), Character.getType(i)))
\r
66 trackDifference(p, i, "getType()", "" + UCharacter.getType(i),
\r
67 "" + Character.getType(i));
\r
68 if (UCharacter.isDigit(i) != Character.isDigit(i))
\r
69 trackDifference(p, i, "isDigit()",
\r
70 "" + UCharacter.isDigit(i),
\r
71 "" + Character.isDigit(i));
\r
72 if (UCharacter.isISOControl(i) != Character.isISOControl(i))
\r
73 trackDifference(p, i, "isISOControl()",
\r
74 "" + UCharacter.isISOControl(i),
\r
75 "" + Character.isISOControl(i));
\r
76 if (UCharacter.isLetter(i) != Character.isLetter(i))
\r
77 trackDifference(p, i, "isLetter()", "" + UCharacter.isLetter(i),
\r
78 "" + Character.isLetter(i));
\r
79 if (UCharacter.isLetterOrDigit(i) != Character.isLetterOrDigit(i))
\r
80 trackDifference(p, i, "isLetterOrDigit()",
\r
81 "" + UCharacter.isLetterOrDigit(i),
\r
82 "" + Character.isLetterOrDigit(i));
\r
83 if (UCharacter.isLowerCase(i) != Character.isLowerCase(i))
\r
84 trackDifference(p, i, "isLowerCase()",
\r
85 "" + UCharacter.isLowerCase(i),
\r
86 "" + Character.isLowerCase(i));
\r
87 if (UCharacter.isWhitespace(i) != Character.isWhitespace(i))
\r
88 trackDifference(p, i, "isWhitespace()",
\r
89 "" + UCharacter.isWhitespace(i),
\r
90 "" + Character.isWhitespace(i));
\r
91 if (UCharacter.isSpaceChar(i) != Character.isSpaceChar(i))
\r
92 trackDifference(p, i, "isSpaceChar()",
\r
93 "" + UCharacter.isSpaceChar(i),
\r
94 "" + Character.isSpaceChar(i));
\r
95 if (UCharacter.isTitleCase(i) != Character.isTitleCase(i))
\r
96 trackDifference(p, i, "isTitleChar()",
\r
97 "" + UCharacter.isTitleCase(i),
\r
98 "" + Character.isTitleCase(i));
\r
99 if (UCharacter.isUnicodeIdentifierPart(i) !=
\r
100 Character.isUnicodeIdentifierPart(i))
\r
101 trackDifference(p, i, "isUnicodeIdentifierPart()",
\r
102 "" + UCharacter.isUnicodeIdentifierPart(i),
\r
103 "" + Character.isUnicodeIdentifierPart(i));
\r
104 if (UCharacter.isUnicodeIdentifierStart(i) !=
\r
105 Character.isUnicodeIdentifierStart(i))
\r
106 trackDifference(p, i, "isUnicodeIdentifierStart()",
\r
107 "" + UCharacter.isUnicodeIdentifierStart(i),
\r
108 "" + Character.isUnicodeIdentifierStart(i));
\r
109 if (UCharacter.isIdentifierIgnorable(i) !=
\r
110 Character.isIdentifierIgnorable(i))
\r
111 trackDifference(p, i, "isIdentifierIgnorable()",
\r
112 "" + UCharacter.isIdentifierIgnorable(i),
\r
113 "" + Character.isIdentifierIgnorable(i));
\r
114 if (UCharacter.isUpperCase(i) != Character.isUpperCase(i))
\r
115 trackDifference(p, i, "isUpperCase()",
\r
116 "" + UCharacter.isUpperCase(i),
\r
117 "" + Character.isUpperCase(i));
\r
118 if (UCharacter.toLowerCase(i) != Character.toLowerCase(i))
\r
119 trackDifference(p, i, "toLowerCase()",
\r
120 Integer.toHexString(UCharacter.toLowerCase(i)),
\r
121 Integer.toHexString(Character.toLowerCase(i)));
\r
122 if (!UCharacter.toString(i).equals(new Character(i).toString()))
\r
123 trackDifference(p, i, "toString()",
\r
124 UCharacter.toString(i),
\r
125 new Character(i).toString());
\r
126 if (UCharacter.toTitleCase(i) != Character.toTitleCase(i))
\r
127 trackDifference(p, i, "toTitleCase()",
\r
128 Integer.toHexString(UCharacter.toTitleCase(i)),
\r
129 Integer.toHexString(Character.toTitleCase(i)));
\r
130 if (UCharacter.toUpperCase(i) != Character.toUpperCase(i))
\r
131 trackDifference(p, i, "toUpperCase()",
\r
132 Integer.toHexString(UCharacter.toUpperCase(i)),
\r
133 Integer.toHexString(Character.toUpperCase(i)));
\r
139 catch (Exception e)
\r
141 e.printStackTrace();
\r
145 // private methods ===================================================
\r
149 * @param uchartype UCharacter type
\r
150 * @param jchartype java.lang.Character type
\r
152 private static boolean compareType(int uchartype, int jchartype)
\r
154 if (uchartype == UCharacterCategory.UNASSIGNED &&
\r
155 jchartype == Character.UNASSIGNED)
\r
157 if (uchartype == UCharacterCategory.UPPERCASE_LETTER &&
\r
158 jchartype == Character.UPPERCASE_LETTER)
\r
160 if (uchartype == UCharacterCategory.LOWERCASE_LETTER &&
\r
161 jchartype == Character.LOWERCASE_LETTER)
\r
163 if (uchartype == UCharacterCategory.TITLECASE_LETTER &&
\r
164 jchartype == Character.TITLECASE_LETTER)
\r
166 if (uchartype == UCharacterCategory.MODIFIER_LETTER &&
\r
167 jchartype == Character.MODIFIER_LETTER)
\r
169 if (uchartype == UCharacterCategory.OTHER_LETTER &&
\r
170 jchartype == Character.OTHER_LETTER)
\r
172 if (uchartype == UCharacterCategory.NON_SPACING_MARK &&
\r
173 jchartype == Character.NON_SPACING_MARK)
\r
175 if (uchartype == UCharacterCategory.ENCLOSING_MARK &&
\r
176 jchartype == Character.ENCLOSING_MARK)
\r
178 if (uchartype == UCharacterCategory.COMBINING_SPACING_MARK &&
\r
179 jchartype == Character.COMBINING_SPACING_MARK)
\r
181 if (uchartype == UCharacterCategory.DECIMAL_DIGIT_NUMBER &&
\r
182 jchartype == Character.DECIMAL_DIGIT_NUMBER)
\r
184 if (uchartype == UCharacterCategory.LETTER_NUMBER &&
\r
185 jchartype == Character.LETTER_NUMBER)
\r
187 if (uchartype == UCharacterCategory.OTHER_NUMBER &&
\r
188 jchartype == Character.OTHER_NUMBER)
\r
190 if (uchartype == UCharacterCategory.SPACE_SEPARATOR &&
\r
191 jchartype == Character.SPACE_SEPARATOR)
\r
193 if (uchartype == UCharacterCategory.LINE_SEPARATOR &&
\r
194 jchartype == Character.LINE_SEPARATOR)
\r
196 if (uchartype == UCharacterCategory.PARAGRAPH_SEPARATOR &&
\r
197 jchartype == Character.PARAGRAPH_SEPARATOR)
\r
199 if (uchartype == UCharacterCategory.CONTROL &&
\r
200 jchartype == Character.CONTROL)
\r
202 if (uchartype == UCharacterCategory.FORMAT &&
\r
203 jchartype == Character.FORMAT)
\r
205 if (uchartype == UCharacterCategory.PRIVATE_USE &&
\r
206 jchartype == Character.PRIVATE_USE)
\r
208 if (uchartype == UCharacterCategory.SURROGATE &&
\r
209 jchartype == Character.SURROGATE)
\r
211 if (uchartype == UCharacterCategory.DASH_PUNCTUATION &&
\r
212 jchartype == Character.DASH_PUNCTUATION)
\r
214 if (uchartype == UCharacterCategory.START_PUNCTUATION &&
\r
215 jchartype == Character.START_PUNCTUATION)
\r
217 if (uchartype == UCharacterCategory.END_PUNCTUATION &&
\r
218 jchartype == Character.END_PUNCTUATION)
\r
220 if (uchartype == UCharacterCategory.CONNECTOR_PUNCTUATION &&
\r
221 jchartype == Character.CONNECTOR_PUNCTUATION)
\r
223 if (uchartype == UCharacterCategory.OTHER_PUNCTUATION &&
\r
224 jchartype == Character.OTHER_PUNCTUATION)
\r
226 if (uchartype == UCharacterCategory.MATH_SYMBOL &&
\r
227 jchartype == Character.MATH_SYMBOL)
\r
229 if (uchartype == UCharacterCategory.CURRENCY_SYMBOL &&
\r
230 jchartype == Character.CURRENCY_SYMBOL)
\r
232 if (uchartype == UCharacterCategory.MODIFIER_SYMBOL &&
\r
233 jchartype == Character.MODIFIER_SYMBOL)
\r
235 if (uchartype == UCharacterCategory.OTHER_SYMBOL &&
\r
236 jchartype == Character.OTHER_SYMBOL)
\r
238 if (uchartype == UCharacterCategory.INITIAL_PUNCTUATION &&
\r
239 jchartype == Character.START_PUNCTUATION)
\r
241 if (uchartype == UCharacterCategory.FINAL_PUNCTUATION &&
\r
242 jchartype == Character.END_PUNCTUATION)
\r
244 /*if (uchartype == UCharacterCategory.GENERAL_OTHER_TYPES &&
\r
245 jchartype == Character.GENERAL_OTHER_TYPES)
\r
251 * Difference writing to file
\r
252 * @param f file outputstream
\r
253 * @param ch code point
\r
254 * @param method for testing
\r
255 * @param ucharval UCharacter value after running method
\r
256 * @param charval Character value after running method
\r
258 private static void trackDifference(PrintWriter f, int ch, String method,
\r
259 String ucharval, String charval)
\r
262 if (m_hashtable_.containsKey(method))
\r
264 Integer value = (Integer)m_hashtable_.get(method);
\r
265 m_hashtable_.put(method, new Integer(value.intValue() + 1));
\r
268 m_hashtable_.put(method, new Integer(1));
\r
270 String temp = Integer.toHexString(ch);
\r
271 StringBuffer s = new StringBuffer(temp);
\r
272 for (int i = 0; i < 6 - temp.length(); i ++)
\r
274 temp = UCharacter.getExtendedName(ch);
\r
278 for (int i = 0; i < 73 - temp.length(); i ++)
\r
282 for (int i = 0; i < 27 - method.length(); i ++)
\r
284 s.append(ucharval);
\r
285 for (int i = 0; i < 11 - ucharval.length(); i ++)
\r
288 f.println(s.toString());
\r
292 * Does up a summary of the differences
\r
293 * @param f file outputstream
\r
295 private static void summary(PrintWriter f)
\r
297 f.println("==================================================");
\r
298 f.println("Summary of differences");
\r
299 for (Enumeration e = m_hashtable_.keys() ; e.hasMoreElements() ;)
\r
301 StringBuffer method = new StringBuffer((String)e.nextElement());
\r
302 int count = ((Integer)m_hashtable_.get(method.toString())).intValue();
\r
303 for (int i = 30 - method.length(); i > 0; i --)
\r
304 method.append(' ');
\r
305 f.println(method + " " + count);
\r