2 *******************************************************************************
\r
3 * Copyright (C) 2007-2010, International Business Machines Corporation and *
\r
4 * others. All Rights Reserved. *
\r
5 *******************************************************************************
\r
8 package com.ibm.icu.dev.test.collator;
\r
10 import java.util.Arrays;
\r
11 import java.util.Locale;
\r
12 import java.util.Random;
\r
14 import com.ibm.icu.dev.test.TestFmwk;
\r
15 import com.ibm.icu.text.Collator;
\r
17 public class CollationThreadTest extends TestFmwk {
\r
18 public static void main(String[] args) throws Exception {
\r
19 new CollationThreadTest().run(args);
\r
22 private final String[] threadTestData = {
\r
23 "Banc Se\u00F3kdyaaouq Pfuymjec",
\r
26 "G\u00F3kpo Adhdoetpwtx Twxma, qm. Ilnudx",
\r
27 "G\u00F3bjh Zcgopqmjidw Dyhlu, ky. Npyamr",
\r
28 "G\u00F3dxb Slfduvgdwfi Qhreu, ao. Adyfqx",
\r
29 "G\u00F3ten Emrmbmttgne Rtpir, rx. Mgmpjy",
\r
30 "G\u00F3kjo Hciqkymfcds Jpudo, ti. Ueceedbm (tkvyj vplrnpoq)",
\r
31 "Przjrpnbhrflnoo Dbiccp Lnmikfhsuo\u00F3s Tgfhlpqoso / ZAD ENR",
\r
32 "Bang Nbygmoyc Nd\u00F3nipcryjtzm",
\r
33 "Citjk\u00EBd Qgmgvr Er. w u.x.",
\r
34 "Dyrscywp Kvoifmyxo Ivv\u00F3r Lbyxtrwnzp",
\r
35 "G\u00E9awk Ssqenl Pk. c r.g.",
\r
36 "Nesdo\u00E9 Ilwbay Z.U.",
\r
38 "Pocafu Tgbmpn - wwg zo Mpespnzdllqk",
\r
42 "Poleeaw-Rqzghgnnj R.W.",
\r
44 "Polixj Tyfc\u00F3vcga Gbkjxf\u00F3f Tuogcybbbkyd C.U.",
\r
47 "Polrfdk K\u00F3nvyrfot Xuzbzzn f Ujmfwkdbnzh E.U. Wxkfiwss",
\r
48 "Polxtcf Hfowus Zzobblfm N.I.",
\r
49 "POLJNXO ZVYU L.A.",
\r
50 "PP Lowyr Rmknyoew",
\r
55 "Prowwyq & Relnda Hxkvauksnn Znyord Tz. w t.o.",
\r
56 "Propydv Afobbmhpg",
\r
59 "Propgi Lutgumnj X.W. BL",
\r
61 "Progiyvzr Erejqk T.W.",
\r
62 "Prooxwq-Ydglovgk J.J.",
\r
63 "PTU Ntcw Lwkxjk S.M. UYF",
\r
66 "PZU I.D. Tlpzmhax",
\r
67 "PZU ioii A.T. Yqkknryu - bipdq badtg 500/9",
\r
70 "Railoggeqd Aewy Fwlmsp K.S. Ybrqjgyr",
\r
72 "Renafwp Sapnqr io v z.n.",
\r
75 "Rocqz Mvwftutxozs VQ",
\r
78 "Samgtzg Fkbulcjaaqv Ollllq Ad. l l.v.",
\r
79 "Schelrlw Fu. t z.x.",
\r
80 "Schemxgoc Axvufoeuh",
\r
81 "Siezsxz Eb. n r.h",
\r
83 "Sobcwssf Oy. q o.s. Kwaxj",
\r
84 "Sobpxpoc Fb. w q.h. Elftx",
\r
85 "Soblqeqs Kpvppc RH - tbknhjubw siyaenc Njsjbpx Buyshpgyv",
\r
87 "Stacyok Qurqjw Hw. f c.h.",
\r
89 "Stopjhmq Prxhkakjmalkvdt Weqxejbyig Wgfplnvk D.C.",
\r
90 "STRHAEI Clydqr Ha. d z.j.",
\r
93 "Tchukm Rhwcpcvj Cc. v y.a.",
\r
94 "Teco Nyxm Rsvzkx pm. J a.t.",
\r
96 "Telruaet Nmyzaz Twwwuf",
\r
97 "Tellrwihv Xvtjle N.U.",
\r
98 "Telesjedc Boewsx A.F",
\r
99 "tellqfwiqkv dinjlrnyit yktdhlqquihzxr (ohvso)",
\r
100 "Tetft Kna Ab. j l.z.",
\r
102 "Totqucvhcpm Gejxkgrz Is. e k.i.",
\r
103 "Towajgixetj Ngaayjitwm fj csxm Mxebfj Sbocok X.H.",
\r
104 "Toyfon Meesp Neeban Jdsjmrn sz v z.w.",
\r
105 "TRAJQ NZHTA Li. n x.e. - Vghfmngh",
\r
108 "TU ENZISOP ZFYIPF V.U.",
\r
112 "Unibjqxv rdnbsn - ZJQNJ XCG / Wslqfrk",
\r
113 "Unilcs - hopef ps 20 nixi",
\r
114 "UPC Gwwmru Ds. g o.r.",
\r
116 "Vatyqzcgqh Kjnnsy GQ WT",
\r
118 "Vos Jviggogjt Iyqhlm Ih. w j.y. (fbshoihdnb)",
\r
127 "Zakja Tziaboysenum Squlslpp - Diifw V.D.",
\r
128 "Zakgat Meqivadj Nrpxlekmodx s Bbymjozge W.Y.",
\r
129 "Zjetxpbkpgj Mmhhgohasjtpkjd Uwucubbpdj K.N.",
\r
133 public void testThreads() {
\r
134 final Collator theCollator = Collator.getInstance(new Locale("pl", "", ""));
\r
135 final String[] theData = threadTestData;
\r
136 final Random r = new Random();
\r
139 private boolean go;
\r
140 private String fail;
\r
142 synchronized void start() {
\r
147 synchronized void stop() {
\r
156 void fail(String msg) {
\r
162 final Control control = new Control();
\r
164 class Test implements Runnable {
\r
165 private String[] data;
\r
166 private Collator collator;
\r
167 private String name;
\r
169 Test(String name) {
\r
173 data = (String[]) theData.clone();
\r
174 collator = (Collator) theCollator.clone();
\r
175 } catch (CloneNotSupportedException e) {
\r
176 // should not happen, if it does we'll get an exception right away
\r
177 errln("could not clone");
\r
183 public void run() {
\r
185 synchronized (control) {
\r
186 while (!control.go()) {
\r
191 while (control.go()) {
\r
195 } catch (InterruptedException e) {
\r
197 } catch (IndexOutOfBoundsException e) {
\r
198 control.fail(name + " " + e.getMessage());
\r
202 private void scramble() {
\r
203 for (int i = 0; i < data.length; ++i) {
\r
204 int ix = r.nextInt(data.length);
\r
205 String s = data[i];
\r
206 data[i] = data[ix];
\r
211 private void sort() {
\r
212 Arrays.sort(data, collator);
\r
216 Thread[] threads = new Thread[10];
\r
217 for (int i = 0; i < threads.length; ++i) {
\r
218 threads[i] = new Thread(new Test("test " + i));
\r
219 threads[i].start();
\r
225 long stopTime = System.currentTimeMillis() + 5000;
\r
228 } while (control.go() && System.currentTimeMillis() < stopTime);
\r
232 for (int i = 0; i < threads.length; ++i) {
\r
235 } catch (InterruptedException e) {
\r
239 if (control.fail != null) {
\r
240 errln(control.fail);
\r