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