ICU-6041 Merged r24483 - collation monkey test to check that collators from file and collators from rules are the same.

X-SVN-Rev: 24484
This commit is contained in:
Brian Rower 2008-08-08 23:32:38 +00:00
parent 1914dd29b2
commit 67a110379c
3 changed files with 125 additions and 0 deletions

1
.gitattributes vendored
View File

@ -187,6 +187,7 @@ icu4j/src/com/ibm/icu/dev/eclipse/plugins/com.ibm.icu/.settings/org.eclipse.jdt.
icu4j/src/com/ibm/icu/dev/eclipse/plugins/com.ibm.icu/META-INF/MANIFEST.MF -text
icu4j/src/com/ibm/icu/dev/eclipse/plugins/com.ibm.icu/build.properties -text
icu4j/src/com/ibm/icu/dev/eclipse/plugins/com.ibm.icu/plugin.properties -text
icu4j/src/com/ibm/icu/dev/test/collator/CollationCreationMethodTest.java -text
icu4j/src/com/ibm/icu/dev/test/perf/data/collation/TestNames_Asian.txt -text
icu4j/src/com/ibm/icu/dev/test/perf/data/collation/TestNames_Chinese.txt -text
icu4j/src/com/ibm/icu/dev/test/perf/data/collation/TestNames_Japanese.txt -text

View File

@ -0,0 +1,123 @@
/*
*******************************************************************************
* Copyright (C) 2002-2008, International Business Machines Corporation and *
* others. All Rights Reserved. *
*******************************************************************************
*/
package com.ibm.icu.dev.test.collator;
import java.util.Locale;
import java.util.Random;
import com.ibm.icu.dev.test.*;
import com.ibm.icu.text.*;
/**
*
* CollationCreationMethodTest checks to ensure that the collators act the same whether they are created by choosing a
* locale and loading the data from file, or by using rules.
*
* @author Brian Rower - IBM - August 2008
*
*/
public class CollationCreationMethodTest extends TestFmwk
{
public static void main(String[] args) throws Exception
{
new CollationCreationMethodTest().run(args);
}
public void TestRuleVsLocaleCreationMonkey()
{
//create a RBC from a collator reader by reading in a locale collation file
//also create one simply from a rules string (which should be
//pulled from the locale collation file)
//and then do crazy monkey testing on it to make sure they are the same.
int x,y,z;
Random r = createRandom();
String randString1;
CollationKey key1;
CollationKey key2;
Locale[] locales = Collator.getAvailableLocales();
RuleBasedCollator localeCollator;
RuleBasedCollator ruleCollator;
for(z = 0; z < 60; z++)
{
x = r.nextInt(locales.length);
try
{
//this is making the assumption that the only type of collator that will be made is RBC
localeCollator = (RuleBasedCollator)Collator.getInstance(locales[x]);
ruleCollator = new RuleBasedCollator(localeCollator.getRules());
logln("Rules are: " + localeCollator.getRules());
}
catch (Exception e)
{
warnln("ERROR: in creation of collator of " + locales[x].getDisplayName() + " locale");
return;
}
//do it several times for each collator
int n = 3;
for(y = 0; y < n; y++)
{
randString1 = generateNewString(r);
key1 = localeCollator.getCollationKey(randString1);
key2 = ruleCollator.getCollationKey(randString1);
report(locales[x].getDisplayName(), randString1, key1, key2);
}
}
}
private String generateNewString(Random r)
{
int maxCodePoints = 40;
byte[] c = new byte[r.nextInt(maxCodePoints)*2]; //two bytes for each code point
int x;
int z;
String s = "";
for(x = 0; x < c.length/2; x = x + 2) //once around for each UTF-16 character
{
z = r.nextInt(0x7fff); //the code point...
c[x + 1] = (byte)z;
c[x] = (byte)(z >>> 4);
}
try
{
s = new String(c, "UTF-16BE");
}
catch(Exception e)
{
warnln("Error creating random strings");
}
return s;
}
private void report(String localeName, String string1, CollationKey k1, CollationKey k2)
{
if (!k1.equals(k2))
{
String msg = "";
msg += "With " + localeName + "Collator: ";
msg += string1;
msg += " failed to produce identical keys on both collators";
errln(msg);
}
}
}

View File

@ -22,6 +22,7 @@ public class TestAll extends TestGroup {
"CollationTest",
"CollationAPITest",
"CollationCurrencyTest",
"CollationCreationMethodTest",
//"CollationDanishTest", //Danish is already tested through data driven tests
"CollationDummyTest",
"CollationEnglishTest",