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