BigIntegerTest.java revision 81ccea015ba3d2a2da1c641b14dd3713c6b40a76
181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes/* 281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Licensed to the Apache Software Foundation (ASF) under one or more 381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * contributor license agreements. See the NOTICE file distributed with 481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * this work for additional information regarding copyright ownership. 581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0 681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * (the "License"); you may not use this file except in compliance with 781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * the License. You may obtain a copy of the License at 881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * 981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * http://www.apache.org/licenses/LICENSE-2.0 1081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * 1181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Unless required by applicable law or agreed to in writing, software 1281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * distributed under the License is distributed on an "AS IS" BASIS, 1381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * See the License for the specific language governing permissions and 1581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * limitations under the License. 1681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 1781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 1881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughespackage tests.api.java.math; 1981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 2081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughesimport java.math.BigInteger; 2181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughesimport java.util.Random; 2281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 2381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughespublic class BigIntegerTest extends junit.framework.TestCase { 2481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 2581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger minusTwo = new BigInteger("-2", 10); 2681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 2781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger minusOne = new BigInteger("-1", 10); 2881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 2981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger zero = new BigInteger("0", 10); 3081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 3181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger one = new BigInteger("1", 10); 3281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 3381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger two = new BigInteger("2", 10); 3481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 3581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger ten = new BigInteger("10", 10); 3681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 3781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger sixteen = new BigInteger("16", 10); 3881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 3981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger oneThousand = new BigInteger("1000", 10); 4081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 4181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger aZillion = new BigInteger( 4281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes "100000000000000000000000000000000000000000000000000", 10); 4381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 4481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger twoToTheTen = new BigInteger("1024", 10); 4581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 4681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger twoToTheSeventy = two.pow(70); 4781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 4881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes Random rand = new Random(); 4981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 5081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger bi; 5181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 5281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger bi1; 5381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 5481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger bi2; 5581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 5681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger bi3; 5781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 5881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger bi11; 5981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 6081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger bi22; 6181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 6281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger bi33; 6381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 6481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger bi12; 6581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 6681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger bi23; 6781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 6881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger bi13; 6981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 7081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger largePos; 7181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 7281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger smallPos; 7381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 7481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger largeNeg; 7581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 7681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger smallNeg; 7781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 7881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger[][] booleanPairs; 7981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 8081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 8181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * @tests java.math.BigInteger#BigInteger(int, java.util.Random) 8281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 8381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void test_ConstructorILjava_util_Random() { 8481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes // regression test for HARMONY-1047 8581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes try { 8681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes new BigInteger(Integer.MAX_VALUE, (Random)null); 8781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes fail("NegativeArraySizeException expected"); 8881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } catch (NegativeArraySizeException e) { 8981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes // PASSED 9081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 9181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 9281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes bi = new BigInteger(70, rand); 9381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes bi2 = new BigInteger(70, rand); 9481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("Random number is negative", bi.compareTo(zero) >= 0); 9581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("Random number is too big", 9681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes bi.compareTo(twoToTheSeventy) < 0); 9781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue( 9881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes "Two random numbers in a row are the same (might not be a bug but it very likely is)", 9981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes !bi.equals(bi2)); 10081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("Not zero", new BigInteger(0, rand).equals(BigInteger.ZERO)); 10181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 10281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 10381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 10481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * @tests java.math.BigInteger#BigInteger(int, int, java.util.Random) 10581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 10681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void test_ConstructorIILjava_util_Random() { 10781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes bi = new BigInteger(10, 5, rand); 10881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes bi2 = new BigInteger(10, 5, rand); 10981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("Random number one is negative", bi.compareTo(zero) >= 0); 11081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("Random number one is too big", 11181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes bi.compareTo(twoToTheTen) < 0); 11281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("Random number two is negative", bi2.compareTo(zero) >= 0); 11381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("Random number two is too big", 11481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes bi2.compareTo(twoToTheTen) < 0); 11581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 11681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes Random rand = new Random(); 11781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger bi; 11881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes int certainty[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes Integer.MIN_VALUE, Integer.MIN_VALUE + 1, -2, -1 }; 12081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes for (int i = 2; i <= 20; i++) { 12181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes for (int c = 0; c < certainty.length; c++) { 12281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes bi = new BigInteger(i, c, rand); // Create BigInteger 12381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("Bit length incorrect", bi.bitLength() == i); 12481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 12581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 12681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 12781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 12881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 12981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * @tests java.math.BigInteger#BigInteger(byte[]) 13081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 13181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void test_Constructor$B() { 13281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes byte[] myByteArray; 13381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes myByteArray = new byte[] { (byte) 0x00, (byte) 0xFF, (byte) 0xFE }; 13481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes bi = new BigInteger(myByteArray); 13581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("Incorrect value for pos number", bi.equals(BigInteger.ZERO 13681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes .setBit(16).subtract(two))); 13781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes myByteArray = new byte[] { (byte) 0xFF, (byte) 0xFE }; 13881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes bi = new BigInteger(myByteArray); 13981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("Incorrect value for neg number", bi.equals(minusTwo)); 14081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 14181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 14281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 14381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * @tests java.math.BigInteger#BigInteger(int, byte[]) 14481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 14581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void test_ConstructorI$B() { 14681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes byte[] myByteArray; 14781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes myByteArray = new byte[] { (byte) 0xFF, (byte) 0xFE }; 14881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes bi = new BigInteger(1, myByteArray); 14981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("Incorrect value for pos number", bi.equals(BigInteger.ZERO 15081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes .setBit(16).subtract(two))); 15181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes bi = new BigInteger(-1, myByteArray); 15281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("Incorrect value for neg number", bi.equals(BigInteger.ZERO 15381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes .setBit(16).subtract(two).negate())); 15481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes myByteArray = new byte[] { (byte) 0, (byte) 0 }; 15581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes bi = new BigInteger(0, myByteArray); 15681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("Incorrect value for zero", bi.equals(zero)); 15781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes myByteArray = new byte[] { (byte) 1 }; 15881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes try { 15981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes new BigInteger(0, myByteArray); 16081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes fail("Failed to throw NumberFormatException"); 16181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } catch (NumberFormatException e) { 16281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes // correct 16381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 16481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 16581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 16681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 16781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * @tests java.math.BigInteger#BigInteger(java.lang.String) 16881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 16981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void test_constructor_String_empty() { 17081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes try { 17181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes new BigInteger(""); 17281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes fail("Expected NumberFormatException for new BigInteger(\"\")"); 17381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } catch (NumberFormatException e) { 17481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 17581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 17681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 17781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 17881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * @tests java.math.BigInteger#toByteArray() 17981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 18081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void test_toByteArray() { 18181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes byte[] myByteArray, anotherByteArray; 18281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes myByteArray = new byte[] { 97, 33, 120, 124, 50, 2, 0, 0, 0, 12, 124, 18381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 42 }; 18481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes anotherByteArray = new BigInteger(myByteArray).toByteArray(); 18581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("Incorrect byte array returned", 18681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes myByteArray.length == anotherByteArray.length); 18781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes for (int counter = myByteArray.length - 1; counter >= 0; counter--) { 18881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("Incorrect values in returned byte array", 18981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes myByteArray[counter] == anotherByteArray[counter]); 19081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 19181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 19281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 19381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 19481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * @tests java.math.BigInteger#isProbablePrime(int) 19581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 19681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void test_isProbablePrimeI() { 19781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes int fails = 0; 19881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes bi = new BigInteger(20, 20, rand); 19981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes if (!bi.isProbablePrime(17)) { 20081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes fails++; 20181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 20281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes bi = new BigInteger("4", 10); 20381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes if (bi.isProbablePrime(17)) { 20481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes fail("isProbablePrime failed for: " + bi); 20581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 20681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes bi = BigInteger.valueOf(17L * 13L); 20781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes if (bi.isProbablePrime(17)) { 20881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes fail("isProbablePrime failed for: " + bi); 20981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 21081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes for (long a = 2; a < 1000; a++) { 21181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes if (isPrime(a)) { 21281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("false negative on prime number <1000", BigInteger 21381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes .valueOf(a).isProbablePrime(5)); 21481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } else if (BigInteger.valueOf(a).isProbablePrime(17)) { 21581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes System.out.println("isProbablePrime failed for: " + a); 21681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes fails++; 21781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 21881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 21981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes for (int a = 0; a < 1000; a++) { 22081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes bi = BigInteger.valueOf(rand.nextInt(1000000)).multiply( 22181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger.valueOf(rand.nextInt(1000000))); 22281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes if (bi.isProbablePrime(17)) { 22381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes System.out.println("isProbablePrime failed for: " + bi); 22481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes fails++; 22581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 22681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 22781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes for (int a = 0; a < 200; a++) { 22881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes bi = new BigInteger(70, rand).multiply(new BigInteger(70, rand)); 22981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes if (bi.isProbablePrime(17)) { 23081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes System.out.println("isProbablePrime failed for: " + bi); 23181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes fails++; 23281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 23381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 23481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("Too many false positives - may indicate a problem", 23581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes fails <= 1); 23681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 23781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 23881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 23981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * @tests java.math.BigInteger#equals(java.lang.Object) 24081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 24181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void test_equalsLjava_lang_Object() { 24281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("0=0", zero.equals(BigInteger.valueOf(0))); 24381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("-123=-123", BigInteger.valueOf(-123).equals( 24481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger.valueOf(-123))); 24581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("0=1", !zero.equals(one)); 24681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("0=-1", !zero.equals(minusOne)); 24781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("1=-1", !one.equals(minusOne)); 24881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("bi3=bi3", bi3.equals(bi3)); 24981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("bi3=copy of bi3", bi3.equals(bi3.negate().negate())); 25081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("bi3=bi2", !bi3.equals(bi2)); 25181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 25281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 25381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 25481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * @tests java.math.BigInteger#compareTo(java.math.BigInteger) 25581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 25681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void test_compareToLjava_math_BigInteger() { 25781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("Smaller number returned >= 0", one.compareTo(two) < 0); 25881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("Larger number returned >= 0", two.compareTo(one) > 0); 25981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("Equal numbers did not return 0", one.compareTo(one) == 0); 26081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("Neg number messed things up", 26181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes two.negate().compareTo(one) < 0); 26281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 26381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 26481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 26581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * @tests java.math.BigInteger#intValue() 26681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 26781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void test_intValue() { 26881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("Incorrect intValue for 2**70", 26981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes twoToTheSeventy.intValue() == 0); 27081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("Incorrect intValue for 2", two.intValue() == 2); 27181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 27281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 27381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 27481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * @tests java.math.BigInteger#longValue() 27581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 27681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void test_longValue() { 27781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("Incorrect longValue for 2**70", 27881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes twoToTheSeventy.longValue() == 0); 27981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("Incorrect longValue for 2", two.longValue() == 2); 28081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 28181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 28281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 28381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * @tests java.math.BigInteger#valueOf(long) 28481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 28581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void test_valueOfJ() { 28681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("Incurred number returned for 2", BigInteger.valueOf(2L) 28781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes .equals(two)); 28881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("Incurred number returned for 200", BigInteger.valueOf(200L) 28981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes .equals(BigInteger.valueOf(139).add(BigInteger.valueOf(61)))); 29081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 29181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 29281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 29381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * @tests java.math.BigInteger#add(java.math.BigInteger) 29481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 29581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void test_addLjava_math_BigInteger() { 29681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("Incorrect sum--wanted a zillion", aZillion.add(aZillion) 29781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes .add(aZillion.negate()).equals(aZillion)); 29881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("0+0", zero.add(zero).equals(zero)); 29981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("0+1", zero.add(one).equals(one)); 30081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("1+0", one.add(zero).equals(one)); 30181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("1+1", one.add(one).equals(two)); 30281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("0+(-1)", zero.add(minusOne).equals(minusOne)); 30381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("(-1)+0", minusOne.add(zero).equals(minusOne)); 30481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("(-1)+(-1)", minusOne.add(minusOne).equals(minusTwo)); 30581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("1+(-1)", one.add(minusOne).equals(zero)); 30681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("(-1)+1", minusOne.add(one).equals(zero)); 30781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 30881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes for (int i = 0; i < 200; i++) { 30981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger midbit = zero.setBit(i); 31081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("add fails to carry on bit " + i, midbit.add(midbit) 31181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes .equals(zero.setBit(i + 1))); 31281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 31381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger bi2p3 = bi2.add(bi3); 31481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger bi3p2 = bi3.add(bi2); 31581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("bi2p3=bi3p2", bi2p3.equals(bi3p2)); 31681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 31781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes // add large positive + small positive 31881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 31981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes // add large positive + small negative 32081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 32181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes // add large negative + small positive 32281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 32381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes // add large negative + small negative 32481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 32581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 32681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 32781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * @tests java.math.BigInteger#negate() 32881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 32981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void test_negate() { 33081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("Single negation of zero did not result in zero", zero 33181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes .negate().equals(zero)); 33281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("Single negation resulted in original nonzero number", 33381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes !aZillion.negate().equals(aZillion)); 33481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("Double negation did not result in original number", 33581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes aZillion.negate().negate().equals(aZillion)); 33681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 33781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("0.neg", zero.negate().equals(zero)); 33881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("1.neg", one.negate().equals(minusOne)); 33981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("2.neg", two.negate().equals(minusTwo)); 34081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("-1.neg", minusOne.negate().equals(one)); 34181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("-2.neg", minusTwo.negate().equals(two)); 34281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("0x62EB40FEF85AA9EBL*2.neg", BigInteger.valueOf( 34381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 0x62EB40FEF85AA9EBL * 2).negate().equals( 34481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger.valueOf(-0x62EB40FEF85AA9EBL * 2))); 34581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes for (int i = 0; i < 200; i++) { 34681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger midbit = zero.setBit(i); 34781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger negate = midbit.negate(); 34881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("negate negate", negate.negate().equals(midbit)); 34981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("neg fails on bit " + i, midbit.negate().add(midbit) 35081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes .equals(zero)); 35181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 35281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 35381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 35481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 35581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * @tests java.math.BigInteger#signum() 35681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 35781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void test_signum() { 35881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("Wrong positive signum", two.signum() == 1); 35981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("Wrong zero signum", zero.signum() == 0); 36081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("Wrong neg zero signum", zero.negate().signum() == 0); 36181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("Wrong neg signum", two.negate().signum() == -1); 36281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 36381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 36481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 36581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * @tests java.math.BigInteger#abs() 36681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 36781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void test_abs() { 36881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("Invalid number returned for zillion", aZillion.negate() 36981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes .abs().equals(aZillion.abs())); 37081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("Invalid number returned for zero neg", zero.negate().abs() 37181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes .equals(zero)); 37281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("Invalid number returned for zero", zero.abs().equals(zero)); 37381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("Invalid number returned for two", two.negate().abs() 37481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes .equals(two)); 37581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 37681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 37781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 37881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * @tests java.math.BigInteger#pow(int) 37981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 38081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void test_powI() { 38181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("Incorrect exponent returned for 2**10", two.pow(10).equals( 38281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes twoToTheTen)); 38381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("Incorrect exponent returned for 2**70", two.pow(30) 38481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes .multiply(two.pow(40)).equals(twoToTheSeventy)); 38581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("Incorrect exponent returned for 10**50", ten.pow(50) 38681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes .equals(aZillion)); 38781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 38881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 38981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 39081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * @tests java.math.BigInteger#modInverse(java.math.BigInteger) 39181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 39281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void test_modInverseLjava_math_BigInteger() { 39381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger a = zero, mod, inv; 39481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes for (int j = 3; j < 50; j++) { 39581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes mod = BigInteger.valueOf(j); 39681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes for (int i = -j + 1; i < j; i++) { 39781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes try { 39881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes a = BigInteger.valueOf(i); 39981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes inv = a.modInverse(mod); 40081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("bad inverse: " + a + " inv mod " + mod 40181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes + " equals " + inv, one.equals(a.multiply(inv).mod( 40281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes mod))); 40381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("inverse greater than modulo: " + a 40481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes + " inv mod " + mod + " equals " + inv, inv 40581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes .compareTo(mod) < 0); 40681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("inverse less than zero: " + a + " inv mod " 40781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes + mod + " equals " + inv, inv 40881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes .compareTo(BigInteger.ZERO) >= 0); 40981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } catch (ArithmeticException e) { 41081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("should have found inverse for " + a + " mod " 41181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes + mod, !one.equals(a.gcd(mod))); 41281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 41381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 41481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 41581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes for (int j = 1; j < 10; j++) { 41681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes mod = bi2.add(BigInteger.valueOf(j)); 41781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes for (int i = 0; i < 20; i++) { 41881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes try { 41981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes a = bi3.add(BigInteger.valueOf(i)); 42081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes inv = a.modInverse(mod); 42181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("bad inverse: " + a + " inv mod " + mod 42281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes + " equals " + inv, one.equals(a.multiply(inv).mod( 42381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes mod))); 42481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("inverse greater than modulo: " + a 42581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes + " inv mod " + mod + " equals " + inv, inv 42681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes .compareTo(mod) < 0); 42781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("inverse less than zero: " + a + " inv mod " 42881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes + mod + " equals " + inv, inv 42981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes .compareTo(BigInteger.ZERO) >= 0); 43081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } catch (ArithmeticException e) { 43181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("should have found inverse for " + a + " mod " 43281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes + mod, !one.equals(a.gcd(mod))); 43381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 43481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 43581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 43681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 43781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 43881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 43981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * @tests java.math.BigInteger#shiftRight(int) 44081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 44181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void test_shiftRightI() { 44281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("1 >> 0", BigInteger.valueOf(1).shiftRight(0).equals( 44381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger.ONE)); 44481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("1 >> 1", BigInteger.valueOf(1).shiftRight(1).equals( 44581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger.ZERO)); 44681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("1 >> 63", BigInteger.valueOf(1).shiftRight(63).equals( 44781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger.ZERO)); 44881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("1 >> 64", BigInteger.valueOf(1).shiftRight(64).equals( 44981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger.ZERO)); 45081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("1 >> 65", BigInteger.valueOf(1).shiftRight(65).equals( 45181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger.ZERO)); 45281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("1 >> 1000", BigInteger.valueOf(1).shiftRight(1000).equals( 45381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger.ZERO)); 45481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("-1 >> 0", BigInteger.valueOf(-1).shiftRight(0).equals( 45581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes minusOne)); 45681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("-1 >> 1", BigInteger.valueOf(-1).shiftRight(1).equals( 45781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes minusOne)); 45881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("-1 >> 63", BigInteger.valueOf(-1).shiftRight(63).equals( 45981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes minusOne)); 46081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("-1 >> 64", BigInteger.valueOf(-1).shiftRight(64).equals( 46181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes minusOne)); 46281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("-1 >> 65", BigInteger.valueOf(-1).shiftRight(65).equals( 46381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes minusOne)); 46481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("-1 >> 1000", BigInteger.valueOf(-1).shiftRight(1000) 46581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes .equals(minusOne)); 46681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 46781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger a = BigInteger.ONE; 46881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger c = bi3; 46981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger E = bi3.negate(); 47081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger e = E; 47181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes for (int i = 0; i < 200; i++) { 47281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger b = BigInteger.ZERO.setBit(i); 47381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("a==b", a.equals(b)); 47481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes a = a.shiftLeft(1); 47581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("a non-neg", a.signum() >= 0); 47681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 47781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger d = bi3.shiftRight(i); 47881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("c==d", c.equals(d)); 47981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes c = c.shiftRight(1); 48081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue(">>1 == /2", d.divide(two).equals(c)); 48181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("c non-neg", c.signum() >= 0); 48281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 48381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger f = E.shiftRight(i); 48481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("e==f", e.equals(f)); 48581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes e = e.shiftRight(1); 48681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue(">>1 == /2", f.subtract(one).divide(two).equals(e)); 48781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("e negative", e.signum() == -1); 48881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 48981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("b >> i", b.shiftRight(i).equals(one)); 49081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("b >> i+1", b.shiftRight(i + 1).equals(zero)); 49181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("b >> i-1", b.shiftRight(i - 1).equals(two)); 49281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 49381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 49481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 49581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 49681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * @tests java.math.BigInteger#shiftLeft(int) 49781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 49881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void test_shiftLeftI() { 49981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("1 << 0", one.shiftLeft(0).equals(one)); 50081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("1 << 1", one.shiftLeft(1).equals(two)); 50181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("1 << 63", one.shiftLeft(63).equals( 50281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes new BigInteger("8000000000000000", 16))); 50381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("1 << 64", one.shiftLeft(64).equals( 50481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes new BigInteger("10000000000000000", 16))); 50581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("1 << 65", one.shiftLeft(65).equals( 50681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes new BigInteger("20000000000000000", 16))); 50781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("-1 << 0", minusOne.shiftLeft(0).equals(minusOne)); 50881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("-1 << 1", minusOne.shiftLeft(1).equals(minusTwo)); 50981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("-1 << 63", minusOne.shiftLeft(63).equals( 51081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes new BigInteger("-9223372036854775808"))); 51181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("-1 << 64", minusOne.shiftLeft(64).equals( 51281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes new BigInteger("-18446744073709551616"))); 51381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("-1 << 65", minusOne.shiftLeft(65).equals( 51481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes new BigInteger("-36893488147419103232"))); 51581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 51681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger a = bi3; 51781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger c = minusOne; 51881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes for (int i = 0; i < 200; i++) { 51981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger b = bi3.shiftLeft(i); 52081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("a==b", a.equals(b)); 52181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("a >> i == bi3", a.shiftRight(i).equals(bi3)); 52281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes a = a.shiftLeft(1); 52381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("<<1 == *2", b.multiply(two).equals(a)); 52481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("a non-neg", a.signum() >= 0); 52581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("a.bitCount==b.bitCount", a.bitCount() == b.bitCount()); 52681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 52781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger d = minusOne.shiftLeft(i); 52881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("c==d", c.equals(d)); 52981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes c = c.shiftLeft(1); 53081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("<<1 == *2 negative", d.multiply(two).equals(c)); 53181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("c negative", c.signum() == -1); 53281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("d >> i == minusOne", d.shiftRight(i).equals(minusOne)); 53381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 53481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 53581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 53681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 53781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * @tests java.math.BigInteger#multiply(java.math.BigInteger) 53881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 53981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void test_multiplyLjava_math_BigInteger() { 54081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("Incorrect sum--wanted three zillion", aZillion 54181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes .add(aZillion).add(aZillion).equals( 54281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes aZillion.multiply(new BigInteger("3", 10)))); 54381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 54481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("0*0", zero.multiply(zero).equals(zero)); 54581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("0*1", zero.multiply(one).equals(zero)); 54681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("1*0", one.multiply(zero).equals(zero)); 54781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("1*1", one.multiply(one).equals(one)); 54881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("0*(-1)", zero.multiply(minusOne).equals(zero)); 54981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("(-1)*0", minusOne.multiply(zero).equals(zero)); 55081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("(-1)*(-1)", minusOne.multiply(minusOne).equals(one)); 55181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("1*(-1)", one.multiply(minusOne).equals(minusOne)); 55281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("(-1)*1", minusOne.multiply(one).equals(minusOne)); 55381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 55481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes testAllMults(bi1, bi1, bi11); 55581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes testAllMults(bi2, bi2, bi22); 55681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes testAllMults(bi3, bi3, bi33); 55781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes testAllMults(bi1, bi2, bi12); 55881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes testAllMults(bi1, bi3, bi13); 55981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes testAllMults(bi2, bi3, bi23); 56081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 56181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 56281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 56381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * @tests java.math.BigInteger#divide(java.math.BigInteger) 56481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 56581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void test_divideLjava_math_BigInteger() { 56681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes testAllDivs(bi33, bi3); 56781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes testAllDivs(bi22, bi2); 56881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes testAllDivs(bi11, bi1); 56981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes testAllDivs(bi13, bi1); 57081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes testAllDivs(bi13, bi3); 57181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes testAllDivs(bi12, bi1); 57281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes testAllDivs(bi12, bi2); 57381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes testAllDivs(bi23, bi2); 57481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes testAllDivs(bi23, bi3); 57581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes testAllDivs(largePos, bi1); 57681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes testAllDivs(largePos, bi2); 57781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes testAllDivs(largePos, bi3); 57881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes testAllDivs(largeNeg, bi1); 57981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes testAllDivs(largeNeg, bi2); 58081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes testAllDivs(largeNeg, bi3); 58181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes testAllDivs(largeNeg, largePos); 58281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes testAllDivs(largePos, largeNeg); 58381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes testAllDivs(bi3, bi3); 58481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes testAllDivs(bi2, bi2); 58581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes testAllDivs(bi1, bi1); 58681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes testDivRanges(bi1); 58781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes testDivRanges(bi2); 58881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes testDivRanges(bi3); 58981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes testDivRanges(smallPos); 59081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes testDivRanges(largePos); 59181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes testDivRanges(new BigInteger("62EB40FEF85AA9EB", 16)); 59281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes testAllDivs(BigInteger.valueOf(0xCC0225953CL), BigInteger 59381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes .valueOf(0x1B937B765L)); 59481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 59581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes try { 59681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes largePos.divide(zero); 59781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes fail("ArithmeticException expected"); 59881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } catch (ArithmeticException e) { 59981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 60081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 60181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes try { 60281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes bi1.divide(zero); 60381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes fail("ArithmeticException expected"); 60481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } catch (ArithmeticException e) { 60581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 60681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 60781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes try { 60881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes bi3.negate().divide(zero); 60981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes fail("ArithmeticException expected"); 61081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } catch (ArithmeticException e) { 61181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 61281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 61381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes try { 61481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes zero.divide(zero); 61581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes fail("ArithmeticException expected"); 61681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } catch (ArithmeticException e) { 61781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 61881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 61981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 62081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 62181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * @tests java.math.BigInteger#remainder(java.math.BigInteger) 62281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 62381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void test_remainderLjava_math_BigInteger() { 62481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes try { 62581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes largePos.remainder(zero); 62681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes fail("ArithmeticException expected"); 62781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } catch (ArithmeticException e) { 62881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 62981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 63081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes try { 63181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes bi1.remainder(zero); 63281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes fail("ArithmeticException expected"); 63381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } catch (ArithmeticException e) { 63481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 63581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 63681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes try { 63781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes bi3.negate().remainder(zero); 63881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes fail("ArithmeticException expected"); 63981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } catch (ArithmeticException e) { 64081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 64181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 64281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes try { 64381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes zero.remainder(zero); 64481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes fail("ArithmeticException expected"); 64581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } catch (ArithmeticException e) { 64681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 64781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 64881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 64981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 65081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * @tests java.math.BigInteger#mod(java.math.BigInteger) 65181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 65281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void test_modLjava_math_BigInteger() { 65381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes try { 65481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes largePos.mod(zero); 65581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes fail("ArithmeticException expected"); 65681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } catch (ArithmeticException e) { 65781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 65881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 65981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes try { 66081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes bi1.mod(zero); 66181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes fail("ArithmeticException expected"); 66281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } catch (ArithmeticException e) { 66381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 66481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 66581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes try { 66681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes bi3.negate().mod(zero); 66781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes fail("ArithmeticException expected"); 66881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } catch (ArithmeticException e) { 66981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 67081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 67181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes try { 67281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes zero.mod(zero); 67381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes fail("ArithmeticException expected"); 67481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } catch (ArithmeticException e) { 67581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 67681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 67781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 67881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 67981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * @tests java.math.BigInteger#divideAndRemainder(java.math.BigInteger) 68081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 68181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void test_divideAndRemainderLjava_math_BigInteger() { 68281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes try { 68381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes largePos.divideAndRemainder(zero); 68481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes fail("ArithmeticException expected"); 68581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } catch (ArithmeticException e) { 68681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 68781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 68881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes try { 68981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes bi1.divideAndRemainder(zero); 69081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes fail("ArithmeticException expected"); 69181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } catch (ArithmeticException e) { 69281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 69381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 69481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes try { 69581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes bi3.negate().divideAndRemainder(zero); 69681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes fail("ArithmeticException expected"); 69781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } catch (ArithmeticException e) { 69881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 69981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 70081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes try { 70181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes zero.divideAndRemainder(zero); 70281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes fail("ArithmeticException expected"); 70381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } catch (ArithmeticException e) { 70481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 70581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 70681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 70781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 70881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * @tests java.math.BigInteger#BigInteger(java.lang.String) 70981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 71081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void test_ConstructorLjava_lang_String() { 71181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("new(0)", new BigInteger("0").equals(BigInteger.valueOf(0))); 71281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("new(1)", new BigInteger("1").equals(BigInteger.valueOf(1))); 71381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("new(12345678901234)", new BigInteger("12345678901234") 71481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes .equals(BigInteger.valueOf(12345678901234L))); 71581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("new(-1)", new BigInteger("-1").equals(BigInteger 71681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes .valueOf(-1))); 71781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("new(-12345678901234)", new BigInteger("-12345678901234") 71881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes .equals(BigInteger.valueOf(-12345678901234L))); 71981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 72081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 72181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 72281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * @tests java.math.BigInteger#BigInteger(java.lang.String, int) 72381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 72481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void test_ConstructorLjava_lang_StringI() { 72581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("new(0,16)", new BigInteger("0", 16).equals(BigInteger 72681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes .valueOf(0))); 72781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("new(1,16)", new BigInteger("1", 16).equals(BigInteger 72881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes .valueOf(1))); 72981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("new(ABF345678901234,16)", new BigInteger("ABF345678901234", 73081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 16).equals(BigInteger.valueOf(0xABF345678901234L))); 73181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("new(abf345678901234,16)", new BigInteger("abf345678901234", 73281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 16).equals(BigInteger.valueOf(0xABF345678901234L))); 73381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("new(-1,16)", new BigInteger("-1", 16).equals(BigInteger 73481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes .valueOf(-1))); 73581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("new(-ABF345678901234,16)", new BigInteger( 73681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes "-ABF345678901234", 16).equals(BigInteger 73781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes .valueOf(-0xABF345678901234L))); 73881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("new(-abf345678901234,16)", new BigInteger( 73981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes "-abf345678901234", 16).equals(BigInteger 74081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes .valueOf(-0xABF345678901234L))); 74181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("new(-101010101,2)", new BigInteger("-101010101", 2) 74281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes .equals(BigInteger.valueOf(-341))); 74381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 74481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 74581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 74681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * @tests java.math.BigInteger#toString() 74781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 74881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void test_toString() { 74981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("0.toString", "0".equals(BigInteger.valueOf(0).toString())); 75081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("1.toString", "1".equals(BigInteger.valueOf(1).toString())); 75181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("12345678901234.toString", "12345678901234" 75281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes .equals(BigInteger.valueOf(12345678901234L).toString())); 75381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("-1.toString", "-1" 75481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes .equals(BigInteger.valueOf(-1).toString())); 75581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("-12345678901234.toString", "-12345678901234" 75681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes .equals(BigInteger.valueOf(-12345678901234L).toString())); 75781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 75881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 75981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 76081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * @tests java.math.BigInteger#toString(int) 76181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 76281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void test_toStringI() { 76381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("0.toString(16)", "0".equals(BigInteger.valueOf(0).toString( 76481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 16))); 76581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("1.toString(16)", "1".equals(BigInteger.valueOf(1).toString( 76681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 16))); 76781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("ABF345678901234.toString(16)", "abf345678901234" 76881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes .equals(BigInteger.valueOf(0xABF345678901234L).toString(16))); 76981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("-1.toString(16)", "-1".equals(BigInteger.valueOf(-1) 77081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes .toString(16))); 77181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("-ABF345678901234.toString(16)", "-abf345678901234" 77281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes .equals(BigInteger.valueOf(-0xABF345678901234L).toString(16))); 77381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("-101010101.toString(2)", "-101010101".equals(BigInteger 77481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes .valueOf(-341).toString(2))); 77581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 77681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 77781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 77881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * @tests java.math.BigInteger#and(java.math.BigInteger) 77981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 78081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void test_andLjava_math_BigInteger() { 78181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes for (BigInteger[] element : booleanPairs) { 78281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger i1 = element[0], i2 = element[1]; 78381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger res = i1.and(i2); 78481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("symmetry of and", res.equals(i2.and(i1))); 78581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes int len = Math.max(i1.bitLength(), i2.bitLength()) + 66; 78681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes for (int i = 0; i < len; i++) { 78781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("and", (i1.testBit(i) && i2.testBit(i)) == res 78881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes .testBit(i)); 78981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 79081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 79181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 79281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 79381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 79481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * @tests java.math.BigInteger#or(java.math.BigInteger) 79581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 79681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void test_orLjava_math_BigInteger() { 79781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes for (BigInteger[] element : booleanPairs) { 79881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger i1 = element[0], i2 = element[1]; 79981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger res = i1.or(i2); 80081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("symmetry of or", res.equals(i2.or(i1))); 80181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes int len = Math.max(i1.bitLength(), i2.bitLength()) + 66; 80281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes for (int i = 0; i < len; i++) { 80381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("or", (i1.testBit(i) || i2.testBit(i)) == res 80481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes .testBit(i)); 80581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 80681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 80781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 80881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 80981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 81081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * @tests java.math.BigInteger#xor(java.math.BigInteger) 81181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 81281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void test_xorLjava_math_BigInteger() { 81381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes for (BigInteger[] element : booleanPairs) { 81481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger i1 = element[0], i2 = element[1]; 81581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger res = i1.xor(i2); 81681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("symmetry of xor", res.equals(i2.xor(i1))); 81781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes int len = Math.max(i1.bitLength(), i2.bitLength()) + 66; 81881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes for (int i = 0; i < len; i++) { 81981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("xor", (i1.testBit(i) ^ i2.testBit(i)) == res 82081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes .testBit(i)); 82181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 82281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 82381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 82481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 82581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 82681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * @tests java.math.BigInteger#not() 82781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 82881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void test_not() { 82981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes for (BigInteger[] element : booleanPairs) { 83081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger i1 = element[0]; 83181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger res = i1.not(); 83281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes int len = i1.bitLength() + 66; 83381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes for (int i = 0; i < len; i++) { 83481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("not", !i1.testBit(i) == res.testBit(i)); 83581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 83681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 83781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 83881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 83981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 84081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * @tests java.math.BigInteger#andNot(java.math.BigInteger) 84181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 84281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void test_andNotLjava_math_BigInteger() { 84381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes for (BigInteger[] element : booleanPairs) { 84481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger i1 = element[0], i2 = element[1]; 84581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger res = i1.andNot(i2); 84681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes int len = Math.max(i1.bitLength(), i2.bitLength()) + 66; 84781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes for (int i = 0; i < len; i++) { 84881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("andNot", (i1.testBit(i) && !i2.testBit(i)) == res 84981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes .testBit(i)); 85081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 85181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes // asymmetrical 85281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes i1 = element[1]; 85381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes i2 = element[0]; 85481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes res = i1.andNot(i2); 85581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes for (int i = 0; i < len; i++) { 85681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("andNot reversed", 85781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes (i1.testBit(i) && !i2.testBit(i)) == res.testBit(i)); 85881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 85981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 86081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes //regression for HARMONY-4653 86181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes try{ 86281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger.ZERO.andNot(null); 86381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes fail("should throw NPE"); 86481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes }catch(Exception e){ 86581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes //expected 86681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 86781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger bi = new BigInteger(0, new byte[]{}); 86881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertEquals(BigInteger.ZERO, bi.andNot(BigInteger.ZERO)); 86981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 87081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 87181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 87281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testClone() { 87381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes // Regression test for HARMONY-1770 87481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes MyBigInteger myBigInteger = new MyBigInteger("12345"); 87581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes myBigInteger = (MyBigInteger) myBigInteger.clone(); 87681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 87781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 87881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes static class MyBigInteger extends BigInteger implements Cloneable { 87981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public MyBigInteger(String val) { 88081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes super(val); 88181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 88281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public Object clone() { 88381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes try { 88481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes return super.clone(); 88581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } catch (CloneNotSupportedException e) { 88681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes return null; 88781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 88881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 88981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 89081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 89181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes @Override 89281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes protected void setUp() { 89381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes bi1 = new BigInteger("2436798324768978", 16); 89481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes bi2 = new BigInteger("4576829475724387584378543764555", 16); 89581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes bi3 = new BigInteger("43987298363278574365732645872643587624387563245", 89681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 16); 89781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 89881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes bi33 = new BigInteger( 89981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes "10730846694701319120609898625733976090865327544790136667944805934175543888691400559249041094474885347922769807001", 90081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 10); 90181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes bi22 = new BigInteger( 90281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes "33301606932171509517158059487795669025817912852219962782230629632224456249", 90381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 10); 90481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes bi11 = new BigInteger("6809003003832961306048761258711296064", 10); 90581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes bi23 = new BigInteger( 90681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes "597791300268191573513888045771594235932809890963138840086083595706565695943160293610527214057", 90781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 10); 90881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes bi13 = new BigInteger( 90981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes "270307912162948508387666703213038600031041043966215279482940731158968434008", 91081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 10); 91181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes bi12 = new BigInteger( 91281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes "15058244971895641717453176477697767050482947161656458456", 10); 91381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 91481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes largePos = new BigInteger( 91581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes "834759814379857314986743298675687569845986736578576375675678998612743867438632986243982098437620983476924376", 91681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 16); 91781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes smallPos = new BigInteger("48753269875973284765874598630960986276", 16); 91881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes largeNeg = new BigInteger( 91981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes "-878824397432651481891353247987891423768534321387864361143548364457698487264387568743568743265873246576467643756437657436587436", 92081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 16); 92181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes smallNeg = new BigInteger("-567863254343798609857456273458769843", 16); 92281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes booleanPairs = new BigInteger[][] { { largePos, smallPos }, 92381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes { largePos, smallNeg }, { largeNeg, smallPos }, 92481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes { largeNeg, smallNeg } }; 92581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 92681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 92781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes private void testDiv(BigInteger i1, BigInteger i2) { 92881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger q = i1.divide(i2); 92981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger r = i1.remainder(i2); 93081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger[] temp = i1.divideAndRemainder(i2); 93181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 93281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("divide and divideAndRemainder do not agree", q 93381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes .equals(temp[0])); 93481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("remainder and divideAndRemainder do not agree", r 93581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes .equals(temp[1])); 93681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("signum and equals(zero) do not agree on quotient", q 93781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes .signum() != 0 93881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes || q.equals(zero)); 93981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("signum and equals(zero) do not agree on remainder", r 94081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes .signum() != 0 94181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes || r.equals(zero)); 94281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("wrong sign on quotient", q.signum() == 0 94381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes || q.signum() == i1.signum() * i2.signum()); 94481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("wrong sign on remainder", r.signum() == 0 94581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes || r.signum() == i1.signum()); 94681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("remainder out of range", r.abs().compareTo(i2.abs()) < 0); 94781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("quotient too small", q.abs().add(one).multiply(i2.abs()) 94881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes .compareTo(i1.abs()) > 0); 94981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("quotient too large", q.abs().multiply(i2.abs()).compareTo( 95081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes i1.abs()) <= 0); 95181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger p = q.multiply(i2); 95281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger a = p.add(r); 95381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("(a/b)*b+(a%b) != a", a.equals(i1)); 95481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes try { 95581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger mod = i1.mod(i2); 95681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("mod is negative", mod.signum() >= 0); 95781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("mod out of range", mod.abs().compareTo(i2.abs()) < 0); 95881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("positive remainder == mod", r.signum() < 0 95981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes || r.equals(mod)); 96081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("negative remainder == mod - divisor", r.signum() >= 0 96181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes || r.equals(mod.subtract(i2))); 96281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } catch (ArithmeticException e) { 96381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("mod fails on negative divisor only", i2.signum() <= 0); 96481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 96581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 96681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 96781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes private void testDivRanges(BigInteger i) { 96881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger bound = i.multiply(two); 96981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes for (BigInteger j = bound.negate(); j.compareTo(bound) <= 0; j = j 97081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes .add(i)) { 97181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger innerbound = j.add(two); 97281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger k = j.subtract(two); 97381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes for (; k.compareTo(innerbound) <= 0; k = k.add(one)) { 97481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes testDiv(k, i); 97581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 97681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 97781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 97881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 97981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes private boolean isPrime(long b) { 98081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes if (b == 2) { 98181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes return true; 98281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 98381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes // check for div by 2 98481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes if ((b & 1L) == 0) { 98581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes return false; 98681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 98781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes long maxlen = ((long) Math.sqrt(b)) + 2; 98881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes for (long x = 3; x < maxlen; x += 2) { 98981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes if (b % x == 0) { 99081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes return false; 99181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 99281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 99381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes return true; 99481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 99581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 99681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes private void testAllMults(BigInteger i1, BigInteger i2, BigInteger ans) { 99781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("i1*i2=ans", i1.multiply(i2).equals(ans)); 99881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("i2*i1=ans", i2.multiply(i1).equals(ans)); 99981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("-i1*i2=-ans", i1.negate().multiply(i2).equals(ans.negate())); 100081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("-i2*i1=-ans", i2.negate().multiply(i1).equals(ans.negate())); 100181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("i1*-i2=-ans", i1.multiply(i2.negate()).equals(ans.negate())); 100281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("i2*-i1=-ans", i2.multiply(i1.negate()).equals(ans.negate())); 100381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("-i1*-i2=ans", i1.negate().multiply(i2.negate()).equals(ans)); 100481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("-i2*-i1=ans", i2.negate().multiply(i1.negate()).equals(ans)); 100581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 100681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 100781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes private void testAllDivs(BigInteger i1, BigInteger i2) { 100881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes testDiv(i1, i2); 100981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes testDiv(i1.negate(), i2); 101081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes testDiv(i1, i2.negate()); 101181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes testDiv(i1.negate(), i2.negate()); 101281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 101381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes} 1014