blob: a36bac9e0999f64dca257f9f74170f46a7f86594 [file] [log] [blame]
/*
*******************************************************************************
* Copyright (C) 1996-2004, International Business Machines Corporation and *
* others. All Rights Reserved. *
*******************************************************************************
*/
package com.ibm.icu.dev.test.normalizer;
import java.util.Random;
import com.ibm.icu.dev.test.TestFmwk;
import com.ibm.icu.lang.UCharacter;
import com.ibm.icu.lang.UCharacterCategory;
import com.ibm.icu.text.Normalizer;
import com.ibm.icu.text.UTF16;
public class NormalizationMonkeyTest extends TestFmwk {
int loopCount = 100;
int maxCharCount = 20;
int maxCodePoint = 0x10ffff;
Random random = null; // initialized in getTestSource
UnicodeNormalizer unicode_NFD;
UnicodeNormalizer unicode_NFC;
UnicodeNormalizer unicode_NFKD;
UnicodeNormalizer unicode_NFKC;
public NormalizationMonkeyTest() {
}
public static void main(String[] args) throws Exception {
new NormalizationMonkeyTest().run(args);
}
public void TestNormalize() {
if (unicode_NFD == null) {
try {
unicode_NFD = new UnicodeNormalizer(UnicodeNormalizer.D, true);
unicode_NFC = new UnicodeNormalizer(UnicodeNormalizer.C, true);
unicode_NFKD = new UnicodeNormalizer(UnicodeNormalizer.KD, true);
unicode_NFKC = new UnicodeNormalizer(UnicodeNormalizer.KC, true);
}
catch (Exception e) {
String msg = "Normalization tests could not be run: " + e.getMessage();
if (isModularBuild()) {
warnln(msg);
} else {
errln(msg);
}
}
}
int i = 0;
while (i < loopCount) {
String source = getTestSource();
logln("Test source:" + source);
//NFD
String uncodeNorm = unicode_NFD.normalize(source);
String icuNorm = Normalizer.normalize(source, Normalizer.NFD);
logln("\tNFD(Unicode): " + uncodeNorm);
logln("\tNFD(icu4j) : " + icuNorm);
if (!uncodeNorm.equals(icuNorm)) {
errln("NFD: Unicode sample output => " + uncodeNorm + "; icu4j output=> " + icuNorm);
}
//NFC
uncodeNorm = unicode_NFC.normalize(source);
icuNorm = Normalizer.normalize(source, Normalizer.NFC);
logln("\tNFC(Unicode): " + uncodeNorm);
logln("\tNFC(icu4j) : " + icuNorm);
if (!uncodeNorm.equals(icuNorm)) {
errln("NFC: Unicode sample output => " + uncodeNorm + "; icu4j output=> " + icuNorm);
}
//NFKD
uncodeNorm = unicode_NFKD.normalize(source);
icuNorm = Normalizer.normalize(source, Normalizer.NFKD);
logln("\tNFKD(Unicode): " + uncodeNorm);
logln("\tNFKD(icu4j) : " + icuNorm);
if (!uncodeNorm.equals(icuNorm)) {
errln("NFKD: Unicode sample output => " + uncodeNorm + "; icu4j output=> " + icuNorm);
}
//NFKC
uncodeNorm = unicode_NFKC.normalize(source);
icuNorm = Normalizer.normalize(source, Normalizer.NFKC);
logln("\tNFKC(Unicode): " + uncodeNorm);
logln("\tNFKC(icu4j) : " + icuNorm);
if (!uncodeNorm.equals(icuNorm)) {
errln("NFKC: Unicode sample output => " + uncodeNorm + "; icu4j output=> " + icuNorm);
}
i++;
}
}
String getTestSource() {
if (random == null) {
random = createRandom(); // use test framework's random seed
}
String source = "";
int i = 0;
while (i < (random.nextInt(maxCharCount) + 1)) {
int codepoint = random.nextInt(maxCodePoint);
//Elimate unassigned characters
while (UCharacter.getType(codepoint) == UCharacterCategory.UNASSIGNED) {
codepoint = random.nextInt(maxCodePoint);
}
source = source + UTF16.valueOf(codepoint);
i++;
}
return source;
}
}