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.20 by jsr166, Thu Oct 21 23:28:13 2010 UTC vs.
Revision 1.28 by jsr166, Fri Dec 3 21:54:32 2010 UTC

# Line 25 | Line 25 | public class PhaserTest extends JSR166Te
25          return new TestSuite(PhaserTest.class);
26      }
27  
28 <    /** Checks state of phaser. */
28 >    private static final int maxParties = 65535;
29 >
30 >    /** Checks state of unterminated phaser. */
31      protected void assertState(Phaser phaser,
32                                 int phase, int parties, int unarrived) {
33          assertEquals(phase, phaser.getPhase());
34          assertEquals(parties, phaser.getRegisteredParties());
35          assertEquals(unarrived, phaser.getUnarrivedParties());
36          assertEquals(parties - unarrived, phaser.getArrivedParties());
37 <        assertTrue((phaser.getPhase() >= 0) ^ phaser.isTerminated());
37 >        assertFalse(phaser.isTerminated());
38      }
39  
40      /** Checks state of terminated phaser. */
41 <    protected void assertTerminated(Phaser phaser, int parties, int unarrived) {
41 >    protected void assertTerminated(Phaser phaser, int maxPhase, int parties) {
42          assertTrue(phaser.isTerminated());
43 <        assertTrue(phaser.getPhase() < 0);
43 >        int expectedPhase = maxPhase + Integer.MIN_VALUE;
44 >        assertEquals(expectedPhase, phaser.getPhase());
45          assertEquals(parties, phaser.getRegisteredParties());
46 <        assertEquals(unarrived, phaser.getUnarrivedParties());
47 <        assertEquals(parties - unarrived, phaser.getArrivedParties());
46 >        assertEquals(expectedPhase, phaser.register());
47 >        assertEquals(expectedPhase, phaser.arrive());
48 >        assertEquals(expectedPhase, phaser.arriveAndDeregister());
49      }
50  
51 <    protected void assertTerminated(Phaser phaser) {
52 <        assertTerminated(phaser, 0, 0);
51 >    protected void assertTerminated(Phaser phaser, int maxPhase) {
52 >        assertTerminated(phaser, maxPhase, 0);
53      }
54  
55      /**
56       * Empty constructor builds a new Phaser with no parent, no registered
57       * parties and initial phase number of 0
58       */
59 <    public void testConstructor1() {
59 >    public void testConstructorDefaultValues() {
60          Phaser phaser = new Phaser();
61          assertNull(phaser.getParent());
62 +        assertEquals(0, phaser.getRegisteredParties());
63          assertEquals(0, phaser.getArrivedParties());
64 +        assertEquals(0, phaser.getUnarrivedParties());
65          assertEquals(0, phaser.getPhase());
66      }
67  
68      /**
69 <     * A negative party number for the constructor throws illegal argument
70 <     * exception
69 >     * Constructing with a negative number of parties throws
70 >     * IllegalArgumentException
71       */
72 <    public void testConstructor2() {
72 >    public void testConstructorNegativeParties() {
73          try {
74              new Phaser(-1);
75              shouldThrow();
# Line 71 | Line 77 | public class PhaserTest extends JSR166Te
77      }
78  
79      /**
80 <     * The parent being input into the constructor should equal the original
81 <     * parent when being returned
80 >     * Constructing with a negative number of parties throws
81 >     * IllegalArgumentException
82       */
83 <    public void testConstructor3() {
84 <        Phaser parent = new Phaser();
85 <        assertEquals(parent, new Phaser(parent).getParent());
83 >    public void testConstructorNegativeParties2() {
84 >        try {
85 >            new Phaser(new Phaser(), -1);
86 >            shouldThrow();
87 >        } catch (IllegalArgumentException success) {}
88      }
89  
90      /**
91 <     * A negative party number for the constructor throws illegal argument
92 <     * exception
91 >     * Constructing with a number of parties > 65535 throws
92 >     * IllegalArgumentException
93       */
94 <    public void testConstructor4() {
94 >    public void testConstructorPartiesExceedsLimit() {
95 >        new Phaser(maxParties);
96          try {
97 <            new Phaser(new Phaser(), -1);
97 >            new Phaser(maxParties + 1);
98 >            shouldThrow();
99 >        } catch (IllegalArgumentException success) {}
100 >
101 >        new Phaser(new Phaser(), maxParties);
102 >        try {
103 >            new Phaser(new Phaser(), maxParties + 1);
104              shouldThrow();
105          } catch (IllegalArgumentException success) {}
106      }
107  
108      /**
109 +     * The parent provided to the constructor should be returned from
110 +     * a later call to getParent
111 +     */
112 +    public void testConstructor3() {
113 +        Phaser parent = new Phaser();
114 +        assertSame(parent, new Phaser(parent).getParent());
115 +        assertNull(new Phaser(null).getParent());
116 +    }
117 +
118 +    /**
119       * The parent being input into the parameter should equal the original
120       * parent when being returned
121       */
122      public void testConstructor5() {
123          Phaser parent = new Phaser();
124 <        assertEquals(parent, new Phaser(parent, 0).getParent());
124 >        assertSame(parent, new Phaser(parent, 0).getParent());
125 >        assertNull(new Phaser(null, 0).getParent());
126      }
127  
128      /**
129 <     * register() will increment the number of unarrived parties by one and not
130 <     * affect its arrived parties
129 >     * register() will increment the number of unarrived parties by
130 >     * one and not affect its arrived parties
131       */
132      public void testRegister1() {
133          Phaser phaser = new Phaser();
# Line 115 | Line 141 | public class PhaserTest extends JSR166Te
141       */
142      public void testRegister2() {
143          Phaser phaser = new Phaser(0);
118        int maxParties = (1 << 16) - 1;
144          assertState(phaser, 0, 0, 0);
145          assertEquals(0, phaser.bulkRegister(maxParties - 10));
146          assertState(phaser, 0, maxParties - 10, maxParties - 10);
# Line 128 | Line 153 | public class PhaserTest extends JSR166Te
153              phaser.register();
154              shouldThrow();
155          } catch (IllegalStateException success) {}
156 +
157 +        try {
158 +            phaser.bulkRegister(Integer.MAX_VALUE);
159 +            shouldThrow();
160 +        } catch (IllegalStateException success) {}
161      }
162  
163      /**
# Line 229 | Line 259 | public class PhaserTest extends JSR166Te
259              assertState(phaser, 0, 1, 1);
260          }
261          assertEquals(0, phaser.arriveAndDeregister());
262 <        assertTerminated(phaser);
262 >        assertTerminated(phaser, 1);
263      }
264  
265      /**
# Line 260 | Line 290 | public class PhaserTest extends JSR166Te
290      public void testArrive3() {
291          Phaser phaser = new Phaser(1);
292          phaser.forceTermination();
293 <        assertTerminated(phaser, 1, 1);
293 >        assertTerminated(phaser, 0, 1);
294 >        assertEquals(0, phaser.getPhase() + Integer.MIN_VALUE);
295          assertTrue(phaser.arrive() < 0);
296          assertTrue(phaser.register() < 0);
297          assertTrue(phaser.arriveAndDeregister() < 0);
# Line 301 | Line 332 | public class PhaserTest extends JSR166Te
332          Phaser parent = new Phaser();
333          Phaser child = new Phaser(parent);
334          assertState(child, 0, 0, 0);
335 <        assertState(parent, 0, 1, 1);
335 >        assertState(parent, 0, 0, 0);
336          assertEquals(0, child.register());
337          assertState(child, 0, 1, 1);
338          assertState(parent, 0, 1, 1);
339          assertEquals(0, child.arriveAndDeregister());
340 <        assertTerminated(child);
341 <        assertTerminated(parent);
340 >        assertTerminated(child, 1);
341 >        assertTerminated(parent, 1);
342      }
343  
344      /**
# Line 334 | Line 365 | public class PhaserTest extends JSR166Te
365          Phaser root = new Phaser();
366          Phaser parent = new Phaser(root);
367          Phaser child = new Phaser(parent);
368 <        assertState(root, 0, 1, 1);
369 <        assertState(parent, 0, 1, 1);
368 >        assertState(root, 0, 0, 0);
369 >        assertState(parent, 0, 0, 0);
370          assertState(child, 0, 0, 0);
371          assertEquals(0, child.register());
372          assertState(root, 0, 1, 1);
373          assertState(parent, 0, 1, 1);
374          assertState(child, 0, 1, 1);
375          assertEquals(0, child.arriveAndDeregister());
376 <        assertTerminated(child);
377 <        assertTerminated(parent);
378 <        assertTerminated(root);
376 >        assertTerminated(child, 1);
377 >        assertTerminated(parent, 1);
378 >        assertTerminated(root, 1);
379      }
380  
381      /**
# Line 362 | Line 393 | public class PhaserTest extends JSR166Te
393          assertEquals(1, phaser.arriveAndDeregister());
394          assertState(phaser, 1, 1, 1);
395          assertEquals(1, phaser.arriveAndDeregister());
396 <        assertTerminated(phaser);
396 >        assertTerminated(phaser, 2);
397          awaitTermination(t, SHORT_DELAY_MS);
398      }
399  
# Line 566 | Line 597 | public class PhaserTest extends JSR166Te
597                      assertTrue(phaser.awaitAdvance(0) < 0);
598                      assertTrue(phaser.isTerminated());
599                      assertTrue(phaser.getPhase() < 0);
600 +                    assertEquals(0, phaser.getPhase() + Integer.MIN_VALUE);
601                      assertEquals(3, phaser.getRegisteredParties());
602                  }};
603              threads.add(newStartedThread(r));
604          }
605          threadsStarted.await();
606          phaser.forceTermination();
607 +        assertTrue(phaser.isTerminated());
608 +        assertEquals(0, phaser.getPhase() + Integer.MIN_VALUE);
609          for (Thread thread : threads)
610              awaitTermination(thread, SMALL_DELAY_MS);
577        assertTrue(phaser.isTerminated());
578        assertTrue(phaser.getPhase() < 0);
611          assertEquals(3, phaser.getRegisteredParties());
612      }
613  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines