class Test { public static void main(String[] args) { Tester t = new Tester(); String desc; { desc = "Sequential and Parallel solvers produce the same primes"; int maxNum = 200000; Sieve sieve1 = new Sieve(maxNum); Sieve sieve2 = new Sieve(maxNum); Sequential s1 = new Sequential(); Parallel s2 = new Parallel(); s1.solve(sieve1); s2.solve(sieve2); boolean failed = false; for (int i = 0; i < sieve1.arr.length; ++i) { if (sieve1.isPrime(i) != sieve2.isPrime(i)) { failed = true; System.out.println( "Sequential and parallel disagree on "+i+"!"); System.out.println( "Seq: "+sieve1.isPrime(i)+", par: "+sieve2.isPrime(i)); break; } } if (failed) t.fail(desc); else t.pass(desc); s2.stopThreads(); } { desc = "Sequential and parallel produces the same factors"; int maxNum = 10000000; Sieve sieve = new Sieve(maxNum); Sequential s1 = new Sequential(); Parallel s2 = new Parallel(); s2.solve(sieve); boolean failed = false; long num = maxNum * maxNum; for (long i = num - 100; i < num; ++i) { long[] arr1 = s1.factor(sieve, i); long[] arr2 = s2.factor(sieve, i); if (arr1.length != arr2.length) { System.out.println( "Sequential and parallel disagree on length!"); System.out.println("seq: "+Util.factors(i, arr1)); System.out.println("par: "+Util.factors(i, arr2)); failed = true; break; } for (int j = 0; j < arr1.length; ++j) { if (arr1[j] != arr2[j]) { failed = true; break; } } if (failed) { System.out.println("seq: "+Util.factors(i, arr1)); System.out.println("par: "+Util.factors(i, arr2)); break; } } if (failed) t.fail(desc); else t.pass(desc); s2.stopThreads(); } t.printResult(); } }