BigIntegerTest.java revision 809
2362N/A * Copyright 1998-2003 Sun Microsystems, Inc. All Rights Reserved. 0N/A * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 0N/A * This code is free software; you can redistribute it and/or modify it 0N/A * under the terms of the GNU General Public License version 2 only, as 0N/A * published by the Free Software Foundation. 0N/A * This code is distributed in the hope that it will be useful, but WITHOUT 0N/A * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 0N/A * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 0N/A * version 2 for more details (a copy is included in the LICENSE file that 0N/A * accompanied this code). 0N/A * You should have received a copy of the GNU General Public License version 0N/A * 2 along with this work; if not, write to the Free Software Foundation, 0N/A * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 2362N/A * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 2362N/A * CA 95054 USA or visit www.sun.com if you need additional information or 0N/A * @bug 4181191 4161971 4227146 4194389 4823171 4624738 4812225 0N/A * @summary tests methods in BigInteger 0N/A * This is a simple test class created to ensure that the results 0N/A * generated by BigInteger adhere to certain identities. Passing 0N/A * this test is a strong assurance that the BigInteger operations 0N/A * are working correctly. 0N/A * Three arguments may be specified which give the number of 0N/A * decimal digits you desire in the three batches of test numbers. 0N/A * The tests are performed on arrays of random numbers which are 0N/A * generated by a Random class as well as special cases which 0N/A * throw in boundary numbers such as 0, 1, maximum sized, etc. 0N/A static int size =
1000;
// numbers per batch 0N/A // Some variables for sizing test numbers in bits for (
int i=
0; i<
100; i++) {
for (
int i=
0; i<
size*
10; i++) {
int bit = (x <
0 ?
0 :
1);
for (
int j=
0; j<
32; j++) {
//System.err.println(x+": "+bitCount+", "+bigX.bitCount()); for (
int i=
0; i<
size*
10; i++) {
int signBit = (x <
0 ?
0x80000000 :
0);
for (j=
0; j<
32 && (
tmp &
0x80000000)==
signBit; j++)
//System.err.println(x+": "+bitLength+", "+bigX.bitLength()); for (
int i=
0; i<
size*
5; i++) {
/* Test setBit and clearBit (and testBit) */ /* Test flipBit (and testBit) */ for (
int i=
0; i<
size*
5; i++) {
/* Test getLowestSetBit() */ /* Test identity x^y == x|y &~ x&y */ for (
int i=
0; i<
size; i++) {
/* Test identity x &~ y == ~(~x | y) */ for (
int i=
0; i<
size; i++) {
public static void shift() {
for (
int i=
0; i<
100; i++) {
for (
int i=
0; i<
size; i++) {
for (
int i=
0; i<
100; i++) {
for (
int i=
0; i<
size; i++) {
for (
int i=
0; i<
size; i++) {
for (
int i=
0; i<
size/
10; i++) {
// This test is based on Fermat's theorem // which is not ideal because base must not be multiple of modulus // and modulus must be a prime or pseudoprime (Carmichael number) for (
int i=
0; i<
10; i++) {
521,
607,
1279,
2203,
2281,
3217,
4253,
4423,
9689,
9941,
11213,
19937,
21701,
23209,
44497,
86243,
110503,
132049,
216091,
756839,
859433,
1257787,
1398269,
2976221,
3021377,
6972593,
13466917 };
561,
1105,
1729,
2465,
2821,
6601,
8911,
10585,
15841,
29341,
41041,
46657,
52633,
62745,
63973,
75361,
101101,
115921,
126217,
162401,
172081,
188461,
252601,
278545,
294409,
314821,
334153,
340561,
399001,
410041,
449065,
488881,
512461,
// Note: testing the larger ones takes too long. // Note: this constant used for computed Carmichaels, not the array above "120000000000000000000000000000000019",
"633825300114114700748351603131",
"1461501637330902918203684832716283019651637554291",
"779626057591079617852292862756047675913380626199",
"857591696176672809403750477631580323575362410491",
"910409242326391377348778281801166102059139832131",
"929857869954035706722619989283358182285540127919",
"961301750640481375785983980066592002055764391999",
"1267617700951005189537696547196156120148404630231",
"1326015641149969955786344600146607663033642528339" };
public static void prime() {
for(
int i=
0; i<
10; i++) {
// Test some known Mersenne primes (2^n)-1 // The array holds the exponents, not the numbers being tested // Test some primes reported by customers as failing in the past // Test some known Carmichael numbers. // Test some computed Carmichael numbers. // Numbers of the form (6k+1)(12k+1)(18k+1) are Carmichael numbers if // each of the factors is prime // Test some composites that are products of 2 primes for (
int i=
0; i<
50; i++) {
for (
int i=
0; i<
4; i++) {
2,
3,
5,
7,
11,
13,
17,
19,
23,
29,
31,
37,
41,
43,
47,
53,
59,
61,
67,
71,
73,
79,
83,
89,
97 1999999003L,
1999999013L,
1999999049L,
1999999061L,
1999999081L,
1999999087L,
1999999093L,
1999999097L,
1999999117L,
1999999121L,
1999999151L,
1999999171L,
1999999207L,
1999999219L,
1999999271L,
1999999321L,
1999999373L,
1999999423L,
1999999439L,
1999999499L,
1999999553L,
1999999559L,
1999999571L,
1999999609L,
1999999613L,
1999999621L,
1999999643L,
1999999649L,
1999999657L,
1999999747L,
1999999763L,
1999999777L,
1999999811L,
1999999817L,
1999999829L,
1999999853L,
1999999861L,
1999999871L,
1999999873 // First test nextProbablePrime on the low range starting at zero // Test nextProbablePrime on a relatively small, known prime sequence // Next, pick some large primes, use nextProbablePrime to find the // next one, and make sure there are no primes in between for (
int i=
0; i<
100; i+=
10) {
"ffffffff00000000ffffffff00000000ffffffff00000000",
"ffffffffffffffffffffffff000000000000000000000000",
"ffffffff0000000000000000000000000000000000000000",
"10000000ffffffffffffffffffffffffffffffffffffffff",
"100000000000000000000000000000000000000000000000",
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"-ffffffff00000000ffffffff00000000ffffffff00000000",
"-ffffffffffffffffffffffff000000000000000000000000",
"-ffffffff0000000000000000000000000000000000000000",
"-10000000ffffffffffffffffffffffffffffffffffffffff",
"-100000000000000000000000000000000000000000000000",
"-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" for(
int i=
0; i<
10; i++) {
* Main to interpret arguments and run several tests. * Up to three arguments may be given to specify the size of BigIntegers * used for call parameters 1, 2, and 3. The size is interpreted as * the maximum number of decimal digits that the parameters will have. * Get a random or boundary-case number. This is designed to provide * a lot of numbers that will find failure points, such as max sized * numbers, empty BigIntegers, etc. * If order is less than 2, order is changed to 2. case 2:
// All bits set in number case 3:
// One bit in number case 4:
// Random bit density