36 import static java.util.concurrent.TimeUnit.MILLISECONDS; |
36 import static java.util.concurrent.TimeUnit.MILLISECONDS; |
37 |
37 |
38 import java.util.Collection; |
38 import java.util.Collection; |
39 import java.util.concurrent.CountDownLatch; |
39 import java.util.concurrent.CountDownLatch; |
40 import java.util.concurrent.Semaphore; |
40 import java.util.concurrent.Semaphore; |
41 import java.util.concurrent.ThreadLocalRandom; |
|
42 |
41 |
43 import junit.framework.Test; |
42 import junit.framework.Test; |
44 import junit.framework.TestSuite; |
43 import junit.framework.TestSuite; |
45 |
44 |
46 public class SemaphoreTest extends JSR166TestCase { |
45 public class SemaphoreTest extends JSR166TestCase { |
218 } |
217 } |
219 |
218 |
220 /** |
219 /** |
221 * timed tryAcquire times out |
220 * timed tryAcquire times out |
222 */ |
221 */ |
223 public void testTryAcquire_timeout() { |
222 public void testTryAcquire_timeout() throws InterruptedException { |
224 final boolean fair = ThreadLocalRandom.current().nextBoolean(); |
223 final boolean fair = randomBoolean(); |
225 final Semaphore s = new Semaphore(0, fair); |
224 final Semaphore s = new Semaphore(0, fair); |
226 final long startTime = System.nanoTime(); |
225 final long startTime = System.nanoTime(); |
227 try { assertFalse(s.tryAcquire(timeoutMillis(), MILLISECONDS)); } |
226 assertFalse(s.tryAcquire(timeoutMillis(), MILLISECONDS)); |
228 catch (InterruptedException e) { threadUnexpectedException(e); } |
|
229 assertTrue(millisElapsedSince(startTime) >= timeoutMillis()); |
227 assertTrue(millisElapsedSince(startTime) >= timeoutMillis()); |
230 } |
228 } |
231 |
229 |
232 /** |
230 /** |
233 * timed tryAcquire(N) times out |
231 * timed tryAcquire(N) times out |
234 */ |
232 */ |
235 public void testTryAcquireN_timeout() { |
233 public void testTryAcquireN_timeout() throws InterruptedException { |
236 final boolean fair = ThreadLocalRandom.current().nextBoolean(); |
234 final boolean fair = randomBoolean(); |
237 final Semaphore s = new Semaphore(2, fair); |
235 final Semaphore s = new Semaphore(2, fair); |
238 final long startTime = System.nanoTime(); |
236 final long startTime = System.nanoTime(); |
239 try { assertFalse(s.tryAcquire(3, timeoutMillis(), MILLISECONDS)); } |
237 assertFalse(s.tryAcquire(3, timeoutMillis(), MILLISECONDS)); |
240 catch (InterruptedException e) { threadUnexpectedException(e); } |
|
241 assertTrue(millisElapsedSince(startTime) >= timeoutMillis()); |
238 assertTrue(millisElapsedSince(startTime) >= timeoutMillis()); |
242 } |
239 } |
243 |
240 |
244 /** |
241 /** |
245 * acquire(), acquire(N), timed tryAcquired, timed tryAcquire(N) |
242 * acquire(), acquire(N), timed tryAcquired, timed tryAcquire(N) |