Modified test to be Java5 compatible.
Corrected a bug in the (dummy) rule computation.


git-svn-id: https://svn.apache.org/repos/asf/commons/proper/math/trunk@1364137 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Gilles Sadowski 2012-07-21 18:14:26 +00:00
parent 8287659b3d
commit d8f4cbb539
1 changed files with 17 additions and 6 deletions

View File

@ -23,6 +23,7 @@ import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.concurrent.Callable; import java.util.concurrent.Callable;
import java.util.concurrent.Future; import java.util.concurrent.Future;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import org.apache.commons.math3.util.Pair; import org.apache.commons.math3.util.Pair;
import org.junit.Test; import org.junit.Test;
@ -39,7 +40,8 @@ public class BaseRuleFactoryTest {
* whatever the number of times this rule is called concurrently. * whatever the number of times this rule is called concurrently.
*/ */
@Test @Test
public void testConcurrentCreation() throws InterruptedException { public void testConcurrentCreation() throws InterruptedException,
ExecutionException {
// Number of times the same rule will be called. // Number of times the same rule will be called.
final int numTasks = 20; final int numTasks = 20;
@ -47,12 +49,16 @@ public class BaseRuleFactoryTest {
= new ThreadPoolExecutor(3, numTasks, 1, TimeUnit.SECONDS, = new ThreadPoolExecutor(3, numTasks, 1, TimeUnit.SECONDS,
new ArrayBlockingQueue<Runnable>(2)); new ArrayBlockingQueue<Runnable>(2));
final List<RuleBuilder> tasks = new ArrayList<RuleBuilder>(); final List<Future<Pair<double[], double[]>>> results
= new ArrayList<Future<Pair<double[], double[]>>>();
for (int i = 0; i < numTasks; i++) { for (int i = 0; i < numTasks; i++) {
tasks.add(new RuleBuilder()); results.add(exec.submit(new RuleBuilder()));
} }
List<Future<Pair<double[], double[]>>> results = exec.invokeAll(tasks); // Ensure that all computations have completed.
for (Future<Pair<double[], double[]>> f : results) {
f.get();
}
// Assertion would fail if "getRuleInternal" were not "synchronized". // Assertion would fail if "getRuleInternal" were not "synchronized".
final int n = RuleBuilder.getNumberOfCalls(); final int n = RuleBuilder.getNumberOfCalls();
@ -90,8 +96,13 @@ class DummyRuleFactory extends BaseRuleFactory<Double> {
} }
// Dummy rule (but contents must exist). // Dummy rule (but contents must exist).
return new Pair<Double[], Double[]>(new Double[order], final Double[] p = new Double[order];
new Double[order]); final Double[] w = new Double[order];
for (int i = 0; i < order; i++) {
p[i] = new Double(i);
w[i] = new Double(i);
}
return new Pair<Double[], Double[]>(p, w);
} }
public int getNumberOfCalls() { public int getNumberOfCalls() {