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

Comparing jsr166/src/test/tck/PhaserTest.java (file contents):
Revision 1.7 by jsr166, Wed Aug 5 00:48:28 2009 UTC vs.
Revision 1.17 by jsr166, Mon Oct 11 07:43:53 2010 UTC

# Line 8 | Line 8
8   import java.util.ArrayList;
9   import java.util.List;
10   import java.util.concurrent.atomic.AtomicInteger;
11 + import java.util.concurrent.atomic.AtomicBoolean;
12   import java.util.concurrent.*;
13 + import static java.util.concurrent.TimeUnit.MILLISECONDS;
14   import junit.framework.Test;
15   import junit.framework.TestSuite;
16  
# Line 41 | Line 43 | public class PhaserTest extends JSR166Te
43          try {
44              new Phaser(-1);
45              shouldThrow();
46 <        } catch (IllegalArgumentException success) {
45 <        }
46 >        } catch (IllegalArgumentException success) {}
47      }
48  
49      /**
# Line 62 | Line 63 | public class PhaserTest extends JSR166Te
63          try {
64              new Phaser(new Phaser(), -1);
65              shouldThrow();
66 <        } catch (IllegalArgumentException success) {
66 <        }
66 >        } catch (IllegalArgumentException success) {}
67      }
68  
69      /**
# Line 100 | Line 100 | public class PhaserTest extends JSR166Te
100          try {
101              phaser.register();
102              shouldThrow();
103 <        } catch (IllegalStateException success) {
104 <        }
103 >        } catch (IllegalStateException success) {}
104      }
105  
106      /**
# Line 141 | Line 140 | public class PhaserTest extends JSR166Te
140          try {
141              new Phaser().bulkRegister(-1);
142              shouldThrow();
143 <        } catch (IllegalArgumentException success) {
145 <        }
143 >        } catch (IllegalArgumentException success) {}
144      }
145  
146      /**
# Line 163 | Line 161 | public class PhaserTest extends JSR166Te
161          try {
162              new Phaser().bulkRegister(1 << 16);
163              shouldThrow();
164 <        } catch (IllegalStateException success) {
167 <        }
164 >        } catch (IllegalStateException success) {}
165      }
166  
167      /**
# Line 181 | Line 178 | public class PhaserTest extends JSR166Te
178      }
179  
180      /**
181 <     *  Arrive() on a registered phaser increments phase.
181 >     * Arrive() on a registered phaser increments phase.
182       */
183      public void testArrive1() {
184          Phaser phaser = new Phaser(1);
# Line 199 | Line 196 | public class PhaserTest extends JSR166Te
196          for (int i = 0; i < 10; i++)
197              phaser.register();
198              threads.add(newStartedThread(new CheckedRunnable() {
199 <                void realRun() throws InterruptedException {
199 >                public void realRun() throws InterruptedException {
200                      Thread.sleep(SMALL_DELAY_MS);
201                      phaser.arriveAndDeregister();
202                  }}));
# Line 229 | Line 226 | public class PhaserTest extends JSR166Te
226              Phaser phaser = new Phaser();
227              phaser.arriveAndDeregister();
228              shouldThrow();
229 <        } catch (IllegalStateException success) {
233 <        }
229 >        } catch (IllegalStateException success) {}
230      }
231  
232      /**
# Line 241 | Line 237 | public class PhaserTest extends JSR166Te
237          phaser.register();
238          phaser.arrive();
239          int p = phaser.getArrivedParties();
240 <        assertTrue(p == 1);
240 >        assertEquals(1, p);
241          phaser.arriveAndDeregister();
242          assertTrue(phaser.getArrivedParties() < p);
243      }
# Line 258 | Line 254 | public class PhaserTest extends JSR166Te
254          assertTrue(parent.getUnarrivedParties() > 0);
255          assertTrue(root.getUnarrivedParties() > 0);
256          root.arriveAndDeregister();
257 <        assertTrue(parent.getUnarrivedParties() == 0);
258 <        assertTrue(root.getUnarrivedParties() == 0);
257 >        assertEquals(0, parent.getUnarrivedParties());
258 >        assertEquals(0, root.getUnarrivedParties());
259          assertTrue(root.isTerminated() && parent.isTerminated());
260      }
261  
# Line 289 | Line 285 | public class PhaserTest extends JSR166Te
285          assertTrue(child.getUnarrivedParties() > 0);
286          root.register();
287          root.arriveAndDeregister();
288 <        assertTrue(parent.getUnarrivedParties() == 0);
289 <        assertTrue(child.getUnarrivedParties() == 0);
288 >        assertEquals(0, parent.getUnarrivedParties());
289 >        assertEquals(0, child.getUnarrivedParties());
290          assertTrue(root.isTerminated());
291      }
292  
# Line 301 | Line 297 | public class PhaserTest extends JSR166Te
297      public void testArriveAndDeregister6() throws InterruptedException {
298          final Phaser phaser = new Phaser(2);
299          Thread t = newStartedThread(new CheckedRunnable() {
300 <            void realRun() {
300 >            public void realRun() {
301                  sleepTillInterrupted(SHORT_DELAY_MS);
302                  phaser.arrive();
303              }});
# Line 334 | Line 330 | public class PhaserTest extends JSR166Te
330      public void testAwaitAdvance3() throws InterruptedException {
331          final Phaser phaser = new Phaser();
332          phaser.register();
333 +        final CountDownLatch threadStarted = new CountDownLatch(1);
334  
335          Thread t = newStartedThread(new CheckedRunnable() {
336 <            void realRun() throws InterruptedException {
336 >            public void realRun() throws InterruptedException {
337                  phaser.register();
338 <                sleepTillInterrupted(LONG_DELAY_MS);
338 >                threadStarted.countDown();
339                  phaser.awaitAdvance(phaser.arrive());
340 +                assertTrue(Thread.currentThread().isInterrupted());
341              }});
342 <        Thread.sleep(SMALL_DELAY_MS);
342 >        assertTrue(threadStarted.await(SMALL_DELAY_MS, MILLISECONDS));
343          t.interrupt();
346        Thread.sleep(SMALL_DELAY_MS);
344          phaser.arrive();
345 <        assertFalse(t.isInterrupted());
349 <        t.join();
345 >        awaitTermination(t, SMALL_DELAY_MS);
346      }
347  
348      /**
# Line 359 | Line 355 | public class PhaserTest extends JSR166Te
355          List<Thread> threads = new ArrayList<Thread>();
356          for (int i = 0; i < 4; i++) {
357              threads.add(newStartedThread(new CheckedRunnable() {
358 <                void realRun() {
358 >                public void realRun() {
359                      int phase = phaser.arrive();
360                      phaseCount.incrementAndGet();
361                      sleepTillInterrupted(SMALL_DELAY_MS);
362                      phaser.awaitAdvance(phase);
363 <                    threadAssertTrue(phaseCount.get() == 4);
363 >                    assertEquals(phaseCount.get(), 4);
364                  }}));
365          }
366          for (Thread thread : threads)
# Line 382 | Line 378 | public class PhaserTest extends JSR166Te
378          List<Thread> threads = new ArrayList<Thread>();
379          for (int i = 0; i < 8; i++) {
380              threads.add(newStartedThread(new CheckedRunnable() {
381 <                void realRun() {
381 >                public void realRun() {
382                      sleepTillInterrupted(SHORT_DELAY_MS);
383                      phaser.arrive();
384                  }}));
385              phase = phaser.awaitAdvance(phaser.arrive());
386 <            threadAssertEquals(phase, phaser.getPhase());
386 >            assertEquals(phase, phaser.getPhase());
387          }
388          for (Thread thread : threads)
389              thread.join();
# Line 405 | Line 401 | public class PhaserTest extends JSR166Te
401           * waits for the second thread's party to arrive
402           */
403          Thread t1 = newStartedThread(new CheckedRunnable() {
404 <            void realRun() {
404 >            public void realRun() {
405                  sleepTillInterrupted(SMALL_DELAY_MS);
406                  int phase = phaser.awaitAdvance(phaser.arrive());
407                  /*
408                   * This point is reached when force termination is called in which phase = -1
409                   */
410 <                threadAssertTrue(phase < 0);
411 <                threadAssertTrue(phaser.isTerminated());
410 >                assertTrue(phase < 0);
411 >                assertTrue(phaser.isTerminated());
412              }});
413          /*
414           * This thread will cause the first thread run to wait, in doing so
# Line 420 | Line 416 | public class PhaserTest extends JSR166Te
416           * should exit peacefully as this one
417           */
418          Thread t2 = newStartedThread(new CheckedRunnable() {
419 <            void realRun() {
419 >            public void realRun() {
420                  sleepTillInterrupted(MEDIUM_DELAY_MS);
421                  int p1 = phaser.arrive();
422                  int phase = phaser.awaitAdvance(p1);
423 <                threadAssertTrue(phase < 0);
424 <                threadAssertTrue(phaser.isTerminated());
423 >                assertTrue(phase < 0);
424 >                assertTrue(phaser.isTerminated());
425              }});
426  
427          phaser.arrive();
# Line 443 | Line 439 | public class PhaserTest extends JSR166Te
439              Phaser phaser = new Phaser();
440              phaser.arriveAndAwaitAdvance();
441              shouldThrow();
442 <        } catch (IllegalStateException success) {
447 <        }
442 >        } catch (IllegalStateException success) {}
443      }
444  
445      /**
# Line 452 | Line 447 | public class PhaserTest extends JSR166Te
447       */
448      public void testArriveAndAwaitAdvance2() throws InterruptedException {
449          final Phaser phaser = new Phaser(2);
450 <        Thread th = newStartedThread(new CheckedRunnable() {
451 <            void realRun() {
450 >        final CountDownLatch threadStarted = new CountDownLatch(1);
451 >        final AtomicBoolean advanced = new AtomicBoolean(false);
452 >        final AtomicBoolean checkedInterruptStatus = new AtomicBoolean(false);
453 >        Thread t = newStartedThread(new CheckedRunnable() {
454 >            public void realRun() throws InterruptedException {
455 >                threadStarted.countDown();
456                  phaser.arriveAndAwaitAdvance();
457 +                advanced.set(true);
458 +                assertTrue(Thread.currentThread().isInterrupted());
459 +                while (!checkedInterruptStatus.get())
460 +                    Thread.yield();
461              }});
462  
463 <        Thread.sleep(SMALL_DELAY_MS);
464 <        th.interrupt();
462 <        Thread.sleep(SMALL_DELAY_MS);
463 >        assertTrue(threadStarted.await(SMALL_DELAY_MS, MILLISECONDS));
464 >        t.interrupt();
465          phaser.arrive();
466 <        assertFalse(th.isInterrupted());
467 <        th.join();
466 >        while (!advanced.get())
467 >            Thread.yield();
468 >        assertTrue(t.isInterrupted());
469 >        checkedInterruptStatus.set(true);
470 >        awaitTermination(t, SMALL_DELAY_MS);
471      }
472  
473      /**
# Line 472 | Line 477 | public class PhaserTest extends JSR166Te
477       */
478      public void testArriveAndAwaitAdvance3() throws InterruptedException {
479          final Phaser phaser = new Phaser(1);
475        final AtomicInteger arrivingCount = new AtomicInteger(0);
480          final List<Thread> threads = new ArrayList<Thread>();
481 <        for (int i = 0; i < 6; i++) {
481 >        for (int i = 0; i < 3; i++) {
482              threads.add(newStartedThread(new CheckedRunnable() {
483 <                void realRun() throws InterruptedException {
484 <                    phaser.register();
485 <                    sleepTillInterrupted(SHORT_DELAY_MS);
486 <                    arrivingCount.getAndIncrement();
483 <                    phaser.arrive();
484 <                }}));
483 >                    public void realRun() throws InterruptedException {
484 >                        phaser.register();
485 >                        phaser.arriveAndAwaitAdvance();
486 >                    }}));
487          }
488 <        int phaseNumber = phaser.arriveAndAwaitAdvance();
489 <        arrivingCount.incrementAndGet();
490 <        //the + 1 adds to expectedArrive to account for the main threads arrival
489 <        int expectedArrived = phaseNumber > 0 ? phaseNumber * six + 1 : phaser.getArrivedParties() + 1;
490 <        threadAssertEquals(expectedArrived, arrivingCount.get());
488 >        Thread.sleep(MEDIUM_DELAY_MS);
489 >        assertEquals(phaser.getArrivedParties(), 3);
490 >        phaser.arriveAndAwaitAdvance();
491          for (Thread thread : threads)
492              thread.join();
493      }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines