/* ******************************************************************************* * 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; } }