ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/StampedLockTest.java
Revision: 1.1
Committed: Fri Feb 1 19:07:36 2013 UTC (11 years, 3 months ago) by jsr166
Branch: MAIN
Log Message:
add support for conditional jdk8 tests

File Contents

# User Rev Content
1 jsr166 1.1 /*
2     * Written by Doug Lea and Martin Buchholz
3     * with assistance from members of JCP JSR-166 Expert Group and
4     * released to the public domain, as explained at
5     * http://creativecommons.org/publicdomain/zero/1.0/
6     * Other contributors include Andrew Wright, Jeffrey Hayes,
7     * Pat Fisher, Mike Judd.
8     */
9    
10     import junit.framework.*;
11     import java.util.concurrent.atomic.AtomicBoolean;
12     import java.util.concurrent.locks.Condition;
13     import java.util.concurrent.locks.Lock;
14     import java.util.concurrent.locks.ReentrantReadWriteLock;
15     import java.util.concurrent.CountDownLatch;
16     import static java.util.concurrent.TimeUnit.MILLISECONDS;
17     import java.util.*;
18    
19     public class StampedLockTest extends JSR166TestCase {
20     public static void main(String[] args) {
21     junit.textui.TestRunner.run(suite());
22     }
23     public static Test suite() {
24     return new TestSuite(StampedLockTest.class);
25     }
26    
27     // XXXX Just a skeleton implementation for now.
28     public void testTODO() { fail("StampedLockTest needs help"); }
29    
30     // /**
31     // * A runnable calling lockInterruptibly
32     // */
33     // class InterruptibleLockRunnable extends CheckedRunnable {
34     // final ReentrantReadWriteLock lock;
35     // InterruptibleLockRunnable(ReentrantReadWriteLock l) { lock = l; }
36     // public void realRun() throws InterruptedException {
37     // lock.writeLock().lockInterruptibly();
38     // }
39     // }
40    
41     // /**
42     // * A runnable calling lockInterruptibly that expects to be
43     // * interrupted
44     // */
45     // class InterruptedLockRunnable extends CheckedInterruptedRunnable {
46     // final ReentrantReadWriteLock lock;
47     // InterruptedLockRunnable(ReentrantReadWriteLock l) { lock = l; }
48     // public void realRun() throws InterruptedException {
49     // lock.writeLock().lockInterruptibly();
50     // }
51     // }
52    
53     // /**
54     // * Subclass to expose protected methods
55     // */
56     // static class PublicReentrantReadWriteLock extends ReentrantReadWriteLock {
57     // PublicReentrantReadWriteLock() { super(); }
58     // PublicReentrantReadWriteLock(boolean fair) { super(fair); }
59     // public Thread getOwner() {
60     // return super.getOwner();
61     // }
62     // public Collection<Thread> getQueuedThreads() {
63     // return super.getQueuedThreads();
64     // }
65     // public Collection<Thread> getWaitingThreads(Condition c) {
66     // return super.getWaitingThreads(c);
67     // }
68     // }
69    
70     // /**
71     // * Releases write lock, checking that it had a hold count of 1.
72     // */
73     // void releaseWriteLock(PublicReentrantReadWriteLock lock) {
74     // ReentrantReadWriteLock.WriteLock writeLock = lock.writeLock();
75     // assertWriteLockedByMoi(lock);
76     // assertEquals(1, lock.getWriteHoldCount());
77     // writeLock.unlock();
78     // assertNotWriteLocked(lock);
79     // }
80    
81     // /**
82     // * Spin-waits until lock.hasQueuedThread(t) becomes true.
83     // */
84     // void waitForQueuedThread(PublicReentrantReadWriteLock lock, Thread t) {
85     // long startTime = System.nanoTime();
86     // while (!lock.hasQueuedThread(t)) {
87     // if (millisElapsedSince(startTime) > LONG_DELAY_MS)
88     // throw new AssertionFailedError("timed out");
89     // Thread.yield();
90     // }
91     // assertTrue(t.isAlive());
92     // assertTrue(lock.getOwner() != t);
93     // }
94    
95     // /**
96     // * Checks that lock is not write-locked.
97     // */
98     // void assertNotWriteLocked(PublicReentrantReadWriteLock lock) {
99     // assertFalse(lock.isWriteLocked());
100     // assertFalse(lock.isWriteLockedByCurrentThread());
101     // assertFalse(lock.writeLock().isHeldByCurrentThread());
102     // assertEquals(0, lock.getWriteHoldCount());
103     // assertEquals(0, lock.writeLock().getHoldCount());
104     // assertNull(lock.getOwner());
105     // }
106    
107     // /**
108     // * Checks that lock is write-locked by the given thread.
109     // */
110     // void assertWriteLockedBy(PublicReentrantReadWriteLock lock, Thread t) {
111     // assertTrue(lock.isWriteLocked());
112     // assertSame(t, lock.getOwner());
113     // assertEquals(t == Thread.currentThread(),
114     // lock.isWriteLockedByCurrentThread());
115     // assertEquals(t == Thread.currentThread(),
116     // lock.writeLock().isHeldByCurrentThread());
117     // assertEquals(t == Thread.currentThread(),
118     // lock.getWriteHoldCount() > 0);
119     // assertEquals(t == Thread.currentThread(),
120     // lock.writeLock().getHoldCount() > 0);
121     // assertEquals(0, lock.getReadLockCount());
122     // }
123    
124     // /**
125     // * Checks that lock is write-locked by the current thread.
126     // */
127     // void assertWriteLockedByMoi(PublicReentrantReadWriteLock lock) {
128     // assertWriteLockedBy(lock, Thread.currentThread());
129     // }
130    
131     // /**
132     // * Checks that condition c has no waiters.
133     // */
134     // void assertHasNoWaiters(PublicReentrantReadWriteLock lock, Condition c) {
135     // assertHasWaiters(lock, c, new Thread[] {});
136     // }
137    
138     // /**
139     // * Checks that condition c has exactly the given waiter threads.
140     // */
141     // void assertHasWaiters(PublicReentrantReadWriteLock lock, Condition c,
142     // Thread... threads) {
143     // lock.writeLock().lock();
144     // assertEquals(threads.length > 0, lock.hasWaiters(c));
145     // assertEquals(threads.length, lock.getWaitQueueLength(c));
146     // assertEquals(threads.length == 0, lock.getWaitingThreads(c).isEmpty());
147     // assertEquals(threads.length, lock.getWaitingThreads(c).size());
148     // assertEquals(new HashSet<Thread>(lock.getWaitingThreads(c)),
149     // new HashSet<Thread>(Arrays.asList(threads)));
150     // lock.writeLock().unlock();
151     // }
152    
153     // enum AwaitMethod { await, awaitTimed, awaitNanos, awaitUntil };
154    
155     // /**
156     // * Awaits condition using the specified AwaitMethod.
157     // */
158     // void await(Condition c, AwaitMethod awaitMethod)
159     // throws InterruptedException {
160     // switch (awaitMethod) {
161     // case await:
162     // c.await();
163     // break;
164     // case awaitTimed:
165     // assertTrue(c.await(2 * LONG_DELAY_MS, MILLISECONDS));
166     // break;
167     // case awaitNanos:
168     // long nanosRemaining = c.awaitNanos(MILLISECONDS.toNanos(2 * LONG_DELAY_MS));
169     // assertTrue(nanosRemaining > 0);
170     // break;
171     // case awaitUntil:
172     // java.util.Date d = new java.util.Date();
173     // assertTrue(c.awaitUntil(new java.util.Date(d.getTime() + 2 * LONG_DELAY_MS)));
174     // break;
175     // }
176     // }
177    
178     // /**
179     // * Constructor sets given fairness, and is in unlocked state
180     // */
181     // public void testConstructor() {
182     // PublicReentrantReadWriteLock lock;
183    
184     // lock = new PublicReentrantReadWriteLock();
185     // assertFalse(lock.isFair());
186     // assertNotWriteLocked(lock);
187     // assertEquals(0, lock.getReadLockCount());
188    
189     // lock = new PublicReentrantReadWriteLock(true);
190     // assertTrue(lock.isFair());
191     // assertNotWriteLocked(lock);
192     // assertEquals(0, lock.getReadLockCount());
193    
194     // lock = new PublicReentrantReadWriteLock(false);
195     // assertFalse(lock.isFair());
196     // assertNotWriteLocked(lock);
197     // assertEquals(0, lock.getReadLockCount());
198     // }
199    
200     // /**
201     // * write-locking and read-locking an unlocked lock succeed
202     // */
203     // public void testLock() { testLock(false); }
204     // public void testLock_fair() { testLock(true); }
205     // public void testLock(boolean fair) {
206     // PublicReentrantReadWriteLock lock =
207     // new PublicReentrantReadWriteLock(fair);
208     // assertNotWriteLocked(lock);
209     // lock.writeLock().lock();
210     // assertWriteLockedByMoi(lock);
211     // lock.writeLock().unlock();
212     // assertNotWriteLocked(lock);
213     // assertEquals(0, lock.getReadLockCount());
214     // lock.readLock().lock();
215     // assertNotWriteLocked(lock);
216     // assertEquals(1, lock.getReadLockCount());
217     // lock.readLock().unlock();
218     // assertNotWriteLocked(lock);
219     // assertEquals(0, lock.getReadLockCount());
220     // }
221    
222     // /**
223     // * getWriteHoldCount returns number of recursive holds
224     // */
225     // public void testGetWriteHoldCount() { testGetWriteHoldCount(false); }
226     // public void testGetWriteHoldCount_fair() { testGetWriteHoldCount(true); }
227     // public void testGetWriteHoldCount(boolean fair) {
228     // ReentrantReadWriteLock lock = new ReentrantReadWriteLock(fair);
229     // for (int i = 1; i <= SIZE; i++) {
230     // lock.writeLock().lock();
231     // assertEquals(i,lock.getWriteHoldCount());
232     // }
233     // for (int i = SIZE; i > 0; i--) {
234     // lock.writeLock().unlock();
235     // assertEquals(i-1,lock.getWriteHoldCount());
236     // }
237     // }
238    
239     // /**
240     // * writelock.getHoldCount returns number of recursive holds
241     // */
242     // public void testGetHoldCount() { testGetHoldCount(false); }
243     // public void testGetHoldCount_fair() { testGetHoldCount(true); }
244     // public void testGetHoldCount(boolean fair) {
245     // ReentrantReadWriteLock lock = new ReentrantReadWriteLock(fair);
246     // for (int i = 1; i <= SIZE; i++) {
247     // lock.writeLock().lock();
248     // assertEquals(i,lock.writeLock().getHoldCount());
249     // }
250     // for (int i = SIZE; i > 0; i--) {
251     // lock.writeLock().unlock();
252     // assertEquals(i-1,lock.writeLock().getHoldCount());
253     // }
254     // }
255    
256     // /**
257     // * getReadHoldCount returns number of recursive holds
258     // */
259     // public void testGetReadHoldCount() { testGetReadHoldCount(false); }
260     // public void testGetReadHoldCount_fair() { testGetReadHoldCount(true); }
261     // public void testGetReadHoldCount(boolean fair) {
262     // ReentrantReadWriteLock lock = new ReentrantReadWriteLock(fair);
263     // for (int i = 1; i <= SIZE; i++) {
264     // lock.readLock().lock();
265     // assertEquals(i,lock.getReadHoldCount());
266     // }
267     // for (int i = SIZE; i > 0; i--) {
268     // lock.readLock().unlock();
269     // assertEquals(i-1,lock.getReadHoldCount());
270     // }
271     // }
272    
273     // /**
274     // * write-unlocking an unlocked lock throws IllegalMonitorStateException
275     // */
276     // public void testWriteUnlock_IMSE() { testWriteUnlock_IMSE(false); }
277     // public void testWriteUnlock_IMSE_fair() { testWriteUnlock_IMSE(true); }
278     // public void testWriteUnlock_IMSE(boolean fair) {
279     // ReentrantReadWriteLock lock = new ReentrantReadWriteLock(fair);
280     // try {
281     // lock.writeLock().unlock();
282     // shouldThrow();
283     // } catch (IllegalMonitorStateException success) {}
284     // }
285    
286     // /**
287     // * read-unlocking an unlocked lock throws IllegalMonitorStateException
288     // */
289     // public void testReadUnlock_IMSE() { testReadUnlock_IMSE(false); }
290     // public void testReadUnlock_IMSE_fair() { testReadUnlock_IMSE(true); }
291     // public void testReadUnlock_IMSE(boolean fair) {
292     // ReentrantReadWriteLock lock = new ReentrantReadWriteLock(fair);
293     // try {
294     // lock.readLock().unlock();
295     // shouldThrow();
296     // } catch (IllegalMonitorStateException success) {}
297     // }
298    
299     // /**
300     // * write-lockInterruptibly is interruptible
301     // */
302     // public void testWriteLockInterruptibly_Interruptible() { testWriteLockInterruptibly_Interruptible(false); }
303     // public void testWriteLockInterruptibly_Interruptible_fair() { testWriteLockInterruptibly_Interruptible(true); }
304     // public void testWriteLockInterruptibly_Interruptible(boolean fair) {
305     // final PublicReentrantReadWriteLock lock =
306     // new PublicReentrantReadWriteLock(fair);
307     // lock.writeLock().lock();
308     // Thread t = newStartedThread(new CheckedInterruptedRunnable() {
309     // public void realRun() throws InterruptedException {
310     // lock.writeLock().lockInterruptibly();
311     // }});
312    
313     // waitForQueuedThread(lock, t);
314     // t.interrupt();
315     // awaitTermination(t);
316     // releaseWriteLock(lock);
317     // }
318    
319     // /**
320     // * timed write-tryLock is interruptible
321     // */
322     // public void testWriteTryLock_Interruptible() { testWriteTryLock_Interruptible(false); }
323     // public void testWriteTryLock_Interruptible_fair() { testWriteTryLock_Interruptible(true); }
324     // public void testWriteTryLock_Interruptible(boolean fair) {
325     // final PublicReentrantReadWriteLock lock =
326     // new PublicReentrantReadWriteLock(fair);
327     // lock.writeLock().lock();
328     // Thread t = newStartedThread(new CheckedInterruptedRunnable() {
329     // public void realRun() throws InterruptedException {
330     // lock.writeLock().tryLock(2 * LONG_DELAY_MS, MILLISECONDS);
331     // }});
332    
333     // waitForQueuedThread(lock, t);
334     // t.interrupt();
335     // awaitTermination(t);
336     // releaseWriteLock(lock);
337     // }
338    
339     // /**
340     // * read-lockInterruptibly is interruptible
341     // */
342     // public void testReadLockInterruptibly_Interruptible() { testReadLockInterruptibly_Interruptible(false); }
343     // public void testReadLockInterruptibly_Interruptible_fair() { testReadLockInterruptibly_Interruptible(true); }
344     // public void testReadLockInterruptibly_Interruptible(boolean fair) {
345     // final PublicReentrantReadWriteLock lock =
346     // new PublicReentrantReadWriteLock(fair);
347     // lock.writeLock().lock();
348     // Thread t = newStartedThread(new CheckedInterruptedRunnable() {
349     // public void realRun() throws InterruptedException {
350     // lock.readLock().lockInterruptibly();
351     // }});
352    
353     // waitForQueuedThread(lock, t);
354     // t.interrupt();
355     // awaitTermination(t);
356     // releaseWriteLock(lock);
357     // }
358    
359     // /**
360     // * timed read-tryLock is interruptible
361     // */
362     // public void testReadTryLock_Interruptible() { testReadTryLock_Interruptible(false); }
363     // public void testReadTryLock_Interruptible_fair() { testReadTryLock_Interruptible(true); }
364     // public void testReadTryLock_Interruptible(boolean fair) {
365     // final PublicReentrantReadWriteLock lock =
366     // new PublicReentrantReadWriteLock(fair);
367     // lock.writeLock().lock();
368     // Thread t = newStartedThread(new CheckedInterruptedRunnable() {
369     // public void realRun() throws InterruptedException {
370     // lock.readLock().tryLock(2 * LONG_DELAY_MS, MILLISECONDS);
371     // }});
372    
373     // waitForQueuedThread(lock, t);
374     // t.interrupt();
375     // awaitTermination(t);
376     // releaseWriteLock(lock);
377     // }
378    
379     // /**
380     // * write-tryLock on an unlocked lock succeeds
381     // */
382     // public void testWriteTryLock() { testWriteTryLock(false); }
383     // public void testWriteTryLock_fair() { testWriteTryLock(true); }
384     // public void testWriteTryLock(boolean fair) {
385     // final PublicReentrantReadWriteLock lock =
386     // new PublicReentrantReadWriteLock(fair);
387     // assertTrue(lock.writeLock().tryLock());
388     // assertWriteLockedByMoi(lock);
389     // assertTrue(lock.writeLock().tryLock());
390     // assertWriteLockedByMoi(lock);
391     // lock.writeLock().unlock();
392     // releaseWriteLock(lock);
393     // }
394    
395     // /**
396     // * write-tryLock fails if locked
397     // */
398     // public void testWriteTryLockWhenLocked() { testWriteTryLockWhenLocked(false); }
399     // public void testWriteTryLockWhenLocked_fair() { testWriteTryLockWhenLocked(true); }
400     // public void testWriteTryLockWhenLocked(boolean fair) {
401     // final PublicReentrantReadWriteLock lock =
402     // new PublicReentrantReadWriteLock(fair);
403     // lock.writeLock().lock();
404     // Thread t = newStartedThread(new CheckedRunnable() {
405     // public void realRun() {
406     // assertFalse(lock.writeLock().tryLock());
407     // }});
408    
409     // awaitTermination(t);
410     // releaseWriteLock(lock);
411     // }
412    
413     // /**
414     // * read-tryLock fails if locked
415     // */
416     // public void testReadTryLockWhenLocked() { testReadTryLockWhenLocked(false); }
417     // public void testReadTryLockWhenLocked_fair() { testReadTryLockWhenLocked(true); }
418     // public void testReadTryLockWhenLocked(boolean fair) {
419     // final PublicReentrantReadWriteLock lock =
420     // new PublicReentrantReadWriteLock(fair);
421     // lock.writeLock().lock();
422     // Thread t = newStartedThread(new CheckedRunnable() {
423     // public void realRun() {
424     // assertFalse(lock.readLock().tryLock());
425     // }});
426    
427     // awaitTermination(t);
428     // releaseWriteLock(lock);
429     // }
430    
431     // /**
432     // * Multiple threads can hold a read lock when not write-locked
433     // */
434     // public void testMultipleReadLocks() { testMultipleReadLocks(false); }
435     // public void testMultipleReadLocks_fair() { testMultipleReadLocks(true); }
436     // public void testMultipleReadLocks(boolean fair) {
437     // final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(fair);
438     // lock.readLock().lock();
439     // Thread t = newStartedThread(new CheckedRunnable() {
440     // public void realRun() throws InterruptedException {
441     // assertTrue(lock.readLock().tryLock());
442     // lock.readLock().unlock();
443     // assertTrue(lock.readLock().tryLock(LONG_DELAY_MS, MILLISECONDS));
444     // lock.readLock().unlock();
445     // lock.readLock().lock();
446     // lock.readLock().unlock();
447     // }});
448    
449     // awaitTermination(t);
450     // lock.readLock().unlock();
451     // }
452    
453     // /**
454     // * A writelock succeeds only after a reading thread unlocks
455     // */
456     // public void testWriteAfterReadLock() { testWriteAfterReadLock(false); }
457     // public void testWriteAfterReadLock_fair() { testWriteAfterReadLock(true); }
458     // public void testWriteAfterReadLock(boolean fair) {
459     // final PublicReentrantReadWriteLock lock =
460     // new PublicReentrantReadWriteLock(fair);
461     // lock.readLock().lock();
462     // Thread t = newStartedThread(new CheckedRunnable() {
463     // public void realRun() {
464     // assertEquals(1, lock.getReadLockCount());
465     // lock.writeLock().lock();
466     // assertEquals(0, lock.getReadLockCount());
467     // lock.writeLock().unlock();
468     // }});
469     // waitForQueuedThread(lock, t);
470     // assertNotWriteLocked(lock);
471     // assertEquals(1, lock.getReadLockCount());
472     // lock.readLock().unlock();
473     // assertEquals(0, lock.getReadLockCount());
474     // awaitTermination(t);
475     // assertNotWriteLocked(lock);
476     // }
477    
478     // /**
479     // * A writelock succeeds only after reading threads unlock
480     // */
481     // public void testWriteAfterMultipleReadLocks() { testWriteAfterMultipleReadLocks(false); }
482     // public void testWriteAfterMultipleReadLocks_fair() { testWriteAfterMultipleReadLocks(true); }
483     // public void testWriteAfterMultipleReadLocks(boolean fair) {
484     // final PublicReentrantReadWriteLock lock =
485     // new PublicReentrantReadWriteLock(fair);
486     // lock.readLock().lock();
487     // lock.readLock().lock();
488     // Thread t1 = newStartedThread(new CheckedRunnable() {
489     // public void realRun() {
490     // lock.readLock().lock();
491     // assertEquals(3, lock.getReadLockCount());
492     // lock.readLock().unlock();
493     // }});
494     // awaitTermination(t1);
495    
496     // Thread t2 = newStartedThread(new CheckedRunnable() {
497     // public void realRun() {
498     // assertEquals(2, lock.getReadLockCount());
499     // lock.writeLock().lock();
500     // assertEquals(0, lock.getReadLockCount());
501     // lock.writeLock().unlock();
502     // }});
503     // waitForQueuedThread(lock, t2);
504     // assertNotWriteLocked(lock);
505     // assertEquals(2, lock.getReadLockCount());
506     // lock.readLock().unlock();
507     // lock.readLock().unlock();
508     // assertEquals(0, lock.getReadLockCount());
509     // awaitTermination(t2);
510     // assertNotWriteLocked(lock);
511     // }
512    
513     // /**
514     // * A thread that tries to acquire a fair read lock (non-reentrantly)
515     // * will block if there is a waiting writer thread
516     // */
517     // public void testReaderWriterReaderFairFifo() {
518     // final PublicReentrantReadWriteLock lock =
519     // new PublicReentrantReadWriteLock(true);
520     // final AtomicBoolean t1GotLock = new AtomicBoolean(false);
521    
522     // lock.readLock().lock();
523     // Thread t1 = newStartedThread(new CheckedRunnable() {
524     // public void realRun() {
525     // assertEquals(1, lock.getReadLockCount());
526     // lock.writeLock().lock();
527     // assertEquals(0, lock.getReadLockCount());
528     // t1GotLock.set(true);
529     // lock.writeLock().unlock();
530     // }});
531     // waitForQueuedThread(lock, t1);
532    
533     // Thread t2 = newStartedThread(new CheckedRunnable() {
534     // public void realRun() {
535     // assertEquals(1, lock.getReadLockCount());
536     // lock.readLock().lock();
537     // assertEquals(1, lock.getReadLockCount());
538     // assertTrue(t1GotLock.get());
539     // lock.readLock().unlock();
540     // }});
541     // waitForQueuedThread(lock, t2);
542     // assertTrue(t1.isAlive());
543     // assertNotWriteLocked(lock);
544     // assertEquals(1, lock.getReadLockCount());
545     // lock.readLock().unlock();
546     // awaitTermination(t1);
547     // awaitTermination(t2);
548     // assertNotWriteLocked(lock);
549     // }
550    
551     // /**
552     // * Readlocks succeed only after a writing thread unlocks
553     // */
554     // public void testReadAfterWriteLock() { testReadAfterWriteLock(false); }
555     // public void testReadAfterWriteLock_fair() { testReadAfterWriteLock(true); }
556     // public void testReadAfterWriteLock(boolean fair) {
557     // final PublicReentrantReadWriteLock lock =
558     // new PublicReentrantReadWriteLock(fair);
559     // lock.writeLock().lock();
560     // Thread t1 = newStartedThread(new CheckedRunnable() {
561     // public void realRun() {
562     // lock.readLock().lock();
563     // lock.readLock().unlock();
564     // }});
565     // Thread t2 = newStartedThread(new CheckedRunnable() {
566     // public void realRun() {
567     // lock.readLock().lock();
568     // lock.readLock().unlock();
569     // }});
570    
571     // waitForQueuedThread(lock, t1);
572     // waitForQueuedThread(lock, t2);
573     // releaseWriteLock(lock);
574     // awaitTermination(t1);
575     // awaitTermination(t2);
576     // }
577    
578     // /**
579     // * Read trylock succeeds if write locked by current thread
580     // */
581     // public void testReadHoldingWriteLock() { testReadHoldingWriteLock(false); }
582     // public void testReadHoldingWriteLock_fair() { testReadHoldingWriteLock(true); }
583     // public void testReadHoldingWriteLock(boolean fair) {
584     // final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(fair);
585     // lock.writeLock().lock();
586     // assertTrue(lock.readLock().tryLock());
587     // lock.readLock().unlock();
588     // lock.writeLock().unlock();
589     // }
590    
591     // /**
592     // * Read trylock succeeds (barging) even in the presence of waiting
593     // * readers and/or writers
594     // */
595     // public void testReadTryLockBarging() { testReadTryLockBarging(false); }
596     // public void testReadTryLockBarging_fair() { testReadTryLockBarging(true); }
597     // public void testReadTryLockBarging(boolean fair) {
598     // final PublicReentrantReadWriteLock lock =
599     // new PublicReentrantReadWriteLock(fair);
600     // lock.readLock().lock();
601    
602     // Thread t1 = newStartedThread(new CheckedRunnable() {
603     // public void realRun() {
604     // lock.writeLock().lock();
605     // lock.writeLock().unlock();
606     // }});
607    
608     // waitForQueuedThread(lock, t1);
609    
610     // Thread t2 = newStartedThread(new CheckedRunnable() {
611     // public void realRun() {
612     // lock.readLock().lock();
613     // lock.readLock().unlock();
614     // }});
615    
616     // if (fair)
617     // waitForQueuedThread(lock, t2);
618    
619     // Thread t3 = newStartedThread(new CheckedRunnable() {
620     // public void realRun() {
621     // lock.readLock().tryLock();
622     // lock.readLock().unlock();
623     // }});
624    
625     // assertTrue(lock.getReadLockCount() > 0);
626     // awaitTermination(t3);
627     // assertTrue(t1.isAlive());
628     // if (fair) assertTrue(t2.isAlive());
629     // lock.readLock().unlock();
630     // awaitTermination(t1);
631     // awaitTermination(t2);
632     // }
633    
634     // /**
635     // * Read lock succeeds if write locked by current thread even if
636     // * other threads are waiting for readlock
637     // */
638     // public void testReadHoldingWriteLock2() { testReadHoldingWriteLock2(false); }
639     // public void testReadHoldingWriteLock2_fair() { testReadHoldingWriteLock2(true); }
640     // public void testReadHoldingWriteLock2(boolean fair) {
641     // final PublicReentrantReadWriteLock lock =
642     // new PublicReentrantReadWriteLock(fair);
643     // lock.writeLock().lock();
644     // lock.readLock().lock();
645     // lock.readLock().unlock();
646    
647     // Thread t1 = newStartedThread(new CheckedRunnable() {
648     // public void realRun() {
649     // lock.readLock().lock();
650     // lock.readLock().unlock();
651     // }});
652     // Thread t2 = newStartedThread(new CheckedRunnable() {
653     // public void realRun() {
654     // lock.readLock().lock();
655     // lock.readLock().unlock();
656     // }});
657    
658     // waitForQueuedThread(lock, t1);
659     // waitForQueuedThread(lock, t2);
660     // assertWriteLockedByMoi(lock);
661     // lock.readLock().lock();
662     // lock.readLock().unlock();
663     // releaseWriteLock(lock);
664     // awaitTermination(t1);
665     // awaitTermination(t2);
666     // }
667    
668     // /**
669     // * Read lock succeeds if write locked by current thread even if
670     // * other threads are waiting for writelock
671     // */
672     // public void testReadHoldingWriteLock3() { testReadHoldingWriteLock3(false); }
673     // public void testReadHoldingWriteLock3_fair() { testReadHoldingWriteLock3(true); }
674     // public void testReadHoldingWriteLock3(boolean fair) {
675     // final PublicReentrantReadWriteLock lock =
676     // new PublicReentrantReadWriteLock(fair);
677     // lock.writeLock().lock();
678     // lock.readLock().lock();
679     // lock.readLock().unlock();
680    
681     // Thread t1 = newStartedThread(new CheckedRunnable() {
682     // public void realRun() {
683     // lock.writeLock().lock();
684     // lock.writeLock().unlock();
685     // }});
686     // Thread t2 = newStartedThread(new CheckedRunnable() {
687     // public void realRun() {
688     // lock.writeLock().lock();
689     // lock.writeLock().unlock();
690     // }});
691    
692     // waitForQueuedThread(lock, t1);
693     // waitForQueuedThread(lock, t2);
694     // assertWriteLockedByMoi(lock);
695     // lock.readLock().lock();
696     // lock.readLock().unlock();
697     // assertWriteLockedByMoi(lock);
698     // lock.writeLock().unlock();
699     // awaitTermination(t1);
700     // awaitTermination(t2);
701     // }
702    
703     // /**
704     // * Write lock succeeds if write locked by current thread even if
705     // * other threads are waiting for writelock
706     // */
707     // public void testWriteHoldingWriteLock4() { testWriteHoldingWriteLock4(false); }
708     // public void testWriteHoldingWriteLock4_fair() { testWriteHoldingWriteLock4(true); }
709     // public void testWriteHoldingWriteLock4(boolean fair) {
710     // final PublicReentrantReadWriteLock lock =
711     // new PublicReentrantReadWriteLock(fair);
712     // lock.writeLock().lock();
713     // lock.writeLock().lock();
714     // lock.writeLock().unlock();
715    
716     // Thread t1 = newStartedThread(new CheckedRunnable() {
717     // public void realRun() {
718     // lock.writeLock().lock();
719     // lock.writeLock().unlock();
720     // }});
721     // Thread t2 = newStartedThread(new CheckedRunnable() {
722     // public void realRun() {
723     // lock.writeLock().lock();
724     // lock.writeLock().unlock();
725     // }});
726    
727     // waitForQueuedThread(lock, t1);
728     // waitForQueuedThread(lock, t2);
729     // assertWriteLockedByMoi(lock);
730     // assertEquals(1, lock.getWriteHoldCount());
731     // lock.writeLock().lock();
732     // assertWriteLockedByMoi(lock);
733     // assertEquals(2, lock.getWriteHoldCount());
734     // lock.writeLock().unlock();
735     // assertWriteLockedByMoi(lock);
736     // assertEquals(1, lock.getWriteHoldCount());
737     // lock.writeLock().unlock();
738     // awaitTermination(t1);
739     // awaitTermination(t2);
740     // }
741    
742     // /**
743     // * Read tryLock succeeds if readlocked but not writelocked
744     // */
745     // public void testTryLockWhenReadLocked() { testTryLockWhenReadLocked(false); }
746     // public void testTryLockWhenReadLocked_fair() { testTryLockWhenReadLocked(true); }
747     // public void testTryLockWhenReadLocked(boolean fair) {
748     // final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(fair);
749     // lock.readLock().lock();
750     // Thread t = newStartedThread(new CheckedRunnable() {
751     // public void realRun() {
752     // assertTrue(lock.readLock().tryLock());
753     // lock.readLock().unlock();
754     // }});
755    
756     // awaitTermination(t);
757     // lock.readLock().unlock();
758     // }
759    
760     // /**
761     // * write tryLock fails when readlocked
762     // */
763     // public void testWriteTryLockWhenReadLocked() { testWriteTryLockWhenReadLocked(false); }
764     // public void testWriteTryLockWhenReadLocked_fair() { testWriteTryLockWhenReadLocked(true); }
765     // public void testWriteTryLockWhenReadLocked(boolean fair) {
766     // final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(fair);
767     // lock.readLock().lock();
768     // Thread t = newStartedThread(new CheckedRunnable() {
769     // public void realRun() {
770     // assertFalse(lock.writeLock().tryLock());
771     // }});
772    
773     // awaitTermination(t);
774     // lock.readLock().unlock();
775     // }
776    
777     // /**
778     // * write timed tryLock times out if locked
779     // */
780     // public void testWriteTryLock_Timeout() { testWriteTryLock_Timeout(false); }
781     // public void testWriteTryLock_Timeout_fair() { testWriteTryLock_Timeout(true); }
782     // public void testWriteTryLock_Timeout(boolean fair) {
783     // final PublicReentrantReadWriteLock lock =
784     // new PublicReentrantReadWriteLock(fair);
785     // lock.writeLock().lock();
786     // Thread t = newStartedThread(new CheckedRunnable() {
787     // public void realRun() throws InterruptedException {
788     // long startTime = System.nanoTime();
789     // long timeoutMillis = 10;
790     // assertFalse(lock.writeLock().tryLock(timeoutMillis, MILLISECONDS));
791     // assertTrue(millisElapsedSince(startTime) >= timeoutMillis);
792     // }});
793    
794     // awaitTermination(t);
795     // releaseWriteLock(lock);
796     // }
797    
798     // /**
799     // * read timed tryLock times out if write-locked
800     // */
801     // public void testReadTryLock_Timeout() { testReadTryLock_Timeout(false); }
802     // public void testReadTryLock_Timeout_fair() { testReadTryLock_Timeout(true); }
803     // public void testReadTryLock_Timeout(boolean fair) {
804     // final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(fair);
805     // lock.writeLock().lock();
806     // Thread t = newStartedThread(new CheckedRunnable() {
807     // public void realRun() throws InterruptedException {
808     // long startTime = System.nanoTime();
809     // long timeoutMillis = 10;
810     // assertFalse(lock.readLock().tryLock(timeoutMillis, MILLISECONDS));
811     // assertTrue(millisElapsedSince(startTime) >= timeoutMillis);
812     // }});
813    
814     // awaitTermination(t);
815     // assertTrue(lock.writeLock().isHeldByCurrentThread());
816     // lock.writeLock().unlock();
817     // }
818    
819     // /**
820     // * write lockInterruptibly succeeds if unlocked, else is interruptible
821     // */
822     // public void testWriteLockInterruptibly() { testWriteLockInterruptibly(false); }
823     // public void testWriteLockInterruptibly_fair() { testWriteLockInterruptibly(true); }
824     // public void testWriteLockInterruptibly(boolean fair) {
825     // final PublicReentrantReadWriteLock lock =
826     // new PublicReentrantReadWriteLock(fair);
827     // try {
828     // lock.writeLock().lockInterruptibly();
829     // } catch (InterruptedException ie) {
830     // threadUnexpectedException(ie);
831     // }
832     // Thread t = newStartedThread(new CheckedInterruptedRunnable() {
833     // public void realRun() throws InterruptedException {
834     // lock.writeLock().lockInterruptibly();
835     // }});
836    
837     // waitForQueuedThread(lock, t);
838     // t.interrupt();
839     // assertTrue(lock.writeLock().isHeldByCurrentThread());
840     // awaitTermination(t);
841     // releaseWriteLock(lock);
842     // }
843    
844     // /**
845     // * read lockInterruptibly succeeds if lock free else is interruptible
846     // */
847     // public void testReadLockInterruptibly() { testReadLockInterruptibly(false); }
848     // public void testReadLockInterruptibly_fair() { testReadLockInterruptibly(true); }
849     // public void testReadLockInterruptibly(boolean fair) {
850     // final PublicReentrantReadWriteLock lock =
851     // new PublicReentrantReadWriteLock(fair);
852     // try {
853     // lock.readLock().lockInterruptibly();
854     // lock.readLock().unlock();
855     // lock.writeLock().lockInterruptibly();
856     // } catch (InterruptedException ie) {
857     // threadUnexpectedException(ie);
858     // }
859     // Thread t = newStartedThread(new CheckedInterruptedRunnable() {
860     // public void realRun() throws InterruptedException {
861     // lock.readLock().lockInterruptibly();
862     // }});
863    
864     // waitForQueuedThread(lock, t);
865     // t.interrupt();
866     // awaitTermination(t);
867     // releaseWriteLock(lock);
868     // }
869    
870     // /**
871     // * Calling await without holding lock throws IllegalMonitorStateException
872     // */
873     // public void testAwait_IMSE() { testAwait_IMSE(false); }
874     // public void testAwait_IMSE_fair() { testAwait_IMSE(true); }
875     // public void testAwait_IMSE(boolean fair) {
876     // final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(fair);
877     // final Condition c = lock.writeLock().newCondition();
878     // for (AwaitMethod awaitMethod : AwaitMethod.values()) {
879     // long startTime = System.nanoTime();
880     // try {
881     // await(c, awaitMethod);
882     // shouldThrow();
883     // } catch (IllegalMonitorStateException success) {
884     // } catch (InterruptedException e) { threadUnexpectedException(e); }
885     // assertTrue(millisElapsedSince(startTime) < LONG_DELAY_MS);
886     // }
887     // }
888    
889     // /**
890     // * Calling signal without holding lock throws IllegalMonitorStateException
891     // */
892     // public void testSignal_IMSE() { testSignal_IMSE(false); }
893     // public void testSignal_IMSE_fair() { testSignal_IMSE(true); }
894     // public void testSignal_IMSE(boolean fair) {
895     // final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(fair);
896     // final Condition c = lock.writeLock().newCondition();
897     // try {
898     // c.signal();
899     // shouldThrow();
900     // } catch (IllegalMonitorStateException success) {}
901     // }
902    
903     // /**
904     // * Calling signalAll without holding lock throws IllegalMonitorStateException
905     // */
906     // public void testSignalAll_IMSE() { testSignalAll_IMSE(false); }
907     // public void testSignalAll_IMSE_fair() { testSignalAll_IMSE(true); }
908     // public void testSignalAll_IMSE(boolean fair) {
909     // final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(fair);
910     // final Condition c = lock.writeLock().newCondition();
911     // try {
912     // c.signalAll();
913     // shouldThrow();
914     // } catch (IllegalMonitorStateException success) {}
915     // }
916    
917     // /**
918     // * awaitNanos without a signal times out
919     // */
920     // public void testAwaitNanos_Timeout() { testAwaitNanos_Timeout(false); }
921     // public void testAwaitNanos_Timeout_fair() { testAwaitNanos_Timeout(true); }
922     // public void testAwaitNanos_Timeout(boolean fair) {
923     // try {
924     // final ReentrantReadWriteLock lock =
925     // new ReentrantReadWriteLock(fair);
926     // final Condition c = lock.writeLock().newCondition();
927     // lock.writeLock().lock();
928     // long startTime = System.nanoTime();
929     // long timeoutMillis = 10;
930     // long timeoutNanos = MILLISECONDS.toNanos(timeoutMillis);
931     // long nanosRemaining = c.awaitNanos(timeoutNanos);
932     // assertTrue(nanosRemaining <= 0);
933     // assertTrue(millisElapsedSince(startTime) >= timeoutMillis);
934     // lock.writeLock().unlock();
935     // } catch (InterruptedException e) {
936     // threadUnexpectedException(e);
937     // }
938     // }
939    
940     // /**
941     // * timed await without a signal times out
942     // */
943     // public void testAwait_Timeout() { testAwait_Timeout(false); }
944     // public void testAwait_Timeout_fair() { testAwait_Timeout(true); }
945     // public void testAwait_Timeout(boolean fair) {
946     // try {
947     // final ReentrantReadWriteLock lock =
948     // new ReentrantReadWriteLock(fair);
949     // final Condition c = lock.writeLock().newCondition();
950     // lock.writeLock().lock();
951     // long startTime = System.nanoTime();
952     // long timeoutMillis = 10;
953     // assertFalse(c.await(timeoutMillis, MILLISECONDS));
954     // assertTrue(millisElapsedSince(startTime) >= timeoutMillis);
955     // lock.writeLock().unlock();
956     // } catch (InterruptedException e) {
957     // threadUnexpectedException(e);
958     // }
959     // }
960    
961     // /**
962     // * awaitUntil without a signal times out
963     // */
964     // public void testAwaitUntil_Timeout() { testAwaitUntil_Timeout(false); }
965     // public void testAwaitUntil_Timeout_fair() { testAwaitUntil_Timeout(true); }
966     // public void testAwaitUntil_Timeout(boolean fair) {
967     // try {
968     // final ReentrantReadWriteLock lock =
969     // new ReentrantReadWriteLock(fair);
970     // final Condition c = lock.writeLock().newCondition();
971     // lock.writeLock().lock();
972     // long startTime = System.nanoTime();
973     // long timeoutMillis = 10;
974     // java.util.Date d = new java.util.Date();
975     // assertFalse(c.awaitUntil(new java.util.Date(d.getTime() + timeoutMillis)));
976     // assertTrue(millisElapsedSince(startTime) >= timeoutMillis);
977     // lock.writeLock().unlock();
978     // } catch (InterruptedException e) {
979     // threadUnexpectedException(e);
980     // }
981     // }
982    
983     // /**
984     // * await returns when signalled
985     // */
986     // public void testAwait() { testAwait(false); }
987     // public void testAwait_fair() { testAwait(true); }
988     // public void testAwait(boolean fair) {
989     // final PublicReentrantReadWriteLock lock =
990     // new PublicReentrantReadWriteLock(fair);
991     // final Condition c = lock.writeLock().newCondition();
992     // final CountDownLatch locked = new CountDownLatch(1);
993     // Thread t = newStartedThread(new CheckedRunnable() {
994     // public void realRun() throws InterruptedException {
995     // lock.writeLock().lock();
996     // locked.countDown();
997     // c.await();
998     // lock.writeLock().unlock();
999     // }});
1000    
1001     // await(locked);
1002     // lock.writeLock().lock();
1003     // assertHasWaiters(lock, c, t);
1004     // c.signal();
1005     // assertHasNoWaiters(lock, c);
1006     // assertTrue(t.isAlive());
1007     // lock.writeLock().unlock();
1008     // awaitTermination(t);
1009     // }
1010    
1011     // /**
1012     // * awaitUninterruptibly is uninterruptible
1013     // */
1014     // public void testAwaitUninterruptibly() { testAwaitUninterruptibly(false); }
1015     // public void testAwaitUninterruptibly_fair() { testAwaitUninterruptibly(true); }
1016     // public void testAwaitUninterruptibly(boolean fair) {
1017     // final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(fair);
1018     // final Condition c = lock.writeLock().newCondition();
1019     // final CountDownLatch pleaseInterrupt = new CountDownLatch(2);
1020    
1021     // Thread t1 = newStartedThread(new CheckedRunnable() {
1022     // public void realRun() {
1023     // // Interrupt before awaitUninterruptibly
1024     // lock.writeLock().lock();
1025     // pleaseInterrupt.countDown();
1026     // Thread.currentThread().interrupt();
1027     // c.awaitUninterruptibly();
1028     // assertTrue(Thread.interrupted());
1029     // lock.writeLock().unlock();
1030     // }});
1031    
1032     // Thread t2 = newStartedThread(new CheckedRunnable() {
1033     // public void realRun() {
1034     // // Interrupt during awaitUninterruptibly
1035     // lock.writeLock().lock();
1036     // pleaseInterrupt.countDown();
1037     // c.awaitUninterruptibly();
1038     // assertTrue(Thread.interrupted());
1039     // lock.writeLock().unlock();
1040     // }});
1041    
1042     // await(pleaseInterrupt);
1043     // lock.writeLock().lock();
1044     // lock.writeLock().unlock();
1045     // t2.interrupt();
1046    
1047     // assertThreadStaysAlive(t1);
1048     // assertTrue(t2.isAlive());
1049    
1050     // lock.writeLock().lock();
1051     // c.signalAll();
1052     // lock.writeLock().unlock();
1053    
1054     // awaitTermination(t1);
1055     // awaitTermination(t2);
1056     // }
1057    
1058     // /**
1059     // * await/awaitNanos/awaitUntil is interruptible
1060     // */
1061     // public void testInterruptible_await() { testInterruptible(false, AwaitMethod.await); }
1062     // public void testInterruptible_await_fair() { testInterruptible(true, AwaitMethod.await); }
1063     // public void testInterruptible_awaitTimed() { testInterruptible(false, AwaitMethod.awaitTimed); }
1064     // public void testInterruptible_awaitTimed_fair() { testInterruptible(true, AwaitMethod.awaitTimed); }
1065     // public void testInterruptible_awaitNanos() { testInterruptible(false, AwaitMethod.awaitNanos); }
1066     // public void testInterruptible_awaitNanos_fair() { testInterruptible(true, AwaitMethod.awaitNanos); }
1067     // public void testInterruptible_awaitUntil() { testInterruptible(false, AwaitMethod.awaitUntil); }
1068     // public void testInterruptible_awaitUntil_fair() { testInterruptible(true, AwaitMethod.awaitUntil); }
1069     // public void testInterruptible(boolean fair, final AwaitMethod awaitMethod) {
1070     // final PublicReentrantReadWriteLock lock =
1071     // new PublicReentrantReadWriteLock(fair);
1072     // final Condition c = lock.writeLock().newCondition();
1073     // final CountDownLatch locked = new CountDownLatch(1);
1074     // Thread t = newStartedThread(new CheckedInterruptedRunnable() {
1075     // public void realRun() throws InterruptedException {
1076     // lock.writeLock().lock();
1077     // assertWriteLockedByMoi(lock);
1078     // assertHasNoWaiters(lock, c);
1079     // locked.countDown();
1080     // try {
1081     // await(c, awaitMethod);
1082     // } finally {
1083     // assertWriteLockedByMoi(lock);
1084     // assertHasNoWaiters(lock, c);
1085     // lock.writeLock().unlock();
1086     // assertFalse(Thread.interrupted());
1087     // }
1088     // }});
1089    
1090     // await(locked);
1091     // assertHasWaiters(lock, c, t);
1092     // t.interrupt();
1093     // awaitTermination(t);
1094     // assertNotWriteLocked(lock);
1095     // }
1096    
1097     // /**
1098     // * signalAll wakes up all threads
1099     // */
1100     // public void testSignalAll_await() { testSignalAll(false, AwaitMethod.await); }
1101     // public void testSignalAll_await_fair() { testSignalAll(true, AwaitMethod.await); }
1102     // public void testSignalAll_awaitTimed() { testSignalAll(false, AwaitMethod.awaitTimed); }
1103     // public void testSignalAll_awaitTimed_fair() { testSignalAll(true, AwaitMethod.awaitTimed); }
1104     // public void testSignalAll_awaitNanos() { testSignalAll(false, AwaitMethod.awaitNanos); }
1105     // public void testSignalAll_awaitNanos_fair() { testSignalAll(true, AwaitMethod.awaitNanos); }
1106     // public void testSignalAll_awaitUntil() { testSignalAll(false, AwaitMethod.awaitUntil); }
1107     // public void testSignalAll_awaitUntil_fair() { testSignalAll(true, AwaitMethod.awaitUntil); }
1108     // public void testSignalAll(boolean fair, final AwaitMethod awaitMethod) {
1109     // final PublicReentrantReadWriteLock lock =
1110     // new PublicReentrantReadWriteLock(fair);
1111     // final Condition c = lock.writeLock().newCondition();
1112     // final CountDownLatch locked = new CountDownLatch(2);
1113     // final Lock writeLock = lock.writeLock();
1114     // class Awaiter extends CheckedRunnable {
1115     // public void realRun() throws InterruptedException {
1116     // writeLock.lock();
1117     // locked.countDown();
1118     // await(c, awaitMethod);
1119     // writeLock.unlock();
1120     // }
1121     // }
1122    
1123     // Thread t1 = newStartedThread(new Awaiter());
1124     // Thread t2 = newStartedThread(new Awaiter());
1125    
1126     // await(locked);
1127     // writeLock.lock();
1128     // assertHasWaiters(lock, c, t1, t2);
1129     // c.signalAll();
1130     // assertHasNoWaiters(lock, c);
1131     // writeLock.unlock();
1132     // awaitTermination(t1);
1133     // awaitTermination(t2);
1134     // }
1135    
1136     // /**
1137     // * signal wakes up waiting threads in FIFO order
1138     // */
1139     // public void testSignalWakesFifo() { testSignalWakesFifo(false); }
1140     // public void testSignalWakesFifo_fair() { testSignalWakesFifo(true); }
1141     // public void testSignalWakesFifo(boolean fair) {
1142     // final PublicReentrantReadWriteLock lock =
1143     // new PublicReentrantReadWriteLock(fair);
1144     // final Condition c = lock.writeLock().newCondition();
1145     // final CountDownLatch locked1 = new CountDownLatch(1);
1146     // final CountDownLatch locked2 = new CountDownLatch(1);
1147     // final Lock writeLock = lock.writeLock();
1148     // Thread t1 = newStartedThread(new CheckedRunnable() {
1149     // public void realRun() throws InterruptedException {
1150     // writeLock.lock();
1151     // locked1.countDown();
1152     // c.await();
1153     // writeLock.unlock();
1154     // }});
1155    
1156     // await(locked1);
1157    
1158     // Thread t2 = newStartedThread(new CheckedRunnable() {
1159     // public void realRun() throws InterruptedException {
1160     // writeLock.lock();
1161     // locked2.countDown();
1162     // c.await();
1163     // writeLock.unlock();
1164     // }});
1165    
1166     // await(locked2);
1167    
1168     // writeLock.lock();
1169     // assertHasWaiters(lock, c, t1, t2);
1170     // assertFalse(lock.hasQueuedThreads());
1171     // c.signal();
1172     // assertHasWaiters(lock, c, t2);
1173     // assertTrue(lock.hasQueuedThread(t1));
1174     // assertFalse(lock.hasQueuedThread(t2));
1175     // c.signal();
1176     // assertHasNoWaiters(lock, c);
1177     // assertTrue(lock.hasQueuedThread(t1));
1178     // assertTrue(lock.hasQueuedThread(t2));
1179     // writeLock.unlock();
1180     // awaitTermination(t1);
1181     // awaitTermination(t2);
1182     // }
1183    
1184     // /**
1185     // * await after multiple reentrant locking preserves lock count
1186     // */
1187     // public void testAwaitLockCount() { testAwaitLockCount(false); }
1188     // public void testAwaitLockCount_fair() { testAwaitLockCount(true); }
1189     // public void testAwaitLockCount(boolean fair) {
1190     // final PublicReentrantReadWriteLock lock =
1191     // new PublicReentrantReadWriteLock(fair);
1192     // final Condition c = lock.writeLock().newCondition();
1193     // final CountDownLatch locked = new CountDownLatch(2);
1194     // Thread t1 = newStartedThread(new CheckedRunnable() {
1195     // public void realRun() throws InterruptedException {
1196     // lock.writeLock().lock();
1197     // assertWriteLockedByMoi(lock);
1198     // assertEquals(1, lock.writeLock().getHoldCount());
1199     // locked.countDown();
1200     // c.await();
1201     // assertWriteLockedByMoi(lock);
1202     // assertEquals(1, lock.writeLock().getHoldCount());
1203     // lock.writeLock().unlock();
1204     // }});
1205    
1206     // Thread t2 = newStartedThread(new CheckedRunnable() {
1207     // public void realRun() throws InterruptedException {
1208     // lock.writeLock().lock();
1209     // lock.writeLock().lock();
1210     // assertWriteLockedByMoi(lock);
1211     // assertEquals(2, lock.writeLock().getHoldCount());
1212     // locked.countDown();
1213     // c.await();
1214     // assertWriteLockedByMoi(lock);
1215     // assertEquals(2, lock.writeLock().getHoldCount());
1216     // lock.writeLock().unlock();
1217     // lock.writeLock().unlock();
1218     // }});
1219    
1220     // await(locked);
1221     // lock.writeLock().lock();
1222     // assertHasWaiters(lock, c, t1, t2);
1223     // c.signalAll();
1224     // assertHasNoWaiters(lock, c);
1225     // lock.writeLock().unlock();
1226     // awaitTermination(t1);
1227     // awaitTermination(t2);
1228     // }
1229    
1230     // /**
1231     // * A serialized lock deserializes as unlocked
1232     // */
1233     // public void testSerialization() { testSerialization(false); }
1234     // public void testSerialization_fair() { testSerialization(true); }
1235     // public void testSerialization(boolean fair) {
1236     // ReentrantReadWriteLock lock = new ReentrantReadWriteLock(fair);
1237     // lock.writeLock().lock();
1238     // lock.readLock().lock();
1239    
1240     // ReentrantReadWriteLock clone = serialClone(lock);
1241     // assertEquals(lock.isFair(), clone.isFair());
1242     // assertTrue(lock.isWriteLocked());
1243     // assertFalse(clone.isWriteLocked());
1244     // assertEquals(1, lock.getReadLockCount());
1245     // assertEquals(0, clone.getReadLockCount());
1246     // clone.writeLock().lock();
1247     // clone.readLock().lock();
1248     // assertTrue(clone.isWriteLocked());
1249     // assertEquals(1, clone.getReadLockCount());
1250     // clone.readLock().unlock();
1251     // clone.writeLock().unlock();
1252     // assertFalse(clone.isWriteLocked());
1253     // assertEquals(1, lock.getReadLockCount());
1254     // assertEquals(0, clone.getReadLockCount());
1255     // }
1256    
1257     // /**
1258     // * hasQueuedThreads reports whether there are waiting threads
1259     // */
1260     // public void testHasQueuedThreads() { testHasQueuedThreads(false); }
1261     // public void testHasQueuedThreads_fair() { testHasQueuedThreads(true); }
1262     // public void testHasQueuedThreads(boolean fair) {
1263     // final PublicReentrantReadWriteLock lock =
1264     // new PublicReentrantReadWriteLock(fair);
1265     // Thread t1 = new Thread(new InterruptedLockRunnable(lock));
1266     // Thread t2 = new Thread(new InterruptibleLockRunnable(lock));
1267     // assertFalse(lock.hasQueuedThreads());
1268     // lock.writeLock().lock();
1269     // assertFalse(lock.hasQueuedThreads());
1270     // t1.start();
1271     // waitForQueuedThread(lock, t1);
1272     // assertTrue(lock.hasQueuedThreads());
1273     // t2.start();
1274     // waitForQueuedThread(lock, t2);
1275     // assertTrue(lock.hasQueuedThreads());
1276     // t1.interrupt();
1277     // awaitTermination(t1);
1278     // assertTrue(lock.hasQueuedThreads());
1279     // lock.writeLock().unlock();
1280     // awaitTermination(t2);
1281     // assertFalse(lock.hasQueuedThreads());
1282     // }
1283    
1284     // /**
1285     // * hasQueuedThread(null) throws NPE
1286     // */
1287     // public void testHasQueuedThreadNPE() { testHasQueuedThreadNPE(false); }
1288     // public void testHasQueuedThreadNPE_fair() { testHasQueuedThreadNPE(true); }
1289     // public void testHasQueuedThreadNPE(boolean fair) {
1290     // final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(fair);
1291     // try {
1292     // lock.hasQueuedThread(null);
1293     // shouldThrow();
1294     // } catch (NullPointerException success) {}
1295     // }
1296    
1297     // /**
1298     // * hasQueuedThread reports whether a thread is queued
1299     // */
1300     // public void testHasQueuedThread() { testHasQueuedThread(false); }
1301     // public void testHasQueuedThread_fair() { testHasQueuedThread(true); }
1302     // public void testHasQueuedThread(boolean fair) {
1303     // final PublicReentrantReadWriteLock lock =
1304     // new PublicReentrantReadWriteLock(fair);
1305     // Thread t1 = new Thread(new InterruptedLockRunnable(lock));
1306     // Thread t2 = new Thread(new InterruptibleLockRunnable(lock));
1307     // assertFalse(lock.hasQueuedThread(t1));
1308     // assertFalse(lock.hasQueuedThread(t2));
1309     // lock.writeLock().lock();
1310     // t1.start();
1311     // waitForQueuedThread(lock, t1);
1312     // assertTrue(lock.hasQueuedThread(t1));
1313     // assertFalse(lock.hasQueuedThread(t2));
1314     // t2.start();
1315     // waitForQueuedThread(lock, t2);
1316     // assertTrue(lock.hasQueuedThread(t1));
1317     // assertTrue(lock.hasQueuedThread(t2));
1318     // t1.interrupt();
1319     // awaitTermination(t1);
1320     // assertFalse(lock.hasQueuedThread(t1));
1321     // assertTrue(lock.hasQueuedThread(t2));
1322     // lock.writeLock().unlock();
1323     // awaitTermination(t2);
1324     // assertFalse(lock.hasQueuedThread(t1));
1325     // assertFalse(lock.hasQueuedThread(t2));
1326     // }
1327    
1328     // /**
1329     // * getQueueLength reports number of waiting threads
1330     // */
1331     // public void testGetQueueLength() { testGetQueueLength(false); }
1332     // public void testGetQueueLength_fair() { testGetQueueLength(true); }
1333     // public void testGetQueueLength(boolean fair) {
1334     // final PublicReentrantReadWriteLock lock =
1335     // new PublicReentrantReadWriteLock(fair);
1336     // Thread t1 = new Thread(new InterruptedLockRunnable(lock));
1337     // Thread t2 = new Thread(new InterruptibleLockRunnable(lock));
1338     // assertEquals(0, lock.getQueueLength());
1339     // lock.writeLock().lock();
1340     // t1.start();
1341     // waitForQueuedThread(lock, t1);
1342     // assertEquals(1, lock.getQueueLength());
1343     // t2.start();
1344     // waitForQueuedThread(lock, t2);
1345     // assertEquals(2, lock.getQueueLength());
1346     // t1.interrupt();
1347     // awaitTermination(t1);
1348     // assertEquals(1, lock.getQueueLength());
1349     // lock.writeLock().unlock();
1350     // awaitTermination(t2);
1351     // assertEquals(0, lock.getQueueLength());
1352     // }
1353    
1354     // /**
1355     // * getQueuedThreads includes waiting threads
1356     // */
1357     // public void testGetQueuedThreads() { testGetQueuedThreads(false); }
1358     // public void testGetQueuedThreads_fair() { testGetQueuedThreads(true); }
1359     // public void testGetQueuedThreads(boolean fair) {
1360     // final PublicReentrantReadWriteLock lock =
1361     // new PublicReentrantReadWriteLock(fair);
1362     // Thread t1 = new Thread(new InterruptedLockRunnable(lock));
1363     // Thread t2 = new Thread(new InterruptibleLockRunnable(lock));
1364     // assertTrue(lock.getQueuedThreads().isEmpty());
1365     // lock.writeLock().lock();
1366     // assertTrue(lock.getQueuedThreads().isEmpty());
1367     // t1.start();
1368     // waitForQueuedThread(lock, t1);
1369     // assertEquals(1, lock.getQueuedThreads().size());
1370     // assertTrue(lock.getQueuedThreads().contains(t1));
1371     // t2.start();
1372     // waitForQueuedThread(lock, t2);
1373     // assertEquals(2, lock.getQueuedThreads().size());
1374     // assertTrue(lock.getQueuedThreads().contains(t1));
1375     // assertTrue(lock.getQueuedThreads().contains(t2));
1376     // t1.interrupt();
1377     // awaitTermination(t1);
1378     // assertFalse(lock.getQueuedThreads().contains(t1));
1379     // assertTrue(lock.getQueuedThreads().contains(t2));
1380     // assertEquals(1, lock.getQueuedThreads().size());
1381     // lock.writeLock().unlock();
1382     // awaitTermination(t2);
1383     // assertTrue(lock.getQueuedThreads().isEmpty());
1384     // }
1385    
1386     // /**
1387     // * hasWaiters throws NPE if null
1388     // */
1389     // public void testHasWaitersNPE() { testHasWaitersNPE(false); }
1390     // public void testHasWaitersNPE_fair() { testHasWaitersNPE(true); }
1391     // public void testHasWaitersNPE(boolean fair) {
1392     // final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(fair);
1393     // try {
1394     // lock.hasWaiters(null);
1395     // shouldThrow();
1396     // } catch (NullPointerException success) {}
1397     // }
1398    
1399     // /**
1400     // * getWaitQueueLength throws NPE if null
1401     // */
1402     // public void testGetWaitQueueLengthNPE() { testGetWaitQueueLengthNPE(false); }
1403     // public void testGetWaitQueueLengthNPE_fair() { testGetWaitQueueLengthNPE(true); }
1404     // public void testGetWaitQueueLengthNPE(boolean fair) {
1405     // final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(fair);
1406     // try {
1407     // lock.getWaitQueueLength(null);
1408     // shouldThrow();
1409     // } catch (NullPointerException success) {}
1410     // }
1411    
1412     // /**
1413     // * getWaitingThreads throws NPE if null
1414     // */
1415     // public void testGetWaitingThreadsNPE() { testGetWaitingThreadsNPE(false); }
1416     // public void testGetWaitingThreadsNPE_fair() { testGetWaitingThreadsNPE(true); }
1417     // public void testGetWaitingThreadsNPE(boolean fair) {
1418     // final PublicReentrantReadWriteLock lock = new PublicReentrantReadWriteLock(fair);
1419     // try {
1420     // lock.getWaitingThreads(null);
1421     // shouldThrow();
1422     // } catch (NullPointerException success) {}
1423     // }
1424    
1425     // /**
1426     // * hasWaiters throws IllegalArgumentException if not owned
1427     // */
1428     // public void testHasWaitersIAE() { testHasWaitersIAE(false); }
1429     // public void testHasWaitersIAE_fair() { testHasWaitersIAE(true); }
1430     // public void testHasWaitersIAE(boolean fair) {
1431     // final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(fair);
1432     // final Condition c = lock.writeLock().newCondition();
1433     // final ReentrantReadWriteLock lock2 = new ReentrantReadWriteLock(fair);
1434     // try {
1435     // lock2.hasWaiters(c);
1436     // shouldThrow();
1437     // } catch (IllegalArgumentException success) {}
1438     // }
1439    
1440     // /**
1441     // * hasWaiters throws IllegalMonitorStateException if not locked
1442     // */
1443     // public void testHasWaitersIMSE() { testHasWaitersIMSE(false); }
1444     // public void testHasWaitersIMSE_fair() { testHasWaitersIMSE(true); }
1445     // public void testHasWaitersIMSE(boolean fair) {
1446     // final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(fair);
1447     // final Condition c = lock.writeLock().newCondition();
1448     // try {
1449     // lock.hasWaiters(c);
1450     // shouldThrow();
1451     // } catch (IllegalMonitorStateException success) {}
1452     // }
1453    
1454     // /**
1455     // * getWaitQueueLength throws IllegalArgumentException if not owned
1456     // */
1457     // public void testGetWaitQueueLengthIAE() { testGetWaitQueueLengthIAE(false); }
1458     // public void testGetWaitQueueLengthIAE_fair() { testGetWaitQueueLengthIAE(true); }
1459     // public void testGetWaitQueueLengthIAE(boolean fair) {
1460     // final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(fair);
1461     // final Condition c = lock.writeLock().newCondition();
1462     // final ReentrantReadWriteLock lock2 = new ReentrantReadWriteLock(fair);
1463     // try {
1464     // lock2.getWaitQueueLength(c);
1465     // shouldThrow();
1466     // } catch (IllegalArgumentException success) {}
1467     // }
1468    
1469     // /**
1470     // * getWaitQueueLength throws IllegalMonitorStateException if not locked
1471     // */
1472     // public void testGetWaitQueueLengthIMSE() { testGetWaitQueueLengthIMSE(false); }
1473     // public void testGetWaitQueueLengthIMSE_fair() { testGetWaitQueueLengthIMSE(true); }
1474     // public void testGetWaitQueueLengthIMSE(boolean fair) {
1475     // final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(fair);
1476     // final Condition c = lock.writeLock().newCondition();
1477     // try {
1478     // lock.getWaitQueueLength(c);
1479     // shouldThrow();
1480     // } catch (IllegalMonitorStateException success) {}
1481     // }
1482    
1483     // /**
1484     // * getWaitingThreads throws IllegalArgumentException if not owned
1485     // */
1486     // public void testGetWaitingThreadsIAE() { testGetWaitingThreadsIAE(false); }
1487     // public void testGetWaitingThreadsIAE_fair() { testGetWaitingThreadsIAE(true); }
1488     // public void testGetWaitingThreadsIAE(boolean fair) {
1489     // final PublicReentrantReadWriteLock lock =
1490     // new PublicReentrantReadWriteLock(fair);
1491     // final Condition c = lock.writeLock().newCondition();
1492     // final PublicReentrantReadWriteLock lock2 =
1493     // new PublicReentrantReadWriteLock(fair);
1494     // try {
1495     // lock2.getWaitingThreads(c);
1496     // shouldThrow();
1497     // } catch (IllegalArgumentException success) {}
1498     // }
1499    
1500     // /**
1501     // * getWaitingThreads throws IllegalMonitorStateException if not locked
1502     // */
1503     // public void testGetWaitingThreadsIMSE() { testGetWaitingThreadsIMSE(false); }
1504     // public void testGetWaitingThreadsIMSE_fair() { testGetWaitingThreadsIMSE(true); }
1505     // public void testGetWaitingThreadsIMSE(boolean fair) {
1506     // final PublicReentrantReadWriteLock lock =
1507     // new PublicReentrantReadWriteLock(fair);
1508     // final Condition c = lock.writeLock().newCondition();
1509     // try {
1510     // lock.getWaitingThreads(c);
1511     // shouldThrow();
1512     // } catch (IllegalMonitorStateException success) {}
1513     // }
1514    
1515     // /**
1516     // * hasWaiters returns true when a thread is waiting, else false
1517     // */
1518     // public void testHasWaiters() { testHasWaiters(false); }
1519     // public void testHasWaiters_fair() { testHasWaiters(true); }
1520     // public void testHasWaiters(boolean fair) {
1521     // final PublicReentrantReadWriteLock lock =
1522     // new PublicReentrantReadWriteLock(fair);
1523     // final Condition c = lock.writeLock().newCondition();
1524     // final CountDownLatch locked = new CountDownLatch(1);
1525     // Thread t = newStartedThread(new CheckedRunnable() {
1526     // public void realRun() throws InterruptedException {
1527     // lock.writeLock().lock();
1528     // assertHasNoWaiters(lock, c);
1529     // assertFalse(lock.hasWaiters(c));
1530     // locked.countDown();
1531     // c.await();
1532     // assertHasNoWaiters(lock, c);
1533     // assertFalse(lock.hasWaiters(c));
1534     // lock.writeLock().unlock();
1535     // }});
1536    
1537     // await(locked);
1538     // lock.writeLock().lock();
1539     // assertHasWaiters(lock, c, t);
1540     // assertTrue(lock.hasWaiters(c));
1541     // c.signal();
1542     // assertHasNoWaiters(lock, c);
1543     // assertFalse(lock.hasWaiters(c));
1544     // lock.writeLock().unlock();
1545     // awaitTermination(t);
1546     // assertHasNoWaiters(lock, c);
1547     // }
1548    
1549     // /**
1550     // * getWaitQueueLength returns number of waiting threads
1551     // */
1552     // public void testGetWaitQueueLength() { testGetWaitQueueLength(false); }
1553     // public void testGetWaitQueueLength_fair() { testGetWaitQueueLength(true); }
1554     // public void testGetWaitQueueLength(boolean fair) {
1555     // final PublicReentrantReadWriteLock lock =
1556     // new PublicReentrantReadWriteLock(fair);
1557     // final Condition c = lock.writeLock().newCondition();
1558     // final CountDownLatch locked = new CountDownLatch(1);
1559     // Thread t = newStartedThread(new CheckedRunnable() {
1560     // public void realRun() throws InterruptedException {
1561     // lock.writeLock().lock();
1562     // assertEquals(0, lock.getWaitQueueLength(c));
1563     // locked.countDown();
1564     // c.await();
1565     // lock.writeLock().unlock();
1566     // }});
1567    
1568     // await(locked);
1569     // lock.writeLock().lock();
1570     // assertHasWaiters(lock, c, t);
1571     // assertEquals(1, lock.getWaitQueueLength(c));
1572     // c.signal();
1573     // assertHasNoWaiters(lock, c);
1574     // assertEquals(0, lock.getWaitQueueLength(c));
1575     // lock.writeLock().unlock();
1576     // awaitTermination(t);
1577     // }
1578    
1579     // /**
1580     // * getWaitingThreads returns only and all waiting threads
1581     // */
1582     // public void testGetWaitingThreads() { testGetWaitingThreads(false); }
1583     // public void testGetWaitingThreads_fair() { testGetWaitingThreads(true); }
1584     // public void testGetWaitingThreads(boolean fair) {
1585     // final PublicReentrantReadWriteLock lock =
1586     // new PublicReentrantReadWriteLock(fair);
1587     // final Condition c = lock.writeLock().newCondition();
1588     // final CountDownLatch locked1 = new CountDownLatch(1);
1589     // final CountDownLatch locked2 = new CountDownLatch(1);
1590     // Thread t1 = new Thread(new CheckedRunnable() {
1591     // public void realRun() throws InterruptedException {
1592     // lock.writeLock().lock();
1593     // assertTrue(lock.getWaitingThreads(c).isEmpty());
1594     // locked1.countDown();
1595     // c.await();
1596     // lock.writeLock().unlock();
1597     // }});
1598    
1599     // Thread t2 = new Thread(new CheckedRunnable() {
1600     // public void realRun() throws InterruptedException {
1601     // lock.writeLock().lock();
1602     // assertFalse(lock.getWaitingThreads(c).isEmpty());
1603     // locked2.countDown();
1604     // c.await();
1605     // lock.writeLock().unlock();
1606     // }});
1607    
1608     // lock.writeLock().lock();
1609     // assertTrue(lock.getWaitingThreads(c).isEmpty());
1610     // lock.writeLock().unlock();
1611    
1612     // t1.start();
1613     // await(locked1);
1614     // t2.start();
1615     // await(locked2);
1616    
1617     // lock.writeLock().lock();
1618     // assertTrue(lock.hasWaiters(c));
1619     // assertTrue(lock.getWaitingThreads(c).contains(t1));
1620     // assertTrue(lock.getWaitingThreads(c).contains(t2));
1621     // assertEquals(2, lock.getWaitingThreads(c).size());
1622     // c.signalAll();
1623     // assertHasNoWaiters(lock, c);
1624     // lock.writeLock().unlock();
1625    
1626     // awaitTermination(t1);
1627     // awaitTermination(t2);
1628    
1629     // assertHasNoWaiters(lock, c);
1630     // }
1631    
1632     // /**
1633     // * toString indicates current lock state
1634     // */
1635     // public void testToString() { testToString(false); }
1636     // public void testToString_fair() { testToString(true); }
1637     // public void testToString(boolean fair) {
1638     // ReentrantReadWriteLock lock = new ReentrantReadWriteLock(fair);
1639     // assertTrue(lock.toString().contains("Write locks = 0"));
1640     // assertTrue(lock.toString().contains("Read locks = 0"));
1641     // lock.writeLock().lock();
1642     // assertTrue(lock.toString().contains("Write locks = 1"));
1643     // assertTrue(lock.toString().contains("Read locks = 0"));
1644     // lock.writeLock().unlock();
1645     // lock.readLock().lock();
1646     // lock.readLock().lock();
1647     // assertTrue(lock.toString().contains("Write locks = 0"));
1648     // assertTrue(lock.toString().contains("Read locks = 2"));
1649     // }
1650    
1651     // /**
1652     // * readLock.toString indicates current lock state
1653     // */
1654     // public void testReadLockToString() { testReadLockToString(false); }
1655     // public void testReadLockToString_fair() { testReadLockToString(true); }
1656     // public void testReadLockToString(boolean fair) {
1657     // ReentrantReadWriteLock lock = new ReentrantReadWriteLock(fair);
1658     // assertTrue(lock.readLock().toString().contains("Read locks = 0"));
1659     // lock.readLock().lock();
1660     // lock.readLock().lock();
1661     // assertTrue(lock.readLock().toString().contains("Read locks = 2"));
1662     // }
1663    
1664     // /**
1665     // * writeLock.toString indicates current lock state
1666     // */
1667     // public void testWriteLockToString() { testWriteLockToString(false); }
1668     // public void testWriteLockToString_fair() { testWriteLockToString(true); }
1669     // public void testWriteLockToString(boolean fair) {
1670     // ReentrantReadWriteLock lock = new ReentrantReadWriteLock(fair);
1671     // assertTrue(lock.writeLock().toString().contains("Unlocked"));
1672     // lock.writeLock().lock();
1673     // assertTrue(lock.writeLock().toString().contains("Locked"));
1674     // lock.writeLock().unlock();
1675     // assertTrue(lock.writeLock().toString().contains("Unlocked"));
1676     // }
1677    
1678     }