ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/ExchangerTest.java
(Generate patch)

Comparing jsr166/src/test/tck/ExchangerTest.java (file contents):
Revision 1.4 by dl, Thu Sep 25 11:02:41 2003 UTC vs.
Revision 1.10 by jsr166, Sat Nov 21 02:07:26 2009 UTC

# Line 1 | Line 1
1   /*
2 < * Written by members of JCP JSR-166 Expert Group and released to the
3 < * public domain. Use, modify, and redistribute this code in any way
4 < * without acknowledgement. Other contributors include Andrew Wright,
5 < * Jeffrey Hayes, Pat Fischer, Mike Judd.
2 > * Written by Doug Lea with assistance from members of JCP JSR-166
3 > * Expert Group and released to the public domain, as explained at
4 > * http://creativecommons.org/licenses/publicdomain
5 > * Other contributors include Andrew Wright, Jeffrey Hayes,
6 > * Pat Fisher, Mike Judd.
7   */
8  
9   import junit.framework.*;
# Line 10 | Line 11 | import java.util.*;
11   import java.util.concurrent.*;
12  
13   public class ExchangerTest extends JSR166TestCase {
14 <  
14 >
15      public static void main(String[] args) {
16 <        junit.textui.TestRunner.run (suite());  
16 >        junit.textui.TestRunner.run (suite());
17      }
18      public static Test suite() {
19 <        return new TestSuite(ExchangerTest.class);
19 >        return new TestSuite(ExchangerTest.class);
20      }
21  
22      /**
23       * exchange exchanges objects across two threads
24       */
25 <    public void testExchange() {
25 >    public void testExchange() throws InterruptedException {
26          final Exchanger e = new Exchanger();
27 <        Thread t1 = new Thread(new Runnable(){
28 <                public void run(){
29 <                    try {
30 <                        Object v = e.exchange(one);
31 <                        threadAssertEquals(v, two);
32 <                        Object w = e.exchange(v);
33 <                        threadAssertEquals(w, one);
34 <                    } catch(InterruptedException e){
35 <                        threadUnexpectedException();
36 <                    }
37 <                }
38 <            });
39 <        Thread t2 = new Thread(new Runnable(){
40 <                public void run(){
41 <                    try {
42 <                        Object v = e.exchange(two);
43 <                        threadAssertEquals(v, one);
44 <                        Object w = e.exchange(v);
45 <                        threadAssertEquals(w, two);
45 <                    } catch(InterruptedException e){
46 <                        threadUnexpectedException();
47 <                    }
48 <                }
49 <            });
50 <        try {
51 <            t1.start();
52 <            t2.start();
53 <            t1.join();
54 <            t2.join();
55 <        } catch(InterruptedException ex) {
56 <            unexpectedException();
57 <        }
27 >        Thread t1 = new Thread(new CheckedRunnable() {
28 >            public void realRun() throws InterruptedException {
29 >                Object v = e.exchange(one);
30 >                threadAssertEquals(v, two);
31 >                Object w = e.exchange(v);
32 >                threadAssertEquals(w, one);
33 >            }});
34 >        Thread t2 = new Thread(new CheckedRunnable() {
35 >            public void realRun() throws InterruptedException {
36 >                Object v = e.exchange(two);
37 >                threadAssertEquals(v, one);
38 >                Object w = e.exchange(v);
39 >                threadAssertEquals(w, two);
40 >            }});
41 >
42 >        t1.start();
43 >        t2.start();
44 >        t1.join();
45 >        t2.join();
46      }
47  
48      /**
49       * timed exchange exchanges objects across two threads
50       */
51 <    public void testTimedExchange() {
51 >    public void testTimedExchange() throws InterruptedException {
52          final Exchanger e = new Exchanger();
53 <        Thread t1 = new Thread(new Runnable(){
54 <                public void run(){
55 <                    try {
56 <                        Object v = e.exchange(one, SHORT_DELAY_MS, TimeUnit.MILLISECONDS);
57 <                        threadAssertEquals(v, two);
58 <                        Object w = e.exchange(v, SHORT_DELAY_MS, TimeUnit.MILLISECONDS);
59 <                        threadAssertEquals(w, one);
60 <                    } catch(InterruptedException e){
61 <                        threadUnexpectedException();
62 <                    } catch(TimeoutException toe) {
63 <                        threadUnexpectedException();
64 <                    }
65 <                }
66 <            });
67 <        Thread t2 = new Thread(new Runnable(){
68 <                public void run(){
69 <                    try {
70 <                        Object v = e.exchange(two, SHORT_DELAY_MS, TimeUnit.MILLISECONDS);
71 <                        threadAssertEquals(v, one);
84 <                        Object w = e.exchange(v, SHORT_DELAY_MS, TimeUnit.MILLISECONDS);
85 <                        threadAssertEquals(w, two);
86 <                    } catch(InterruptedException e){
87 <                        threadUnexpectedException();
88 <                    } catch(TimeoutException toe) {
89 <                        threadUnexpectedException();
90 <                    }
91 <                }
92 <            });
93 <        try {
94 <            t1.start();
95 <            t2.start();
96 <            t1.join();
97 <            t2.join();
98 <        } catch(InterruptedException ex) {
99 <            unexpectedException();
100 <        }
53 >        Thread t1 = new Thread(new CheckedRunnable() {
54 >            public void realRun() throws Exception {
55 >                Object v = e.exchange(one, SHORT_DELAY_MS, TimeUnit.MILLISECONDS);
56 >                threadAssertEquals(v, two);
57 >                Object w = e.exchange(v, SHORT_DELAY_MS, TimeUnit.MILLISECONDS);
58 >                threadAssertEquals(w, one);
59 >            }});
60 >        Thread t2 = new Thread(new CheckedRunnable() {
61 >            public void realRun() throws Exception {
62 >                Object v = e.exchange(two, SHORT_DELAY_MS, TimeUnit.MILLISECONDS);
63 >                threadAssertEquals(v, one);
64 >                Object w = e.exchange(v, SHORT_DELAY_MS, TimeUnit.MILLISECONDS);
65 >                threadAssertEquals(w, two);
66 >            }});
67 >
68 >        t1.start();
69 >        t2.start();
70 >        t1.join();
71 >        t2.join();
72      }
73  
74      /**
75       * interrupt during wait for exchange throws IE
76       */
77 <    public void testExchange_InterruptedException(){
77 >    public void testExchange_InterruptedException() throws InterruptedException {
78          final Exchanger e = new Exchanger();
79 <        Thread t = new Thread(new Runnable() {
80 <                public void run(){
81 <                    try {
82 <                        e.exchange(one);
83 <                        threadShouldThrow();
84 <                    } catch(InterruptedException success){
85 <                    }
86 <                }
87 <            });
117 <        try {
118 <            t.start();
119 <            Thread.sleep(SHORT_DELAY_MS);
120 <            t.interrupt();
121 <            t.join();
122 <        } catch(InterruptedException ex) {
123 <            unexpectedException();
124 <        }
79 >        Thread t = new Thread(new CheckedInterruptedRunnable() {
80 >            public void realRun() throws InterruptedException {
81 >                e.exchange(one);
82 >            }});
83 >
84 >        t.start();
85 >        Thread.sleep(SHORT_DELAY_MS);
86 >        t.interrupt();
87 >        t.join();
88      }
89  
90      /**
91       * interrupt during wait for timed exchange throws IE
92       */
93 <    public void testTimedExchange_InterruptedException(){
93 >    public void testTimedExchange_InterruptedException() throws InterruptedException {
94          final Exchanger e = new Exchanger();
95 <        Thread t = new Thread(new Runnable() {
96 <                public void run(){
97 <                    try {
98 <                        e.exchange(null, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS);
99 <                        threadShouldThrow();
100 <                    } catch(InterruptedException success){
101 <                    } catch(Exception e2){
102 <                        threadFail("should throw IE");
140 <                    }
141 <                }
142 <            });
143 <        try {
144 <            t.start();
145 <            t.interrupt();
146 <            t.join();
147 <        } catch(InterruptedException ex){
148 <            unexpectedException();
149 <        }
95 >        Thread t = new Thread(new CheckedInterruptedRunnable() {
96 >            public void realRun() throws Exception {
97 >                e.exchange(null, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS);
98 >            }});
99 >
100 >        t.start();
101 >        t.interrupt();
102 >        t.join();
103      }
104  
105      /**
106       * timeout during wait for timed exchange throws TOE
107       */
108 <    public void testExchange_TimeOutException(){
108 >    public void testExchange_TimeOutException() throws InterruptedException {
109          final Exchanger e = new Exchanger();
110 <        Thread t = new Thread(new Runnable() {
111 <                public void run(){
112 <                    try {
113 <                        e.exchange(null, SHORT_DELAY_MS, TimeUnit.MILLISECONDS);
114 <                        threadShouldThrow();
115 <                    } catch(TimeoutException success){
116 <                    } catch(InterruptedException e2){
117 <                        threadFail("should throw TOE");
118 <                    }
119 <                }
167 <            });
168 <        try {
169 <            t.start();
170 <            t.join();
171 <        } catch(InterruptedException ex){
172 <            unexpectedException();
173 <        }
110 >        Thread t = new Thread(new CheckedRunnable() {
111 >            public void realRun() throws Exception {
112 >                try {
113 >                    e.exchange(null, SHORT_DELAY_MS, TimeUnit.MILLISECONDS);
114 >                    threadShouldThrow();
115 >                } catch (TimeoutException success) {}
116 >            }});
117 >
118 >        t.start();
119 >        t.join();
120      }
121  
122      /**
123       * If one exchanging thread is interrupted, another succeeds.
124       */
125 <    public void testReplacementAfterExchange() {
125 >    public void testReplacementAfterExchange() throws InterruptedException {
126          final Exchanger e = new Exchanger();
127 <        Thread t1 = new Thread(new Runnable(){
128 <                public void run(){
129 <                    try {
130 <                        Object v = e.exchange(one);
131 <                        threadAssertEquals(v, two);
132 <                        Object w = e.exchange(v);
133 <                        threadShouldThrow();
134 <                    } catch(InterruptedException success){
135 <                    }
136 <                }
137 <            });
138 <        Thread t2 = new Thread(new Runnable(){
139 <                public void run(){
140 <                    try {
141 <                        Object v = e.exchange(two);
142 <                        threadAssertEquals(v, one);
143 <                        Thread.sleep(SMALL_DELAY_MS);
144 <                        Object w = e.exchange(v);
145 <                        threadAssertEquals(w, three);
146 <                    } catch(InterruptedException e){
147 <                        threadUnexpectedException();
148 <                    }
149 <                }
150 <            });
151 <        Thread t3 = new Thread(new Runnable(){
152 <                public void run(){
153 <                    try {
154 <                        Thread.sleep(SMALL_DELAY_MS);
155 <                        Object w = e.exchange(three);
210 <                        threadAssertEquals(w, one);
211 <                    } catch(InterruptedException e){
212 <                        threadUnexpectedException();
213 <                    }
214 <                }
215 <            });
216 <
217 <        try {
218 <            t1.start();
219 <            t2.start();
220 <            t3.start();
221 <            Thread.sleep(SHORT_DELAY_MS);
222 <            t1.interrupt();
223 <            t1.join();
224 <            t2.join();
225 <            t3.join();
226 <        } catch(InterruptedException ex) {
227 <            unexpectedException();
228 <        }
127 >        Thread t1 = new Thread(new CheckedInterruptedRunnable() {
128 >            public void realRun() throws InterruptedException {
129 >                Object v = e.exchange(one);
130 >                threadAssertEquals(v, two);
131 >                Object w = e.exchange(v);
132 >            }});
133 >        Thread t2 = new Thread(new CheckedRunnable() {
134 >            public void realRun() throws InterruptedException {
135 >                Object v = e.exchange(two);
136 >                threadAssertEquals(v, one);
137 >                Thread.sleep(SMALL_DELAY_MS);
138 >                Object w = e.exchange(v);
139 >                threadAssertEquals(w, three);
140 >            }});
141 >        Thread t3 = new Thread(new CheckedRunnable() {
142 >            public void realRun() throws InterruptedException {
143 >                Thread.sleep(SMALL_DELAY_MS);
144 >                Object w = e.exchange(three);
145 >                threadAssertEquals(w, one);
146 >            }});
147 >
148 >        t1.start();
149 >        t2.start();
150 >        t3.start();
151 >        Thread.sleep(SHORT_DELAY_MS);
152 >        t1.interrupt();
153 >        t1.join();
154 >        t2.join();
155 >        t3.join();
156      }
157  
158   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines