| // © 2016 and later: Unicode, Inc. and others. |
| // License & terms of use: http://www.unicode.org/copyright.html#License |
| /** |
| ******************************************************************************* |
| * Copyright (C) 1996-2010, International Business Machines Corporation and * |
| * others. All Rights Reserved. * |
| ******************************************************************************* |
| */ |
| |
| package com.ibm.icu.dev.test.lang; |
| |
| import java.io.FileWriter; |
| import java.io.PrintWriter; |
| import java.util.HashMap; |
| import java.util.Map; |
| |
| import com.ibm.icu.lang.UCharacter; |
| import com.ibm.icu.lang.UCharacterCategory; |
| |
| /** |
| * A class to compare the difference in methods between java.lang.Character and |
| * UCharacter |
| * @author Syn Wee Quek |
| * @since oct 06 2000 |
| * @see com.ibm.icu.lang.UCharacter |
| */ |
| |
| public final class UCharacterCompare |
| { |
| // private variables ================================================ |
| |
| private static Map<String, Integer> m_hashtable_ = new HashMap<String, Integer>(); |
| |
| // public methods ====================================================== |
| |
| /** |
| * Main testing method |
| */ |
| public static void main(String arg[]) { |
| System.out.println("Starting character compare"); |
| try { |
| FileWriter f; |
| if (arg.length == 0) |
| f = new FileWriter("compare.txt"); |
| else |
| f = new FileWriter(arg[0]); |
| PrintWriter p = new PrintWriter(f); |
| p.print("char character name "); |
| p.println("method name ucharacter character"); |
| for (char i = Character.MIN_VALUE; i < Character.MAX_VALUE; i++) { |
| System.out.println("character \\u" + Integer.toHexString(i)); |
| if (UCharacter.isDefined(i) != Character.isDefined(i)) |
| trackDifference(p, i, "isDefined()", "" + UCharacter.isDefined(i), "" + Character.isDefined(i)); |
| else { |
| if (UCharacter.digit(i, 10) != Character.digit(i, 10)) |
| trackDifference(p, i, "digit()", "" + UCharacter.digit(i, 10), "" + Character.digit(i, 10)); |
| if (UCharacter.getNumericValue(i) != Character.getNumericValue(i)) |
| trackDifference(p, i, "getNumericValue()", "" + UCharacter.getNumericValue(i), "" |
| + Character.getNumericValue(i)); |
| if (!compareType(UCharacter.getType(i), Character.getType(i))) |
| trackDifference(p, i, "getType()", "" + UCharacter.getType(i), "" + Character.getType(i)); |
| if (UCharacter.isDigit(i) != Character.isDigit(i)) |
| trackDifference(p, i, "isDigit()", "" + UCharacter.isDigit(i), "" + Character.isDigit(i)); |
| if (UCharacter.isISOControl(i) != Character.isISOControl(i)) |
| trackDifference(p, i, "isISOControl()", "" + UCharacter.isISOControl(i), "" |
| + Character.isISOControl(i)); |
| if (UCharacter.isLetter(i) != Character.isLetter(i)) |
| trackDifference(p, i, "isLetter()", "" + UCharacter.isLetter(i), "" + Character.isLetter(i)); |
| if (UCharacter.isLetterOrDigit(i) != Character.isLetterOrDigit(i)) |
| trackDifference(p, i, "isLetterOrDigit()", "" + UCharacter.isLetterOrDigit(i), "" |
| + Character.isLetterOrDigit(i)); |
| if (UCharacter.isLowerCase(i) != Character.isLowerCase(i)) |
| trackDifference(p, i, "isLowerCase()", "" + UCharacter.isLowerCase(i), "" |
| + Character.isLowerCase(i)); |
| if (UCharacter.isWhitespace(i) != Character.isWhitespace(i)) |
| trackDifference(p, i, "isWhitespace()", "" + UCharacter.isWhitespace(i), "" |
| + Character.isWhitespace(i)); |
| if (UCharacter.isSpaceChar(i) != Character.isSpaceChar(i)) |
| trackDifference(p, i, "isSpaceChar()", "" + UCharacter.isSpaceChar(i), "" |
| + Character.isSpaceChar(i)); |
| if (UCharacter.isTitleCase(i) != Character.isTitleCase(i)) |
| trackDifference(p, i, "isTitleChar()", "" + UCharacter.isTitleCase(i), "" |
| + Character.isTitleCase(i)); |
| if (UCharacter.isUnicodeIdentifierPart(i) != Character.isUnicodeIdentifierPart(i)) |
| trackDifference(p, i, "isUnicodeIdentifierPart()", "" + UCharacter.isUnicodeIdentifierPart(i), |
| "" + Character.isUnicodeIdentifierPart(i)); |
| if (UCharacter.isUnicodeIdentifierStart(i) != Character.isUnicodeIdentifierStart(i)) |
| trackDifference(p, i, "isUnicodeIdentifierStart()", |
| "" + UCharacter.isUnicodeIdentifierStart(i), "" + Character.isUnicodeIdentifierStart(i)); |
| if (UCharacter.isIdentifierIgnorable(i) != Character.isIdentifierIgnorable(i)) |
| trackDifference(p, i, "isIdentifierIgnorable()", "" + UCharacter.isIdentifierIgnorable(i), "" |
| + Character.isIdentifierIgnorable(i)); |
| if (UCharacter.isUpperCase(i) != Character.isUpperCase(i)) |
| trackDifference(p, i, "isUpperCase()", "" + UCharacter.isUpperCase(i), "" |
| + Character.isUpperCase(i)); |
| if (UCharacter.toLowerCase(i) != Character.toLowerCase(i)) |
| trackDifference(p, i, "toLowerCase()", Integer.toHexString(UCharacter.toLowerCase(i)), Integer |
| .toHexString(Character.toLowerCase(i))); |
| if (!UCharacter.toString(i).equals(new Character(i).toString())) |
| trackDifference(p, i, "toString()", UCharacter.toString(i), new Character(i).toString()); |
| if (UCharacter.toTitleCase(i) != Character.toTitleCase(i)) |
| trackDifference(p, i, "toTitleCase()", Integer.toHexString(UCharacter.toTitleCase(i)), Integer |
| .toHexString(Character.toTitleCase(i))); |
| if (UCharacter.toUpperCase(i) != Character.toUpperCase(i)) |
| trackDifference(p, i, "toUpperCase()", Integer.toHexString(UCharacter.toUpperCase(i)), Integer |
| .toHexString(Character.toUpperCase(i))); |
| } |
| } |
| summary(p); |
| p.close(); |
| } catch (Exception e) { |
| e.printStackTrace(); |
| } |
| } |
| |
| // private methods =================================================== |
| |
| /** |
| * Comparing types |
| * |
| * @param uchartype |
| * UCharacter type |
| * @param jchartype |
| * java.lang.Character type |
| */ |
| private static boolean compareType(int uchartype, int jchartype) { |
| if (uchartype == UCharacterCategory.UNASSIGNED && jchartype == Character.UNASSIGNED) |
| return true; |
| if (uchartype == UCharacterCategory.UPPERCASE_LETTER && jchartype == Character.UPPERCASE_LETTER) |
| return true; |
| if (uchartype == UCharacterCategory.LOWERCASE_LETTER && jchartype == Character.LOWERCASE_LETTER) |
| return true; |
| if (uchartype == UCharacterCategory.TITLECASE_LETTER && jchartype == Character.TITLECASE_LETTER) |
| return true; |
| if (uchartype == UCharacterCategory.MODIFIER_LETTER && jchartype == Character.MODIFIER_LETTER) |
| return true; |
| if (uchartype == UCharacterCategory.OTHER_LETTER && jchartype == Character.OTHER_LETTER) |
| return true; |
| if (uchartype == UCharacterCategory.NON_SPACING_MARK && jchartype == Character.NON_SPACING_MARK) |
| return true; |
| if (uchartype == UCharacterCategory.ENCLOSING_MARK && jchartype == Character.ENCLOSING_MARK) |
| return true; |
| if (uchartype == UCharacterCategory.COMBINING_SPACING_MARK && jchartype == Character.COMBINING_SPACING_MARK) |
| return true; |
| if (uchartype == UCharacterCategory.DECIMAL_DIGIT_NUMBER && jchartype == Character.DECIMAL_DIGIT_NUMBER) |
| return true; |
| if (uchartype == UCharacterCategory.LETTER_NUMBER && jchartype == Character.LETTER_NUMBER) |
| return true; |
| if (uchartype == UCharacterCategory.OTHER_NUMBER && jchartype == Character.OTHER_NUMBER) |
| return true; |
| if (uchartype == UCharacterCategory.SPACE_SEPARATOR && jchartype == Character.SPACE_SEPARATOR) |
| return true; |
| if (uchartype == UCharacterCategory.LINE_SEPARATOR && jchartype == Character.LINE_SEPARATOR) |
| return true; |
| if (uchartype == UCharacterCategory.PARAGRAPH_SEPARATOR && jchartype == Character.PARAGRAPH_SEPARATOR) |
| return true; |
| if (uchartype == UCharacterCategory.CONTROL && jchartype == Character.CONTROL) |
| return true; |
| if (uchartype == UCharacterCategory.FORMAT && jchartype == Character.FORMAT) |
| return true; |
| if (uchartype == UCharacterCategory.PRIVATE_USE && jchartype == Character.PRIVATE_USE) |
| return true; |
| if (uchartype == UCharacterCategory.SURROGATE && jchartype == Character.SURROGATE) |
| return true; |
| if (uchartype == UCharacterCategory.DASH_PUNCTUATION && jchartype == Character.DASH_PUNCTUATION) |
| return true; |
| if (uchartype == UCharacterCategory.START_PUNCTUATION && jchartype == Character.START_PUNCTUATION) |
| return true; |
| if (uchartype == UCharacterCategory.END_PUNCTUATION && jchartype == Character.END_PUNCTUATION) |
| return true; |
| if (uchartype == UCharacterCategory.CONNECTOR_PUNCTUATION && jchartype == Character.CONNECTOR_PUNCTUATION) |
| return true; |
| if (uchartype == UCharacterCategory.OTHER_PUNCTUATION && jchartype == Character.OTHER_PUNCTUATION) |
| return true; |
| if (uchartype == UCharacterCategory.MATH_SYMBOL && jchartype == Character.MATH_SYMBOL) |
| return true; |
| if (uchartype == UCharacterCategory.CURRENCY_SYMBOL && jchartype == Character.CURRENCY_SYMBOL) |
| return true; |
| if (uchartype == UCharacterCategory.MODIFIER_SYMBOL && jchartype == Character.MODIFIER_SYMBOL) |
| return true; |
| if (uchartype == UCharacterCategory.OTHER_SYMBOL && jchartype == Character.OTHER_SYMBOL) |
| return true; |
| if (uchartype == UCharacterCategory.INITIAL_PUNCTUATION && jchartype == Character.START_PUNCTUATION) |
| return true; |
| if (uchartype == UCharacterCategory.FINAL_PUNCTUATION && jchartype == Character.END_PUNCTUATION) |
| return true; |
| /* |
| * if (uchartype == UCharacterCategory.GENERAL_OTHER_TYPES && jchartype == Character.GENERAL_OTHER_TYPES) return |
| * true; |
| */ |
| return false; |
| } |
| |
| /** |
| * Difference writing to file |
| * |
| * @param f |
| * file outputstream |
| * @param ch |
| * code point |
| * @param method |
| * for testing |
| * @param ucharval |
| * UCharacter value after running method |
| * @param charval |
| * Character value after running method |
| */ |
| private static void trackDifference(PrintWriter f, int ch, String method, String ucharval, String charval) |
| throws Exception { |
| if (m_hashtable_.containsKey(method)) { |
| Integer value = m_hashtable_.get(method); |
| m_hashtable_.put(method, new Integer(value.intValue() + 1)); |
| } else |
| m_hashtable_.put(method, new Integer(1)); |
| |
| String temp = Integer.toHexString(ch); |
| StringBuffer s = new StringBuffer(temp); |
| for (int i = 0; i < 6 - temp.length(); i++) |
| s.append(' '); |
| temp = UCharacter.getExtendedName(ch); |
| if (temp == null) |
| temp = " "; |
| s.append(temp); |
| for (int i = 0; i < 73 - temp.length(); i++) |
| s.append(' '); |
| |
| s.append(method); |
| for (int i = 0; i < 27 - method.length(); i++) |
| s.append(' '); |
| s.append(ucharval); |
| for (int i = 0; i < 11 - ucharval.length(); i++) |
| s.append(' '); |
| s.append(charval); |
| f.println(s.toString()); |
| } |
| |
| /** |
| * Does up a summary of the differences |
| * |
| * @param f |
| * file outputstream |
| */ |
| private static void summary(PrintWriter f) { |
| f.println("=================================================="); |
| f.println("Summary of differences"); |
| for (String s : m_hashtable_.keySet()) { |
| StringBuilder method = new StringBuilder(s); |
| int count = (m_hashtable_.get(s)).intValue(); |
| for (int i = 30 - method.length(); i > 0; i--) |
| method.append(' '); |
| f.println(method + " " + count); |
| } |
| } |
| } |
| |