JDK 9 RFR of 8026236: Add PrimeTest for BigInteger [TEST-ONLY]
Florian Weimer
fweimer at redhat.com
Tue May 6 08:59:04 UTC 2014
On 05/05/2014 11:17 PM, Brian Burkhalter wrote:
> Joe / Paul,
>
> Thanks for the comments. This an aggregate response to your two
> messages. An updated version of the patch is here:
>
> http://cr.openjdk.java.net/~bpb/8026236/webrev.03/
The command line parsing is off by one, I think, it should check for >=
instead of >:
54 // Prepare arguments
55 int upperBound = args.length > 1 ?
Integer.valueOf(args[0]) : DEFAULT_UPPER_BOUND;
56 int certainty = args.length > 2 ? Integer.valueOf(args[1])
: DEFAULT_CERTAINTY;
57 boolean parallel = args.length > 3 ?
Boolean.valueOf(args[2]) : true;
I think this line should go, it doesn't match the shifted indexing:
98 //bs.set(0, 2, true);
There are some very long lines:
120 NavigableSet<BigInteger> primes = bs.stream().mapToObj(p
-> BigInteger.valueOf(p + 2)).collect(toCollection(TreeSet::new));
180 List<BigInteger> bigInts = (new
SplittableRandom()).ints(NUM_NON_PRIMES, 2,
maxPrime).mapToObj(BigInteger::valueOf).filter(b ->
!b.isProbablePrime(certainty)).collect(toList());
The arithmetic in checkPrime() is unnecessary because isProbablePrime()
will never report a prime as a non-prime (the Monte-Carlo vs Las Vegas
thing), so the count will always be exact because you feed it only
primes. It is impossible to check for the expected number of failures
(non-primes reported as primes) in checkNonPrimes() because this would
result in a test that fails sporadically.
--
Florian Weimer / Red Hat Product Security Team
More information about the core-libs-dev
mailing list