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

Comparing jsr166/src/test/tck/DoubleAdderTest.java (file contents):
Revision 1.1 by dl, Wed Mar 20 20:29:02 2013 UTC vs.
Revision 1.5 by jsr166, Wed Dec 31 19:05:42 2014 UTC

# Line 4 | Line 4
4   * http://creativecommons.org/publicdomain/zero/1.0/
5   */
6  
7 < import junit.framework.*;
8 < import java.util.concurrent.*;
7 > import java.util.concurrent.CyclicBarrier;
8 > import java.util.concurrent.Executors;
9 > import java.util.concurrent.ExecutorService;
10   import java.util.concurrent.atomic.DoubleAdder;
11  
12 + import junit.framework.Test;
13 + import junit.framework.TestSuite;
14 +
15   public class DoubleAdderTest extends JSR166TestCase {
16      public static void main(String[] args) {
17          junit.textui.TestRunner.run(suite());
# Line 63 | Line 67 | public class DoubleAdderTest extends JSR
67      public void testSerialization() throws Exception {
68          DoubleAdder x = new DoubleAdder();
69          DoubleAdder y = serialClone(x);
70 <        assertTrue(x != y);
70 >        assertNotSame(x, y);
71          x.add(-22.0);
72          DoubleAdder z = serialClone(x);
73          assertEquals(-22.0, x.sum());
# Line 124 | Line 128 | public class DoubleAdderTest extends JSR
128      /**
129       * adds by multiple threads produce correct sum
130       */
131 <    public void testAddAndSumMT() {
131 >    public void testAddAndSumMT() throws Throwable {
132          final int incs = 1000000;
133          final int nthreads = 4;
134          final ExecutorService pool = Executors.newCachedThreadPool();
135          DoubleAdder a = new DoubleAdder();
136 <        Phaser phaser = new Phaser(nthreads + 1);
136 >        CyclicBarrier barrier = new CyclicBarrier(nthreads + 1);
137          for (int i = 0; i < nthreads; ++i)
138 <            pool.execute(new AdderTask(a, phaser, incs));
139 <        phaser.arriveAndAwaitAdvance();
140 <        phaser.arriveAndAwaitAdvance();
138 >            pool.execute(new AdderTask(a, barrier, incs));
139 >        barrier.await();
140 >        barrier.await();
141          double total = (long)nthreads * incs;
142          double sum = a.sum();
143          assertEquals(sum, total);
144          pool.shutdown();
145      }
146  
147 <   static final class AdderTask implements Runnable {
147 >    static final class AdderTask implements Runnable {
148          final DoubleAdder adder;
149 <        final Phaser phaser;
149 >        final CyclicBarrier barrier;
150          final int incs;
151          volatile double result;
152 <        AdderTask(DoubleAdder adder, Phaser phaser, int incs) {
153 <            this.adder = adder;
154 <            this.phaser = phaser;
152 >        AdderTask(DoubleAdder adder, CyclicBarrier barrier, int incs) {
153 >            this.adder = adder;
154 >            this.barrier = barrier;
155              this.incs = incs;
156          }
157  
158          public void run() {
159 <            phaser.arriveAndAwaitAdvance();
160 <            DoubleAdder a = adder;
161 <            for (int i = 0; i < incs; ++i)
162 <                a.add(1.0);
163 <            result = a.sum();
164 <            phaser.arrive();
159 >            try {
160 >                barrier.await();
161 >                DoubleAdder a = adder;
162 >                for (int i = 0; i < incs; ++i)
163 >                    a.add(1.0);
164 >                result = a.sum();
165 >                barrier.await();
166 >            } catch (Throwable t) { throw new Error(t); }
167          }
168      }
169  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines