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:
parent
1914dd29b2
commit
67a110379c
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
@ -22,6 +22,7 @@ public class TestAll extends TestGroup {
|
||||
"CollationTest",
|
||||
"CollationAPITest",
|
||||
"CollationCurrencyTest",
|
||||
"CollationCreationMethodTest",
|
||||
//"CollationDanishTest", //Danish is already tested through data driven tests
|
||||
"CollationDummyTest",
|
||||
"CollationEnglishTest",
|
||||
|
Loading…
Reference in New Issue
Block a user