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