blob: 9461a65ddd616be8062f8e8faeb6a4c3c0efc2b7 [file] [log] [blame]
/*
*******************************************************************************
* Copyright (C) 2008, International Business Machines Corporation and *
* others. All Rights Reserved. *
*******************************************************************************
*/
package com.ibm.icu.dev.test.lang;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
import com.ibm.icu.dev.test.TestFmwk;
import com.ibm.icu.lang.UCharacter;
/**
* @author aheninger
*
*/
public class UCharacterThreadTest extends TestFmwk {
// constructor -----------------------------------------------------------
/**
* Private constructor to prevent initialisation
*/
public UCharacterThreadTest()
{
}
// public methods --------------------------------------------------------
public static void main(String[] arg)
{
try
{
UCharacterThreadTest test = new UCharacterThreadTest();
test.run(arg);
}
catch (Exception e)
{
e.printStackTrace();
}
}
//
// Test multi-threaded parallel calls to UCharacter.getName(codePoint)
// Regression test for ticket 6264.
//
public void TestUCharactersGetName() throws InterruptedException {
List threads = new LinkedList();
for(int t=0; t<20; t++) {
int codePoint = 47 + t;
String correctName = UCharacter.getName(codePoint);
GetNameThread thread = new GetNameThread(codePoint, correctName);
thread.start();
threads.add(thread);
}
ListIterator i = threads.listIterator();
while (i.hasNext()) {
GetNameThread thread = (GetNameThread)i.next();
thread.join();
if (!thread.correctName.equals(thread.actualName)) {
errln("FAIL, expected \"" + thread.correctName + "\", got \"" + thread.actualName + "\"");
}
}
}
private static class GetNameThread extends Thread {
private final int codePoint;
private final String correctName;
private String actualName;
GetNameThread(int codePoint, String correctName) {
this.codePoint = codePoint;
this.correctName = correctName;
}
public void run() {
for(int i=0; i<10000; i++) {
actualName = UCharacter.getName(codePoint);
if (!correctName.equals(actualName)) {
break;
}
}
}
}
}