ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/CountDownLatchTest.java
Revision: 1.19
Committed: Fri May 27 19:40:19 2011 UTC (12 years, 11 months ago) by jsr166
Branch: MAIN
Changes since 1.18: +0 -1 lines
Log Message:
whitespace

File Contents

# Content
1 /*
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/publicdomain/zero/1.0/
5 * Other contributors include Andrew Wright, Jeffrey Hayes,
6 * Pat Fisher, Mike Judd.
7 */
8
9 import junit.framework.*;
10 import java.util.*;
11 import java.util.concurrent.*;
12 import static java.util.concurrent.TimeUnit.MILLISECONDS;
13
14 public class CountDownLatchTest extends JSR166TestCase {
15 public static void main(String[] args) {
16 junit.textui.TestRunner.run(suite());
17 }
18 public static Test suite() {
19 return new TestSuite(CountDownLatchTest.class);
20 }
21
22 /**
23 * negative constructor argument throws IAE
24 */
25 public void testConstructor() {
26 try {
27 new CountDownLatch(-1);
28 shouldThrow();
29 } catch (IllegalArgumentException success) {}
30 }
31
32 /**
33 * getCount returns initial count and decreases after countDown
34 */
35 public void testGetCount() {
36 final CountDownLatch l = new CountDownLatch(2);
37 assertEquals(2, l.getCount());
38 l.countDown();
39 assertEquals(1, l.getCount());
40 }
41
42 /**
43 * countDown decrements count when positive and has no effect when zero
44 */
45 public void testCountDown() {
46 final CountDownLatch l = new CountDownLatch(1);
47 assertEquals(1, l.getCount());
48 l.countDown();
49 assertEquals(0, l.getCount());
50 l.countDown();
51 assertEquals(0, l.getCount());
52 }
53
54 /**
55 * await returns after countDown to zero, but not before
56 */
57 public void testAwait() throws InterruptedException {
58 final CountDownLatch l = new CountDownLatch(2);
59
60 Thread t = new Thread(new CheckedRunnable() {
61 public void realRun() throws InterruptedException {
62 assertTrue(l.getCount() > 0);
63 l.await();
64 assertEquals(0, l.getCount());
65 }});
66
67 t.start();
68 assertEquals(l.getCount(), 2);
69 delay(SHORT_DELAY_MS);
70 l.countDown();
71 assertEquals(l.getCount(), 1);
72 l.countDown();
73 assertEquals(l.getCount(), 0);
74 t.join();
75 }
76
77 /**
78 * timed await returns after countDown to zero
79 */
80 public void testTimedAwait() throws InterruptedException {
81 final CountDownLatch l = new CountDownLatch(2);
82
83 Thread t = new Thread(new CheckedRunnable() {
84 public void realRun() throws InterruptedException {
85 assertTrue(l.getCount() > 0);
86 assertTrue(l.await(SMALL_DELAY_MS, MILLISECONDS));
87 }});
88
89 t.start();
90 assertEquals(l.getCount(), 2);
91 delay(SHORT_DELAY_MS);
92 l.countDown();
93 assertEquals(l.getCount(), 1);
94 l.countDown();
95 assertEquals(l.getCount(), 0);
96 t.join();
97 }
98
99 /**
100 * await throws IE if interrupted before counted down
101 */
102 public void testAwait_InterruptedException() throws InterruptedException {
103 final CountDownLatch l = new CountDownLatch(1);
104 Thread t = new Thread(new CheckedInterruptedRunnable() {
105 public void realRun() throws InterruptedException {
106 assertTrue(l.getCount() > 0);
107 l.await();
108 }});
109
110 t.start();
111 assertEquals(l.getCount(), 1);
112 t.interrupt();
113 t.join();
114 }
115
116 /**
117 * timed await throws IE if interrupted before counted down
118 */
119 public void testTimedAwait_InterruptedException() throws InterruptedException {
120 final CountDownLatch l = new CountDownLatch(1);
121 Thread t = new Thread(new CheckedInterruptedRunnable() {
122 public void realRun() throws InterruptedException {
123 assertTrue(l.getCount() > 0);
124 l.await(MEDIUM_DELAY_MS, MILLISECONDS);
125 }});
126
127 t.start();
128 delay(SHORT_DELAY_MS);
129 assertEquals(l.getCount(), 1);
130 t.interrupt();
131 t.join();
132 }
133
134 /**
135 * timed await times out if not counted down before timeout
136 */
137 public void testAwaitTimeout() throws InterruptedException {
138 final CountDownLatch l = new CountDownLatch(1);
139 Thread t = new Thread(new CheckedRunnable() {
140 public void realRun() throws InterruptedException {
141 assertTrue(l.getCount() > 0);
142 assertFalse(l.await(SHORT_DELAY_MS, MILLISECONDS));
143 assertTrue(l.getCount() > 0);
144 }});
145
146 t.start();
147 assertEquals(l.getCount(), 1);
148 t.join();
149 }
150
151 /**
152 * toString indicates current count
153 */
154 public void testToString() {
155 CountDownLatch s = new CountDownLatch(2);
156 assertTrue(s.toString().contains("Count = 2"));
157 s.countDown();
158 assertTrue(s.toString().contains("Count = 1"));
159 s.countDown();
160 assertTrue(s.toString().contains("Count = 0"));
161 }
162
163 }