99280c208f26fa37e7f8b9fac45822010f684252
[yangtools.git] / third-party / triemap / src / test / java / com / romix / scala / collection / concurrent / TestMultiThreadAddDelete.java
1 package com.romix.scala.collection.concurrent;\r
2 \r
3 import java.util.Map;\r
4 import java.util.concurrent.ExecutorService;\r
5 import java.util.concurrent.Executors;\r
6 import java.util.concurrent.TimeUnit;\r
7 \r
8 import org.junit.Test;\r
9 \r
10 public class TestMultiThreadAddDelete {\r
11     private static final int RETRIES = 1;\r
12     private static final int N_THREADS = 7;\r
13     private static final int COUNT =  50 * 1000;\r
14 \r
15     @Test\r
16     public void testMultiThreadAddDelete () {\r
17         for (int j = 0; j < RETRIES; j++) {\r
18             final Map<Object, Object> bt = new TrieMap <Object, Object> ();\r
19             \r
20             {\r
21                 final ExecutorService es = Executors.newFixedThreadPool (N_THREADS);\r
22                 for (int i = 0; i < N_THREADS; i++) {\r
23                     final int threadNo = i;\r
24                     es.execute (new Runnable () {\r
25                         @Override\r
26                         public void run () {\r
27                             for (int j = 0; j < COUNT; j++) {\r
28                                 if (j % N_THREADS == threadNo) {\r
29                                     bt.put (Integer.valueOf (j), Integer.valueOf (j));\r
30                                 }\r
31                             }\r
32                         }\r
33                     });\r
34                 }\r
35                 es.shutdown ();\r
36                 try {\r
37                     es.awaitTermination (3600L, TimeUnit.SECONDS);\r
38                 } catch (final InterruptedException e) {\r
39                     e.printStackTrace ();\r
40                 }\r
41             }\r
42             \r
43             TestHelper.assertEquals (COUNT, bt.size ());\r
44             TestHelper.assertFalse (bt.isEmpty ());\r
45             \r
46             {\r
47                 final ExecutorService es = Executors.newFixedThreadPool (N_THREADS);\r
48                 for (int i = 0; i < N_THREADS; i++) {\r
49                     final int threadNo = i;\r
50                     es.execute (new Runnable () {\r
51                         @Override\r
52                         public void run () {\r
53                             for (int j = 0; j < COUNT; j++) {\r
54                                 if (j % N_THREADS == threadNo) {\r
55                                     bt.remove (Integer.valueOf (j));\r
56                                 }\r
57                             }\r
58                         }\r
59                     });\r
60                 }\r
61                 es.shutdown ();\r
62                 try {\r
63                     es.awaitTermination (3600L, TimeUnit.SECONDS);\r
64                 } catch (final InterruptedException e) {\r
65                     e.printStackTrace ();\r
66                 }\r
67             }\r
68             \r
69             \r
70             TestHelper.assertEquals (0, bt.size ());\r
71             TestHelper.assertTrue (bt.isEmpty ());\r
72             \r
73             {\r
74                 final ExecutorService es = Executors.newFixedThreadPool (N_THREADS);\r
75                 for (int i = 0; i < N_THREADS; i++) {\r
76                     final int threadNo = i;\r
77                     es.execute (new Runnable () {\r
78                         @Override\r
79                         public void run () {\r
80                             for (int j = 0; j < COUNT; j++) {\r
81                                 if (j % N_THREADS == threadNo) {\r
82                                     try {\r
83                                         bt.put (Integer.valueOf (j), Integer.valueOf (j));\r
84                                         if (!bt.containsKey (Integer.valueOf (j))) {\r
85                                             System.out.println (j);\r
86                                         }\r
87                                         bt.remove (Integer.valueOf (j));\r
88                                         if (bt.containsKey (Integer.valueOf (j))) {\r
89                                             System.out.println (-j);\r
90                                         }\r
91                                     } catch (Throwable t) {\r
92                                         t.printStackTrace ();\r
93                                     }\r
94                                 }\r
95                             }\r
96                         }\r
97                     });\r
98                 }\r
99                 es.shutdown ();\r
100                 try {\r
101                     es.awaitTermination (3600L, TimeUnit.SECONDS);\r
102                 } catch (final InterruptedException e) {\r
103                     e.printStackTrace ();\r
104                 }\r
105             }\r
106             \r
107             TestHelper.assertEquals (0, bt.size ());\r
108             if (!bt.isEmpty ()) {\r
109                 System.out.println ();\r
110             }\r
111             TestHelper.assertTrue (bt.isEmpty ());\r
112         }\r
113     }\r
114 }\r