]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-52_1/main/tests/core/src/com/ibm/icu/dev/test/normalizer/NormalizationMonkeyTest.java
Upgrade ICU4J.
[Dictionary.git] / jars / icu4j-52_1 / main / tests / core / src / com / ibm / icu / dev / test / normalizer / NormalizationMonkeyTest.java
1 /*
2  *******************************************************************************
3  * Copyright (C) 1996-2004, International Business Machines Corporation and    *
4  * others. All Rights Reserved.                                                *
5  *******************************************************************************
6  */
7
8 package com.ibm.icu.dev.test.normalizer;
9
10 import java.util.Random;
11
12 import com.ibm.icu.dev.test.TestFmwk;
13 import com.ibm.icu.lang.UCharacter;
14 import com.ibm.icu.lang.UCharacterCategory;
15 import com.ibm.icu.text.Normalizer;
16 import com.ibm.icu.text.UTF16;
17
18 public class NormalizationMonkeyTest extends TestFmwk {
19     int loopCount = 100;
20     int maxCharCount = 20;
21     int maxCodePoint = 0x10ffff;
22     Random random = null; // initialized in getTestSource
23     UnicodeNormalizer unicode_NFD;
24     UnicodeNormalizer unicode_NFC;
25     UnicodeNormalizer unicode_NFKD;
26     UnicodeNormalizer unicode_NFKC;
27     
28     public NormalizationMonkeyTest() {
29     }
30     
31     public static void main(String[] args) throws Exception {
32         new NormalizationMonkeyTest().run(args);
33     }
34     
35     public void TestNormalize() {
36         if (unicode_NFD == null) {
37             try {
38                 unicode_NFD = new UnicodeNormalizer(UnicodeNormalizer.D, true);
39                 unicode_NFC = new UnicodeNormalizer(UnicodeNormalizer.C, true);
40                 unicode_NFKD = new UnicodeNormalizer(UnicodeNormalizer.KD, true);
41                 unicode_NFKC = new UnicodeNormalizer(UnicodeNormalizer.KC, true);
42             }
43             catch (Exception e) {
44                 String msg = "Normalization tests could not be run: " + e.getMessage();
45                 if (isModularBuild()) {
46                     warnln(msg);
47                 } else {
48                     errln(msg);
49                 }
50             }
51         }
52         int i = 0;
53         while (i < loopCount) {
54             String source = getTestSource();
55             logln("Test source:" + source);
56             //NFD
57             String uncodeNorm = unicode_NFD.normalize(source);
58             String icuNorm = Normalizer.normalize(source, Normalizer.NFD);
59             logln("\tNFD(Unicode): " + uncodeNorm);
60             logln("\tNFD(icu4j)  : " + icuNorm);
61             if (!uncodeNorm.equals(icuNorm)) {
62                 errln("NFD: Unicode sample output => " + uncodeNorm + "; icu4j output=> " + icuNorm);
63             }
64             //NFC
65             uncodeNorm = unicode_NFC.normalize(source);
66             icuNorm = Normalizer.normalize(source, Normalizer.NFC);
67             logln("\tNFC(Unicode): " + uncodeNorm);
68             logln("\tNFC(icu4j)  : " + icuNorm);
69             if (!uncodeNorm.equals(icuNorm)) {
70                 errln("NFC: Unicode sample output => " + uncodeNorm + "; icu4j output=> " + icuNorm);
71             }
72             //NFKD
73             uncodeNorm = unicode_NFKD.normalize(source);
74             icuNorm = Normalizer.normalize(source, Normalizer.NFKD);
75             logln("\tNFKD(Unicode): " + uncodeNorm);
76             logln("\tNFKD(icu4j)  : " + icuNorm);
77             if (!uncodeNorm.equals(icuNorm)) {
78                 errln("NFKD: Unicode sample output => " + uncodeNorm + "; icu4j output=> " + icuNorm);
79             }
80             //NFKC
81             uncodeNorm = unicode_NFKC.normalize(source);
82             icuNorm = Normalizer.normalize(source, Normalizer.NFKC);
83             logln("\tNFKC(Unicode): " + uncodeNorm);
84             logln("\tNFKC(icu4j)  : " + icuNorm);
85             if (!uncodeNorm.equals(icuNorm)) {
86                 errln("NFKC: Unicode sample output => " + uncodeNorm + "; icu4j output=> " + icuNorm);
87             }
88             
89             i++;
90         }
91     }
92     
93     String getTestSource() {
94     if (random == null) {
95         random = createRandom(); // use test framework's random seed
96     }
97         String source = "";
98         int i = 0;
99         while (i < (random.nextInt(maxCharCount) + 1)) {
100             int codepoint = random.nextInt(maxCodePoint);
101             //Elimate unassigned characters
102             while (UCharacter.getType(codepoint) == UCharacterCategory.UNASSIGNED) {
103                 codepoint = random.nextInt(maxCodePoint);
104             }
105             source = source + UTF16.valueOf(codepoint);
106             i++;
107         }
108         return source;
109     }
110 }