2 *******************************************************************************
\r
3 * Copyright (C) 1996-2004, International Business Machines Corporation and *
\r
4 * others. All Rights Reserved. *
\r
5 *******************************************************************************
\r
8 package com.ibm.icu.dev.test.normalizer;
\r
10 import java.util.Random;
\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
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
28 public NormalizationMonkeyTest() {
\r
31 public static void main(String[] args) throws Exception {
\r
32 new NormalizationMonkeyTest().run(args);
\r
35 public void TestNormalize() {
\r
36 if (unicode_NFD == null) {
\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
43 catch (Exception e) {
\r
44 String msg = "Normalization tests could not be run: " + e.getMessage();
\r
45 if (isModularBuild()) {
\r
53 while (i < loopCount) {
\r
54 String source = getTestSource();
\r
55 logln("Test source:" + source);
\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
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
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
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
93 String getTestSource() {
\r
94 if (random == null) {
\r
95 random = createRandom(); // use test framework's random seed
\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
105 source = source + UTF16.valueOf(codepoint);
\r