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