ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/SemaphoreTest.java
Revision: 1.1
Committed: Sun Aug 31 19:24:55 2003 UTC (20 years, 8 months ago) by dl
Branch: MAIN
Log Message:
First check-in of tests to be in tck

File Contents

# User Rev Content
1 dl 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.
6     */
7    
8     import junit.framework.*;
9     import java.util.*;
10     import java.util.concurrent.*;
11    
12     public class SemaphoreTest extends TestCase{
13    
14     public static void main(String[] args) {
15     junit.textui.TestRunner.run (suite());
16     }
17    
18     public static Test suite() {
19     return new TestSuite(SemaphoreTest.class);
20     }
21    
22     private static long SHORT_DELAY_MS = 100;
23     private static long MEDIUM_DELAY_MS = 1000;
24     private static long LONG_DELAY_MS = 10000;
25    
26    
27     public void testConstructor1() {
28     Semaphore s = new Semaphore(0);
29     assertEquals(0, s.availablePermits());
30     }
31    
32     public void testConstructor2() {
33     Semaphore s = new Semaphore(-1);
34     assertEquals(-1, s.availablePermits());
35     }
36    
37     public void testTryAcquireInSameThread() {
38     Semaphore s = new Semaphore(2);
39     assertEquals(2, s.availablePermits());
40     assertTrue(s.tryAcquire());
41     assertTrue(s.tryAcquire());
42     assertEquals(0, s.availablePermits());
43     assertFalse(s.tryAcquire());
44     }
45    
46     public void testAcquireReleaseInSameThread(){
47     Semaphore s = new Semaphore(1);
48     try {
49     s.acquire();
50     s.release();
51     s.acquire();
52     s.release();
53     s.acquire();
54     s.release();
55     s.acquire();
56     s.release();
57     s.acquire();
58     s.release();
59     assertEquals(1, s.availablePermits());
60     } catch( InterruptedException e){
61     fail("unexpected exception");
62     }
63     }
64    
65     public void testAcquireUninterruptiblyReleaseInSameThread(){
66     Semaphore s = new Semaphore(1);
67     try {
68     s.acquireUninterruptibly();
69     s.release();
70     s.acquireUninterruptibly();
71     s.release();
72     s.acquireUninterruptibly();
73     s.release();
74     s.acquireUninterruptibly();
75     s.release();
76     s.acquireUninterruptibly();
77     s.release();
78     assertEquals(1, s.availablePermits());
79     } finally {
80     }
81     }
82    
83    
84     public void testAcquireReleaseInDifferentThreads() {
85     final Semaphore s = new Semaphore(1);
86     Thread t = new Thread(new Runnable(){
87     public void run(){
88     try{
89     s.acquire();
90     s.release();
91     s.release();
92     s.acquire();
93     }catch(InterruptedException ie){
94     fail("unexpected exception");
95     }
96     }
97     });
98     t.start();
99     try {
100     s.release();
101     s.release();
102     s.acquire();
103     s.acquire();
104     t.join();
105     } catch( InterruptedException e){
106     fail("unexpected exception");
107     }
108     }
109    
110     public void testTimedAcquireReleaseInSameThread(){
111     Semaphore s = new Semaphore(1);
112     try {
113     assertTrue(s.tryAcquire(SHORT_DELAY_MS, TimeUnit.MILLISECONDS));
114     s.release();
115     assertTrue(s.tryAcquire(SHORT_DELAY_MS, TimeUnit.MILLISECONDS));
116     s.release();
117     assertTrue(s.tryAcquire(SHORT_DELAY_MS, TimeUnit.MILLISECONDS));
118     s.release();
119     assertTrue(s.tryAcquire(SHORT_DELAY_MS, TimeUnit.MILLISECONDS));
120     s.release();
121     assertTrue(s.tryAcquire(SHORT_DELAY_MS, TimeUnit.MILLISECONDS));
122     s.release();
123     assertEquals(1, s.availablePermits());
124     } catch( InterruptedException e){
125     fail("unexpected exception");
126     }
127     }
128    
129     public void testTimedAcquireReleaseInDifferentThreads() {
130     final Semaphore s = new Semaphore(1);
131     Thread t = new Thread(new Runnable(){
132     public void run(){
133     try{
134     s.release();
135     assertTrue(s.tryAcquire(SHORT_DELAY_MS, TimeUnit.MILLISECONDS));
136     s.release();
137     assertTrue(s.tryAcquire(SHORT_DELAY_MS, TimeUnit.MILLISECONDS));
138    
139     }catch(InterruptedException ie){
140     fail("unexpected exception");
141     }
142     }
143     });
144     t.start();
145     try {
146     assertTrue(s.tryAcquire(SHORT_DELAY_MS, TimeUnit.MILLISECONDS));
147     s.release();
148     assertTrue(s.tryAcquire(SHORT_DELAY_MS, TimeUnit.MILLISECONDS));
149     s.release();
150     t.join();
151     } catch( InterruptedException e){
152     fail("unexpected exception");
153     }
154     }
155    
156     public void testAcquire_InterruptedException(){
157     final Semaphore s = new Semaphore(0);
158     Thread t = new Thread(new Runnable(){
159     public void run(){
160     try{
161     s.acquire();
162     fail("should throw");
163     }catch(InterruptedException success){}
164     }
165     });
166     t.start();
167     try{
168     Thread.sleep(SHORT_DELAY_MS);
169     t.interrupt();
170     t.join();
171     } catch(InterruptedException e){
172     fail("unexpected exception");
173     }
174     }
175    
176     public void testTryAcquire_InterruptedException(){
177     final Semaphore s = new Semaphore(0);
178     Thread t = new Thread(new Runnable(){
179     public void run(){
180     try{
181     s.tryAcquire(MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS);
182     fail("should throw");
183     }catch(InterruptedException success){
184     }
185     }
186     });
187     t.start();
188     try{
189     Thread.sleep(SHORT_DELAY_MS);
190     t.interrupt();
191     t.join();
192     } catch(InterruptedException e){
193     fail("unexpected exception");
194     }
195     }
196     }