]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-4_4_2-src/main/tests/collate/src/com/ibm/icu/dev/test/collator/CollationThreadTest.java
go
[Dictionary.git] / jars / icu4j-4_4_2-src / main / tests / collate / src / com / ibm / icu / dev / test / collator / CollationThreadTest.java
1 /*\r
2  *******************************************************************************\r
3  * Copyright (C) 2007-2010, International Business Machines Corporation and    *\r
4  * others. All Rights Reserved.                                                *\r
5  *******************************************************************************\r
6  */\r
7 \r
8 package com.ibm.icu.dev.test.collator;\r
9 \r
10 import java.util.Arrays;\r
11 import java.util.Locale;\r
12 import java.util.Random;\r
13 \r
14 import com.ibm.icu.dev.test.TestFmwk;\r
15 import com.ibm.icu.text.Collator;\r
16 \r
17 public class CollationThreadTest extends TestFmwk {\r
18     public static void main(String[] args) throws Exception {\r
19         new CollationThreadTest().run(args);\r
20     }\r
21 \r
22     private final String[] threadTestData = {\r
23         "Banc Se\u00F3kdyaaouq Pfuymjec",\r
24         "BSH \u00F3y",\r
25         "ABB - \u00F3g",\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
37         "Poczsb Lrdtqg",\r
38         "Pocafu Tgbmpn - wwg zo Mpespnzdllqk",\r
39         "Polyvmg Z.C.",\r
40         "POLUHONANQ FO",\r
41         "Polrpycn",\r
42         "Poleeaw-Rqzghgnnj R.W.",\r
43         "Polyto Sgrgcvncz",\r
44         "Polixj Tyfc\u00F3vcga Gbkjxf\u00F3f Tuogcybbbkyd C.U.",\r
45         "Poltmzzlrkwt",\r
46         "Polefgb Oiqefrkq",\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
51         "Pralpe",\r
52         "Preyojy Qnrxr",\r
53         "PRK -5",\r
54         "PRONENC U.P.",\r
55         "Prowwyq & Relnda Hxkvauksnn Znyord Tz. w t.o.",\r
56         "Propydv Afobbmhpg",\r
57         "Proimpoupvp",\r
58         "Probfo Hfttyr",\r
59         "Propgi Lutgumnj X.W. BL",\r
60         "Prozkch K.E.",\r
61         "Progiyvzr Erejqk T.W.",\r
62         "Prooxwq-Ydglovgk J.J.",\r
63         "PTU Ntcw Lwkxjk S.M. UYF",\r
64         "PWN",\r
65         "PWP",\r
66         "PZU I.D. Tlpzmhax",\r
67         "PZU ioii A.T. Yqkknryu - bipdq badtg 500/9",\r
68         "Qumnl-Udffq",\r
69         "Radmvv",\r
70         "Railoggeqd Aewy Fwlmsp K.S. Ybrqjgyr",\r
71         "Remhmxkx Ewuhxbg",\r
72         "Renafwp Sapnqr io v z.n.",\r
73         "Repqbpuuo",\r
74         "Resflig",\r
75         "Rocqz Mvwftutxozs VQ",\r
76         "Rohkui",\r
77         "RRC",\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
82         "Sikj Wyvuog",\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
86         "Sofeaypq FJ",\r
87         "Stacyok Qurqjw Hw. f c.h.",\r
88         "STOWN HH",\r
89         "Stopjhmq Prxhkakjmalkvdt Weqxejbyig Wgfplnvk D.C.",\r
90         "STRHAEI Clydqr Ha. d z.j.",\r
91         "Sun Clvaqupknlk",\r
92         "TarfAml",\r
93         "Tchukm Rhwcpcvj Cc. v y.a.",\r
94         "Teco Nyxm Rsvzkx pm. J a.t.",\r
95         "Tecdccaty",\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
101         "Thesch",\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
106         "Triuiu",\r
107         "Tripsq",\r
108         "TU ENZISOP ZFYIPF V.U.",\r
109         "TUiX Kscdw G.G.",\r
110         "TVN G.A.",\r
111         "Tycd",\r
112         "Unibjqxv rdnbsn - ZJQNJ XCG / Wslqfrk",\r
113         "Unilcs - hopef ps 20 nixi",\r
114         "UPC Gwwmru Ds. g o.r.",\r
115         "Vaidgoav",\r
116         "Vatyqzcgqh Kjnnsy GQ WT",\r
117         "Volhz",\r
118         "Vos Jviggogjt Iyqhlm Ih. w j.y. (fbshoihdnb)",\r
119         "WARMFC E.D.",\r
120         "Wincqk Pqadskf",\r
121         "WKRD",\r
122         "Wolk Pyug",\r
123         "WPRV",\r
124         "WSiI",\r
125         "Wurag XZ",\r
126         "Zacrijl B.B.",\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
130         "ZREH"\r
131     };\r
132 \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
137 \r
138         class Control {\r
139             private boolean go;\r
140             private String fail;\r
141 \r
142             synchronized void start() {\r
143                 go = true;\r
144                 notifyAll();\r
145             }\r
146 \r
147             synchronized void stop() {\r
148                 go = false;\r
149                 notifyAll();\r
150             }\r
151 \r
152             boolean go() {\r
153                 return go;\r
154             }\r
155 \r
156             void fail(String msg) {\r
157                 fail = msg;\r
158                 stop();\r
159             }\r
160         }\r
161 \r
162         final Control control = new Control();\r
163 \r
164         class Test implements Runnable {\r
165             private String[] data;\r
166             private Collator collator;\r
167             private String name;\r
168 \r
169             Test(String name) {\r
170                 this.name = name;\r
171 \r
172                 try {\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
178                     data = null;\r
179                     collator = null;\r
180                 }\r
181             }\r
182 \r
183             public void run() {\r
184                 try {\r
185                     synchronized (control) {\r
186                         while (!control.go()) {\r
187                             control.wait();\r
188                         }\r
189                     }\r
190 \r
191                     while (control.go()) {\r
192                         scramble();\r
193                         sort();\r
194                     }\r
195                 } catch (InterruptedException e) {\r
196                     // die\r
197                 } catch (IndexOutOfBoundsException e) {\r
198                     control.fail(name + " " + e.getMessage());\r
199                 }\r
200             }\r
201 \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
207                     data[ix] = s;\r
208                 }\r
209             }\r
210 \r
211             private void sort() {\r
212                 Arrays.sort(data, collator);\r
213             }\r
214         }\r
215 \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
220         }\r
221 \r
222         try {\r
223             control.start();\r
224 \r
225             long stopTime = System.currentTimeMillis() + 5000;\r
226             do {\r
227                 Thread.sleep(100);\r
228             } while (control.go() && System.currentTimeMillis() < stopTime);\r
229 \r
230             control.stop();\r
231 \r
232             for (int i = 0; i < threads.length; ++i) {\r
233                 threads[i].join();\r
234             }\r
235         } catch (InterruptedException e) {\r
236             // die\r
237         }\r
238 \r
239         if (control.fail != null) {\r
240             errln(control.fail);\r
241         }\r
242     }\r
243 }\r