Return-Path: Delivered-To: apmail-incubator-harmony-commits-archive@www.apache.org Received: (qmail 26003 invoked from network); 29 Mar 2006 09:02:13 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 29 Mar 2006 09:02:13 -0000 Received: (qmail 82069 invoked by uid 500); 29 Mar 2006 09:02:02 -0000 Delivered-To: apmail-incubator-harmony-commits-archive@incubator.apache.org Received: (qmail 81751 invoked by uid 500); 29 Mar 2006 09:01:59 -0000 Mailing-List: contact harmony-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: harmony-dev@incubator.apache.org Delivered-To: mailing list harmony-commits@incubator.apache.org Received: (qmail 81163 invoked by uid 99); 29 Mar 2006 09:01:55 -0000 Received: from asf.osuosl.org (HELO asf.osuosl.org) (140.211.166.49) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 29 Mar 2006 01:01:55 -0800 X-ASF-Spam-Status: No, hits=-9.4 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [209.237.227.194] (HELO minotaur.apache.org) (209.237.227.194) by apache.org (qpsmtpd/0.29) with SMTP; Wed, 29 Mar 2006 01:01:43 -0800 Received: (qmail 24897 invoked by uid 65534); 29 Mar 2006 09:01:21 -0000 Message-ID: <20060329090121.24896.qmail@minotaur.apache.org> Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r389715 [10/12] - in /incubator/harmony/enhanced/classlib/trunk: make/ modules/math/META-INF/ modules/math/make/ modules/math/make/common/ modules/math/src/main/java/java/math/ modules/math/src/test/java/org/ modules/math/src/test/java/org/... Date: Wed, 29 Mar 2006 09:01:07 -0000 To: harmony-commits@incubator.apache.org From: tellison@apache.org X-Mailer: svnmailer-1.0.7 X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N Modified: incubator/harmony/enhanced/classlib/trunk/modules/math/src/test/java/org/apache/harmony/tests/math/BigIntegerOperateBitsTest.java URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/math/src/test/java/org/apache/harmony/tests/math/BigIntegerOperateBitsTest.java?rev=389715&r1=389571&r2=389715&view=diff ============================================================================== --- incubator/harmony/enhanced/classlib/trunk/modules/math/src/test/java/org/apache/harmony/tests/math/BigIntegerOperateBitsTest.java (original) +++ incubator/harmony/enhanced/classlib/trunk/modules/math/src/test/java/org/apache/harmony/tests/math/BigIntegerOperateBitsTest.java Wed Mar 29 01:01:04 2006 @@ -1,1379 +1,1379 @@ -/* - * Copyright 2005 The Apache Software Foundation or its licensors, as applicable. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -/** - * @author Elena Semukhina - * @version $Revision: 1.10.2.2 $ - */ - -package java.math; - -import junit.framework.TestCase; -import java.math.BigInteger; - -/** - * Class: java.math.BigInteger - * Methods: bitLength, shiftLeft, shiftRight, - * clearBit, flipBit, setBit, testBit - */ -public class BigIntegerOperateBitsTest extends TestCase { - /** - * bitCount() of zero. - */ - public void testBitCountZero() { - BigInteger aNumber = new BigInteger("0"); - assertTrue(aNumber.bitCount() == 0); - } - - /** - * bitCount() of a negative number. - */ - public void testBitCountNeg() { - BigInteger aNumber = new BigInteger("-12378634756382937873487638746283767238657872368748726875"); - assertTrue(aNumber.bitCount() == 87); - } - - /** - * bitCount() of a negative number. - */ - public void testBitCountPos() { - BigInteger aNumber = new BigInteger("12378634756343564757582937873487638746283767238657872368748726875"); - assertTrue(aNumber.bitCount() == 107); - } - - /** - * bitLength() of zero. - */ - public void testBitLengthZero() { - BigInteger aNumber = new BigInteger("0"); - assertTrue(aNumber.bitLength() == 0); - } - - /** - * bitLength() of a positive number. - */ - public void testBitLengthPositive1() { - byte aBytes[] = {12, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26, 3, 91}; - int aSign = 1; - BigInteger aNumber = new BigInteger(aSign, aBytes); - assertTrue(aNumber.bitLength() == 108); - } - - /** - * bitLength() of a positive number with the leftmost bit set - */ - public void testBitLengthPositive2() { - byte aBytes[] = {-128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = 1; - BigInteger aNumber = new BigInteger(aSign, aBytes); - assertTrue(aNumber.bitLength() == 96); - } - - /** - * bitLength() of a positive number which is a power of 2 - */ - public void testBitLengthPositive3() { - byte aBytes[] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; - int aSign = 1; - BigInteger aNumber = new BigInteger(aSign, aBytes); - assertTrue(aNumber.bitLength() == 81); - } - - /** - * bitLength() of a negative number. - */ - public void testBitLengthNegative1() { - byte aBytes[] = {12, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26, 3, 91}; - int aSign = -1; - BigInteger aNumber = new BigInteger(aSign, aBytes); - assertTrue(aNumber.bitLength() == 108); - } - - /** - * bitLength() of a negative number with the leftmost bit set - */ - public void testBitLengthNegative2() { - byte aBytes[] = {-128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = -1; - BigInteger aNumber = new BigInteger(aSign, aBytes); - assertTrue(aNumber.bitLength() == 96); - } - - /** - * bitLength() of a negative number which is a power of 2 - */ - public void testBitLengthNegative3() { - byte aBytes[] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; - int aSign = -1; - BigInteger aNumber = new BigInteger(aSign, aBytes); - assertTrue(aNumber.bitLength() == 80); - } - - /** - * clearBit(int n) of a negative n - */ - public void testClearBitException() { - byte aBytes[] = {-1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = 1; - int number = -7; - BigInteger aNumber = new BigInteger(aSign, aBytes); - try { - BigInteger result = aNumber.clearBit(number); - fail("ArithmeticException has not been caught"); - } catch (ArithmeticException e) { - assertTrue("Improper exception message", e.getMessage().equals("negative bit number")); - } - } - - /** - * clearBit(int n) outside zero - */ - public void testClearBitZero() { - byte aBytes[] = {0}; - int aSign = 0; - int number = 0; - byte rBytes[] = {0}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.clearBit(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == 0); - } - - /** - * clearBit(int n) outside zero - */ - public void testClearBitZeroOutside1() { - byte aBytes[] = {0}; - int aSign = 0; - int number = 95; - byte rBytes[] = {0}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.clearBit(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == 0); - } - - /** - * clearBit(int n) inside a negative number - */ - public void testClearBitNegativeInside1() { - byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = -1; - int number = 15; - byte rBytes[] = {-2, 127, -57, -101, 1, 75, -90, -46, -92, -4, 14, 92, -26}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.clearBit(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == -1); - } - - /** - * clearBit(int n) inside a negative number - */ - public void testClearBitNegativeInside2() { - byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = -1; - int number = 44; - byte rBytes[] = {-2, 127, -57, -101, 1, 75, -90, -62, -92, -4, 14, -36, -26}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.clearBit(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == -1); - } - - /** - * clearBit(2) in the negative number with all ones in bit representation - */ - public void testClearBitNegativeInside3() { - String as = "-18446744073709551615"; - int number = 2; - BigInteger aNumber = new BigInteger(as); - BigInteger result = aNumber.clearBit(number); - assertEquals(as, result.toString()); - } - - /** - * clearBit(0) in the negative number of length 1 - * with all ones in bit representation. - * the resulting number's length is 2. - */ - public void testClearBitNegativeInside4() { - String as = "-4294967295"; - String res = "-4294967296"; - int number = 0; - BigInteger aNumber = new BigInteger(as); - BigInteger result = aNumber.clearBit(number); - assertEquals(res, result.toString()); - } - - /** - * clearBit(0) in the negative number of length 2 - * with all ones in bit representation. - * the resulting number's length is 3. - */ - public void testClearBitNegativeInside5() { - String as = "-18446744073709551615"; - String res = "-18446744073709551616"; - int number = 0; - BigInteger aNumber = new BigInteger(as); - BigInteger result = aNumber.clearBit(number); - assertEquals(res, result.toString()); - } - - /** - * clearBit(int n) outside a negative number - */ - public void testClearBitNegativeOutside1() { - byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = -1; - int number = 150; - byte rBytes[] = {-65, -1, -1, -1, -1, -1, -2, 127, -57, -101, 1, 75, -90, -46, -92, -4, 14, -36, -26}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.clearBit(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == -1); - } - - /** - * clearBit(int n) outside a negative number - */ - public void testClearBitNegativeOutside2() { - byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = -1; - int number = 165; - byte rBytes[] = {-33, -1, -1, -1, -1, -1, -1, -1, -2, 127, -57, -101, 1, 75, -90, -46, -92, -4, 14, -36, -26}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.clearBit(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == -1); - } - - /** - * clearBit(int n) inside a positive number - */ - public void testClearBitPositiveInside1() { - byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = 1; - int number = 20; - byte rBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -31, 35, 26}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.clearBit(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == 1); - } - - /** - * clearBit(int n) inside a positive number - */ - public void testClearBitPositiveInside2() { - byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = 1; - int number = 17; - byte rBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.clearBit(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == 1); - } - - /** - * clearBit(int n) inside a positive number - */ - public void testClearBitPositiveInside3() { - byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = 1; - int number = 45; - byte rBytes[] = {1, -128, 56, 100, -2, -76, 89, 13, 91, 3, -15, 35, 26}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.clearBit(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == 1); - } - - /** - * clearBit(int n) inside a positive number - */ - public void testClearBitPositiveInside4 () { - byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = 1; - int number = 50; - byte rBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.clearBit(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == 1); - } - - /** - * clearBit(int n) inside a positive number - */ - public void testClearBitPositiveInside5 () { - byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = 1; - int number = 63; - byte rBytes[] = {1, -128, 56, 100, -2, 52, 89, 45, 91, 3, -15, 35, 26}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.clearBit(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == 1); - } - - /** - * clearBit(int n) outside a positive number - */ - public void testClearBitPositiveOutside1() { - byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = 1; - int number = 150; - byte rBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.clearBit(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == 1); - } - - /** - * clearBit(int n) outside a positive number - */ - public void testClearBitPositiveOutside2() { - byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = 1; - int number = 191; - byte rBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.clearBit(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == 1); - } - - /** - * clearBit(int n) the leftmost bit in a negative number - */ - public void testClearBitTopNegative() { - byte aBytes[] = {1, -128, 56, 100, -15, 35, 26}; - int aSign = -1; - int number = 63; - byte rBytes[] = {-1, 127, -2, 127, -57, -101, 14, -36, -26}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.clearBit(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == -1); - } - - /** - * flipBit(int n) of a negative n - */ - public void testFlipBitException() { - byte aBytes[] = {-1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = 1; - int number = -7; - BigInteger aNumber = new BigInteger(aSign, aBytes); - try { - BigInteger result = aNumber.flipBit(number); - fail("ArithmeticException has not been caught"); - } catch (ArithmeticException e) { - assertTrue("Improper exception message", e.getMessage().equals("negative bit number")); - } - } - - /** - * flipBit(int n) zero - */ - public void testFlipBitZero() { - byte aBytes[] = {0}; - int aSign = 0; - int number = 0; - byte rBytes[] = {1}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.flipBit(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == 1); - } - - /** - * flipBit(int n) outside zero - */ - public void testFlipBitZeroOutside1() { - byte aBytes[] = {0}; - int aSign = 0; - int number = 62; - byte rBytes[] = {64, 0, 0, 0, 0, 0, 0, 0}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.flipBit(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue("incorrect value", resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == 1); - } - - /** - * flipBit(int n) outside zero - */ - public void testFlipBitZeroOutside2() { - byte aBytes[] = {0}; - int aSign = 0; - int number = 63; - byte rBytes[] = {0, -128, 0, 0, 0, 0, 0, 0, 0}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.flipBit(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue("incorrect value", resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == 1); - } - - /** - * flipBit(int n) the leftmost bit in a negative number - */ - public void testFlipBitLeftmostNegative() { - byte aBytes[] = {1, -128, 56, 100, -15, 35, 26}; - int aSign = -1; - int number = 48; - byte rBytes[] = {-1, 127, -57, -101, 14, -36, -26, 49}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.flipBit(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == -1); - } - - /** - * flipBit(int n) the leftmost bit in a positive number - */ - public void testFlipBitLeftmostPositive() { - byte aBytes[] = {1, -128, 56, 100, -15, 35, 26}; - int aSign = 1; - int number = 48; - byte rBytes[] = {0, -128, 56, 100, -15, 35, 26}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.flipBit(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == 1); - } - - /** - * flipBit(int n) inside a negative number - */ - public void testFlipBitNegativeInside1() { - byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = -1; - int number = 15; - byte rBytes[] = {-2, 127, -57, -101, 1, 75, -90, -46, -92, -4, 14, 92, -26}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.flipBit(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == -1); - } - - /** - * flipBit(int n) inside a negative number - */ - public void testFlipBitNegativeInside2() { - byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = -1; - int number = 45; - byte rBytes[] = {-2, 127, -57, -101, 1, 75, -90, -14, -92, -4, 14, -36, -26}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.flipBit(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == -1); - } - - /** - * flipBit(int n) inside a negative number with all ones in bit representation - */ - public void testFlipBitNegativeInside3() { - String as = "-18446744073709551615"; - String res = "-18446744073709551611"; - int number = 2; - BigInteger aNumber = new BigInteger(as); - BigInteger result = aNumber.flipBit(number); - assertEquals(res, result.toString()); - } - - /** - * flipBit(0) in the negative number of length 1 - * with all ones in bit representation. - * the resulting number's length is 2. - */ - public void testFlipBitNegativeInside4() { - String as = "-4294967295"; - String res = "-4294967296"; - int number = 0; - BigInteger aNumber = new BigInteger(as); - BigInteger result = aNumber.flipBit(number); - assertEquals(res, result.toString()); - } - - /** - * flipBit(0) in the negative number of length 2 - * with all ones in bit representation. - * the resulting number's length is 3. - */ - public void testFlipBitNegativeInside5() { - String as = "-18446744073709551615"; - String res = "-18446744073709551616"; - int number = 0; - BigInteger aNumber = new BigInteger(as); - BigInteger result = aNumber.flipBit(number); - assertEquals(res, result.toString()); - } - - /** - * flipBit(int n) outside a negative number - */ - public void testFlipBitNegativeOutside1() { - byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = -1; - int number = 150; - byte rBytes[] = {-65, -1, -1, -1, -1, -1, -2, 127, -57, -101, 1, 75, -90, -46, -92, -4, 14, -36, -26}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.flipBit(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == -1); - } - - /** - * flipBit(int n) outside a negative number - */ - public void testFlipBitNegativeOutside2() { - byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = -1; - int number = 191; - byte rBytes[] = {-1, 127, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -2, 127, -57, -101, 1, 75, -90, -46, -92, -4, 14, -36, -26}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.flipBit(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == -1); - } - - /** - * flipBit(int n) inside a positive number - */ - public void testFlipBitPositiveInside1() { - byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = 1; - int number = 15; - byte rBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, -93, 26}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.flipBit(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == 1); - } - - /** - * flipBit(int n) inside a positive number - */ - public void testFlipBitPositiveInside2() { - byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = 1; - int number = 45; - byte rBytes[] = {1, -128, 56, 100, -2, -76, 89, 13, 91, 3, -15, 35, 26}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.flipBit(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == 1); - } - - /** - * flipBit(int n) outside a positive number - */ - public void testFlipBitPositiveOutside1() { - byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = 1; - int number = 150; - byte rBytes[] = {64, 0, 0, 0, 0, 0, 1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.flipBit(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == 1); - } - - /** - * flipBit(int n) outside a positive number - */ - public void testFlipBitPositiveOutside2() { - byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = 1; - int number = 191; - byte rBytes[] = {0, -128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.flipBit(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == 1); - } - - /** - * setBit(int n) of a negative n - */ - public void testSetBitException() { - byte aBytes[] = {-1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = 1; - int number = -7; - BigInteger aNumber = new BigInteger(aSign, aBytes); - try { - BigInteger result = aNumber.setBit(number); - fail("ArithmeticException has not been caught"); - } catch (ArithmeticException e) { - assertTrue("Improper exception message", e.getMessage().equals("negative bit number")); - } - } - - /** - * setBit(int n) outside zero - */ - public void testSetBitZero() { - byte aBytes[] = {0}; - int aSign = 0; - int number = 0; - byte rBytes[] = {1}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.setBit(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == 1); - } - - /** - * setBit(int n) outside zero - */ - public void testSetBitZeroOutside1() { - byte aBytes[] = {0}; - int aSign = 0; - int number = 95; - byte rBytes[] = {0, -128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.setBit(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == 1); - } - - /** - * setBit(int n) inside a positive number - */ - public void testSetBitPositiveInside1() { - byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = 1; - int number = 20; - byte rBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.setBit(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == 1); - } - - /** - * setBit(int n) inside a positive number - */ - public void testSetBitPositiveInside2() { - byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = 1; - int number = 17; - byte rBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -13, 35, 26}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.setBit(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == 1); - } - - /** - * setBit(int n) inside a positive number - */ - public void testSetBitPositiveInside3() { - byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = 1; - int number = 45; - byte rBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.setBit(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == 1); - } - - /** - * setBit(int n) inside a positive number - */ - public void testSetBitPositiveInside4 () { - byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = 1; - int number = 50; - byte rBytes[] = {1, -128, 56, 100, -2, -76, 93, 45, 91, 3, -15, 35, 26}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.setBit(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == 1); - } - - /** - * setBit(int n) outside a positive number - */ - public void testSetBitPositiveOutside1() { - byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = 1; - int number = 150; - byte rBytes[] = {64, 0, 0, 0, 0, 0, 1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.setBit(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == 1); - } - - /** - * setBit(int n) outside a positive number - */ - public void testSetBitPositiveOutside2() { - byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = 1; - int number = 223; - byte rBytes[] = {0, -128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.setBit(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == 1); - } - - /** - * setBit(int n) the leftmost bit in a positive number - */ - public void testSetBitTopPositive() { - byte aBytes[] = {1, -128, 56, 100, -15, 35, 26}; - int aSign = 1; - int number = 63; - byte rBytes[] = {0, -128, 1, -128, 56, 100, -15, 35, 26}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.setBit(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == 1); - } - - /** - * setBit(int n) the leftmost bit in a negative number - */ - public void testSetBitLeftmostNegative() { - byte aBytes[] = {1, -128, 56, 100, -15, 35, 26}; - int aSign = -1; - int number = 48; - byte rBytes[] = {-1, 127, -57, -101, 14, -36, -26, 49}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.setBit(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == -1); - } - - /** - * setBit(int n) inside a negative number - */ - public void testSetBitNegativeInside1() { - byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = -1; - int number = 15; - byte rBytes[] = {-2, 127, -57, -101, 1, 75, -90, -46, -92, -4, 14, -36, -26}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.setBit(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == -1); - } - - /** - * setBit(int n) inside a negative number - */ - public void testSetBitNegativeInside2() { - byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = -1; - int number = 44; - byte rBytes[] = {-2, 127, -57, -101, 1, 75, -90, -46, -92, -4, 14, -36, -26}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.setBit(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == -1); - } - - /** - * setBit(int n) inside a negative number with all ones in bit representation - */ - public void testSetBitNegativeInside3() { - String as = "-18446744073709551615"; - String res = "-18446744073709551611"; - int number = 2; - BigInteger aNumber = new BigInteger(as); - BigInteger result = aNumber.setBit(number); - assertEquals(res, result.toString()); - } - - /** - * setBit(0) in the negative number of length 1 - * with all ones in bit representation. - * the resulting number's length is 2. - */ - public void testSetBitNegativeInside4() { - String as = "-4294967295"; - int number = 0; - BigInteger aNumber = new BigInteger(as); - BigInteger result = aNumber.setBit(number); - assertEquals(as, result.toString()); - } - - /** - * setBit(0) in the negative number of length 2 - * with all ones in bit representation. - * the resulting number's length is 3. - */ - public void testSetBitNegativeInside5() { - String as = "-18446744073709551615"; - int number = 0; - BigInteger aNumber = new BigInteger(as); - BigInteger result = aNumber.setBit(number); - assertEquals(as, result.toString()); - } - - /** - * setBit(int n) outside a negative number - */ - public void testSetBitNegativeOutside1() { - byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = -1; - int number = 150; - byte rBytes[] = {-2, 127, -57, -101, 1, 75, -90, -46, -92, -4, 14, -36, -26}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.setBit(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == -1); - } - - /** - * setBit(int n) outside a negative number - */ - public void testSetBitNegativeOutside2() { - byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = -1; - int number = 191; - byte rBytes[] = {-2, 127, -57, -101, 1, 75, -90, -46, -92, -4, 14, -36, -26}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.setBit(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == -1); - } - - /** - * setBit: check the case when the number of bit to be set can be - * represented as n * 32 + 31, where n is an arbitrary integer. - * Here 191 = 5 * 32 + 31 - */ - public void testSetBitBug1331() { - BigInteger result = BigInteger.valueOf(0L).setBit(191); - assertTrue("incorrect value", result.toString().equals("3138550867693340381917894711603833208051177722232017256448")); - assertTrue("incorrect sign", result.signum() == 1); - } - - /** - * shiftLeft(int n), n = 0 - */ - public void testShiftLeft1() { - byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = 1; - int number = 0; - byte rBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.shiftLeft(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == 1); - } - - /** - * shiftLeft(int n), n < 0 - */ - public void testShiftLeft2() { - byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = 1; - int number = -27; - byte rBytes[] = {48, 7, 12, -97, -42, -117, 37, -85, 96}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.shiftLeft(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == 1); - } - - /** - * shiftLeft(int n) a positive number, n > 0 - */ - public void testShiftLeft3() { - byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = 1; - int number = 27; - byte rBytes[] = {12, 1, -61, 39, -11, -94, -55, 106, -40, 31, -119, 24, -48, 0, 0, 0}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.shiftLeft(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == 1); - } - - /** - * shiftLeft(int n) a positive number, n > 0 - */ - public void testShiftLeft4() { - byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = 1; - int number = 45; - byte rBytes[] = {48, 7, 12, -97, -42, -117, 37, -85, 96, 126, 36, 99, 64, 0, 0, 0, 0, 0}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.shiftLeft(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == 1); - } - - /** - * shiftLeft(int n) a negative number, n > 0 - */ - public void testShiftLeft5() { - byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = -1; - int number = 45; - byte rBytes[] = {-49, -8, -13, 96, 41, 116, -38, 84, -97, -127, -37, -100, -64, 0, 0, 0, 0, 0}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.shiftLeft(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == -1); - } - - /** - * shiftRight(int n), n = 0 - */ - public void testShiftRight1() { - byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = 1; - int number = 0; - byte rBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.shiftRight(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == 1); - } - - /** - * shiftRight(int n), n < 0 - */ - public void testShiftRight2() { - byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = 1; - int number = -27; - byte rBytes[] = {12, 1, -61, 39, -11, -94, -55, 106, -40, 31, -119, 24, -48, 0, 0, 0}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.shiftRight(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == 1); - } - - /** - * shiftRight(int n), 0 < n < 32 - */ - public void testShiftRight3() { - byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = 1; - int number = 27; - byte rBytes[] = {48, 7, 12, -97, -42, -117, 37, -85, 96}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.shiftRight(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == 1); - } - - /** - * shiftRight(int n), n > 32 - */ - public void testShiftRight4() { - byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = 1; - int number = 45; - byte rBytes[] = {12, 1, -61, 39, -11, -94, -55}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.shiftRight(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == 1); - } - - /** - * shiftRight(int n), n is greater than bitLength() - */ - public void testShiftRight5() { - byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = 1; - int number = 300; - byte rBytes[] = {0}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.shiftRight(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == 0); - } - - /** - * shiftRight a negative number; - * shift distance is multiple of 32; - * shifted bits are NOT zeroes. - */ - public void testShiftRightNegNonZeroesMul32() { - byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 1, 0, 0, 0, 0, 0, 0, 0}; - int aSign = -1; - int number = 64; - byte rBytes[] = {-2, 127, -57, -101, 1, 75, -90, -46, -92}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.shiftRight(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == -1); - } - - /** - * shiftRight a negative number; - * shift distance is NOT multiple of 32; - * shifted bits are NOT zeroes. - */ - public void testShiftRightNegNonZeroes() { - byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 0, 0, 0, 0, 0, 0, 0, 0}; - int aSign = -1; - int number = 68; - byte rBytes[] = {-25, -4, 121, -80, 20, -70, 109, 42}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.shiftRight(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == -1); - } - - /** - * shiftRight a negative number; - * shift distance is NOT multiple of 32; - * shifted bits are zeroes. - */ - public void testShiftRightNegZeroes() { - byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0}; - int aSign = -1; - int number = 68; - byte rBytes[] = {-25, -4, 121, -80, 20, -70, 109, 48}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.shiftRight(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == -1); - } - - /** - * shiftRight a negative number; - * shift distance is multiple of 32; - * shifted bits are zeroes. - */ - public void testShiftRightNegZeroesMul32() { - byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 0, 0, 0, 0, 0, 0, 0, 0}; - int aSign = -1; - int number = 64; - byte rBytes[] = {-2, 127, -57, -101, 1, 75, -90, -46, -91}; - BigInteger aNumber = new BigInteger(aSign, aBytes); - BigInteger result = aNumber.shiftRight(number); - byte resBytes[] = new byte[rBytes.length]; - resBytes = result.toByteArray(); - for(int i = 0; i < resBytes.length; i++) { - assertTrue(resBytes[i] == rBytes[i]); - } - assertTrue("incorrect sign", result.signum() == -1); - } - - /** - * testBit(int n) of a negative n - */ - public void testTestBitException() { - byte aBytes[] = {-1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = 1; - int number = -7; - BigInteger aNumber = new BigInteger(aSign, aBytes); - try { - boolean result = aNumber.testBit(number); - fail("ArithmeticException has not been caught"); - } catch (ArithmeticException e) { - assertTrue("Improper exception message", e.getMessage().equals("negative bit number")); - } - } - - /** - * testBit(int n) of a positive number - */ - public void testTestBitPositive1() { - byte aBytes[] = {-1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = 1; - int number = 7; - BigInteger aNumber = new BigInteger(aSign, aBytes); - assertTrue(!aNumber.testBit(number)); - } - - /** - * testBit(int n) of a positive number - */ - public void testTestBitPositive2() { - byte aBytes[] = {-1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = 1; - int number = 45; - BigInteger aNumber = new BigInteger(aSign, aBytes); - assertTrue(aNumber.testBit(number)); - } - - /** - * testBit(int n) of a positive number, n > bitLength() - */ - public void testTestBitPositive3() { - byte aBytes[] = {-1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = 1; - int number = 300; - BigInteger aNumber = new BigInteger(aSign, aBytes); - assertTrue(!aNumber.testBit(number)); - } - - /** - * testBit(int n) of a negative number - */ - public void testTestBitNegative1() { - byte aBytes[] = {-1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = -1; - int number = 7; - BigInteger aNumber = new BigInteger(aSign, aBytes); - assertTrue(aNumber.testBit(number)); - } - - /** - * testBit(int n) of a positive n - */ - public void testTestBitNegative2() { - byte aBytes[] = {-1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = -1; - int number = 45; - BigInteger aNumber = new BigInteger(aSign, aBytes); - assertTrue(!aNumber.testBit(number)); - } - - /** - * testBit(int n) of a positive n, n > bitLength() - */ - public void testTestBitNegative3() { - byte aBytes[] = {-1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; - int aSign = -1; - int number = 300; - BigInteger aNumber = new BigInteger(aSign, aBytes); - assertTrue(aNumber.testBit(number)); - } -} +/* + * Copyright 2005 The Apache Software Foundation or its licensors, as applicable. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * @author Elena Semukhina + * @version $Revision: 1.10.2.2 $ + */ + +package org.apache.harmony.tests.math; + +import junit.framework.TestCase; +import java.math.BigInteger; + +/** + * Class: java.math.BigInteger + * Methods: bitLength, shiftLeft, shiftRight, + * clearBit, flipBit, setBit, testBit + */ +public class BigIntegerOperateBitsTest extends TestCase { + /** + * bitCount() of zero. + */ + public void testBitCountZero() { + BigInteger aNumber = new BigInteger("0"); + assertTrue(aNumber.bitCount() == 0); + } + + /** + * bitCount() of a negative number. + */ + public void testBitCountNeg() { + BigInteger aNumber = new BigInteger("-12378634756382937873487638746283767238657872368748726875"); + assertTrue(aNumber.bitCount() == 87); + } + + /** + * bitCount() of a negative number. + */ + public void testBitCountPos() { + BigInteger aNumber = new BigInteger("12378634756343564757582937873487638746283767238657872368748726875"); + assertTrue(aNumber.bitCount() == 107); + } + + /** + * bitLength() of zero. + */ + public void testBitLengthZero() { + BigInteger aNumber = new BigInteger("0"); + assertTrue(aNumber.bitLength() == 0); + } + + /** + * bitLength() of a positive number. + */ + public void testBitLengthPositive1() { + byte aBytes[] = {12, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26, 3, 91}; + int aSign = 1; + BigInteger aNumber = new BigInteger(aSign, aBytes); + assertTrue(aNumber.bitLength() == 108); + } + + /** + * bitLength() of a positive number with the leftmost bit set + */ + public void testBitLengthPositive2() { + byte aBytes[] = {-128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; + int aSign = 1; + BigInteger aNumber = new BigInteger(aSign, aBytes); + assertTrue(aNumber.bitLength() == 96); + } + + /** + * bitLength() of a positive number which is a power of 2 + */ + public void testBitLengthPositive3() { + byte aBytes[] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + int aSign = 1; + BigInteger aNumber = new BigInteger(aSign, aBytes); + assertTrue(aNumber.bitLength() == 81); + } + + /** + * bitLength() of a negative number. + */ + public void testBitLengthNegative1() { + byte aBytes[] = {12, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26, 3, 91}; + int aSign = -1; + BigInteger aNumber = new BigInteger(aSign, aBytes); + assertTrue(aNumber.bitLength() == 108); + } + + /** + * bitLength() of a negative number with the leftmost bit set + */ + public void testBitLengthNegative2() { + byte aBytes[] = {-128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; + int aSign = -1; + BigInteger aNumber = new BigInteger(aSign, aBytes); + assertTrue(aNumber.bitLength() == 96); + } + + /** + * bitLength() of a negative number which is a power of 2 + */ + public void testBitLengthNegative3() { + byte aBytes[] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + int aSign = -1; + BigInteger aNumber = new BigInteger(aSign, aBytes); + assertTrue(aNumber.bitLength() == 80); + } + + /** + * clearBit(int n) of a negative n + */ + public void testClearBitException() { + byte aBytes[] = {-1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; + int aSign = 1; + int number = -7; + BigInteger aNumber = new BigInteger(aSign, aBytes); + try { + BigInteger result = aNumber.clearBit(number); + fail("ArithmeticException has not been caught"); + } catch (ArithmeticException e) { + assertTrue("Improper exception message", e.getMessage().equals("negative bit number")); + } + } + + /** + * clearBit(int n) outside zero + */ + public void testClearBitZero() { + byte aBytes[] = {0}; + int aSign = 0; + int number = 0; + byte rBytes[] = {0}; + BigInteger aNumber = new BigInteger(aSign, aBytes); + BigInteger result = aNumber.clearBit(number); + byte resBytes[] = new byte[rBytes.length]; + resBytes = result.toByteArray(); + for(int i = 0; i < resBytes.length; i++) { + assertTrue(resBytes[i] == rBytes[i]); + } + assertTrue("incorrect sign", result.signum() == 0); + } + + /** + * clearBit(int n) outside zero + */ + public void testClearBitZeroOutside1() { + byte aBytes[] = {0}; + int aSign = 0; + int number = 95; + byte rBytes[] = {0}; + BigInteger aNumber = new BigInteger(aSign, aBytes); + BigInteger result = aNumber.clearBit(number); + byte resBytes[] = new byte[rBytes.length]; + resBytes = result.toByteArray(); + for(int i = 0; i < resBytes.length; i++) { + assertTrue(resBytes[i] == rBytes[i]); + } + assertTrue("incorrect sign", result.signum() == 0); + } + + /** + * clearBit(int n) inside a negative number + */ + public void testClearBitNegativeInside1() { + byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; + int aSign = -1; + int number = 15; + byte rBytes[] = {-2, 127, -57, -101, 1, 75, -90, -46, -92, -4, 14, 92, -26}; + BigInteger aNumber = new BigInteger(aSign, aBytes); + BigInteger result = aNumber.clearBit(number); + byte resBytes[] = new byte[rBytes.length]; + resBytes = result.toByteArray(); + for(int i = 0; i < resBytes.length; i++) { + assertTrue(resBytes[i] == rBytes[i]); + } + assertTrue("incorrect sign", result.signum() == -1); + } + + /** + * clearBit(int n) inside a negative number + */ + public void testClearBitNegativeInside2() { + byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; + int aSign = -1; + int number = 44; + byte rBytes[] = {-2, 127, -57, -101, 1, 75, -90, -62, -92, -4, 14, -36, -26}; + BigInteger aNumber = new BigInteger(aSign, aBytes); + BigInteger result = aNumber.clearBit(number); + byte resBytes[] = new byte[rBytes.length]; + resBytes = result.toByteArray(); + for(int i = 0; i < resBytes.length; i++) { + assertTrue(resBytes[i] == rBytes[i]); + } + assertTrue("incorrect sign", result.signum() == -1); + } + + /** + * clearBit(2) in the negative number with all ones in bit representation + */ + public void testClearBitNegativeInside3() { + String as = "-18446744073709551615"; + int number = 2; + BigInteger aNumber = new BigInteger(as); + BigInteger result = aNumber.clearBit(number); + assertEquals(as, result.toString()); + } + + /** + * clearBit(0) in the negative number of length 1 + * with all ones in bit representation. + * the resulting number's length is 2. + */ + public void testClearBitNegativeInside4() { + String as = "-4294967295"; + String res = "-4294967296"; + int number = 0; + BigInteger aNumber = new BigInteger(as); + BigInteger result = aNumber.clearBit(number); + assertEquals(res, result.toString()); + } + + /** + * clearBit(0) in the negative number of length 2 + * with all ones in bit representation. + * the resulting number's length is 3. + */ + public void testClearBitNegativeInside5() { + String as = "-18446744073709551615"; + String res = "-18446744073709551616"; + int number = 0; + BigInteger aNumber = new BigInteger(as); + BigInteger result = aNumber.clearBit(number); + assertEquals(res, result.toString()); + } + + /** + * clearBit(int n) outside a negative number + */ + public void testClearBitNegativeOutside1() { + byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; + int aSign = -1; + int number = 150; + byte rBytes[] = {-65, -1, -1, -1, -1, -1, -2, 127, -57, -101, 1, 75, -90, -46, -92, -4, 14, -36, -26}; + BigInteger aNumber = new BigInteger(aSign, aBytes); + BigInteger result = aNumber.clearBit(number); + byte resBytes[] = new byte[rBytes.length]; + resBytes = result.toByteArray(); + for(int i = 0; i < resBytes.length; i++) { + assertTrue(resBytes[i] == rBytes[i]); + } + assertTrue("incorrect sign", result.signum() == -1); + } + + /** + * clearBit(int n) outside a negative number + */ + public void testClearBitNegativeOutside2() { + byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; + int aSign = -1; + int number = 165; + byte rBytes[] = {-33, -1, -1, -1, -1, -1, -1, -1, -2, 127, -57, -101, 1, 75, -90, -46, -92, -4, 14, -36, -26}; + BigInteger aNumber = new BigInteger(aSign, aBytes); + BigInteger result = aNumber.clearBit(number); + byte resBytes[] = new byte[rBytes.length]; + resBytes = result.toByteArray(); + for(int i = 0; i < resBytes.length; i++) { + assertTrue(resBytes[i] == rBytes[i]); + } + assertTrue("incorrect sign", result.signum() == -1); + } + + /** + * clearBit(int n) inside a positive number + */ + public void testClearBitPositiveInside1() { + byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; + int aSign = 1; + int number = 20; + byte rBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -31, 35, 26}; + BigInteger aNumber = new BigInteger(aSign, aBytes); + BigInteger result = aNumber.clearBit(number); + byte resBytes[] = new byte[rBytes.length]; + resBytes = result.toByteArray(); + for(int i = 0; i < resBytes.length; i++) { + assertTrue(resBytes[i] == rBytes[i]); + } + assertTrue("incorrect sign", result.signum() == 1); + } + + /** + * clearBit(int n) inside a positive number + */ + public void testClearBitPositiveInside2() { + byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; + int aSign = 1; + int number = 17; + byte rBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; + BigInteger aNumber = new BigInteger(aSign, aBytes); + BigInteger result = aNumber.clearBit(number); + byte resBytes[] = new byte[rBytes.length]; + resBytes = result.toByteArray(); + for(int i = 0; i < resBytes.length; i++) { + assertTrue(resBytes[i] == rBytes[i]); + } + assertTrue("incorrect sign", result.signum() == 1); + } + + /** + * clearBit(int n) inside a positive number + */ + public void testClearBitPositiveInside3() { + byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; + int aSign = 1; + int number = 45; + byte rBytes[] = {1, -128, 56, 100, -2, -76, 89, 13, 91, 3, -15, 35, 26}; + BigInteger aNumber = new BigInteger(aSign, aBytes); + BigInteger result = aNumber.clearBit(number); + byte resBytes[] = new byte[rBytes.length]; + resBytes = result.toByteArray(); + for(int i = 0; i < resBytes.length; i++) { + assertTrue(resBytes[i] == rBytes[i]); + } + assertTrue("incorrect sign", result.signum() == 1); + } + + /** + * clearBit(int n) inside a positive number + */ + public void testClearBitPositiveInside4 () { + byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; + int aSign = 1; + int number = 50; + byte rBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; + BigInteger aNumber = new BigInteger(aSign, aBytes); + BigInteger result = aNumber.clearBit(number); + byte resBytes[] = new byte[rBytes.length]; + resBytes = result.toByteArray(); + for(int i = 0; i < resBytes.length; i++) { + assertTrue(resBytes[i] == rBytes[i]); + } + assertTrue("incorrect sign", result.signum() == 1); + } + + /** + * clearBit(int n) inside a positive number + */ + public void testClearBitPositiveInside5 () { + byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; + int aSign = 1; + int number = 63; + byte rBytes[] = {1, -128, 56, 100, -2, 52, 89, 45, 91, 3, -15, 35, 26}; + BigInteger aNumber = new BigInteger(aSign, aBytes); + BigInteger result = aNumber.clearBit(number); + byte resBytes[] = new byte[rBytes.length]; + resBytes = result.toByteArray(); + for(int i = 0; i < resBytes.length; i++) { + assertTrue(resBytes[i] == rBytes[i]); + } + assertTrue("incorrect sign", result.signum() == 1); + } + + /** + * clearBit(int n) outside a positive number + */ + public void testClearBitPositiveOutside1() { + byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; + int aSign = 1; + int number = 150; + byte rBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; + BigInteger aNumber = new BigInteger(aSign, aBytes); + BigInteger result = aNumber.clearBit(number); + byte resBytes[] = new byte[rBytes.length]; + resBytes = result.toByteArray(); + for(int i = 0; i < resBytes.length; i++) { + assertTrue(resBytes[i] == rBytes[i]); + } + assertTrue("incorrect sign", result.signum() == 1); + } + + /** + * clearBit(int n) outside a positive number + */ + public void testClearBitPositiveOutside2() { + byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; + int aSign = 1; + int number = 191; + byte rBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; + BigInteger aNumber = new BigInteger(aSign, aBytes); + BigInteger result = aNumber.clearBit(number); + byte resBytes[] = new byte[rBytes.length]; + resBytes = result.toByteArray(); + for(int i = 0; i < resBytes.length; i++) { + assertTrue(resBytes[i] == rBytes[i]); + } + assertTrue("incorrect sign", result.signum() == 1); + } + + /** + * clearBit(int n) the leftmost bit in a negative number + */ + public void testClearBitTopNegative() { + byte aBytes[] = {1, -128, 56, 100, -15, 35, 26}; + int aSign = -1; + int number = 63; + byte rBytes[] = {-1, 127, -2, 127, -57, -101, 14, -36, -26}; + BigInteger aNumber = new BigInteger(aSign, aBytes); + BigInteger result = aNumber.clearBit(number); + byte resBytes[] = new byte[rBytes.length]; + resBytes = result.toByteArray(); + for(int i = 0; i < resBytes.length; i++) { + assertTrue(resBytes[i] == rBytes[i]); + } + assertTrue("incorrect sign", result.signum() == -1); + } + + /** + * flipBit(int n) of a negative n + */ + public void testFlipBitException() { + byte aBytes[] = {-1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; + int aSign = 1; + int number = -7; + BigInteger aNumber = new BigInteger(aSign, aBytes); + try { + BigInteger result = aNumber.flipBit(number); + fail("ArithmeticException has not been caught"); + } catch (ArithmeticException e) { + assertTrue("Improper exception message", e.getMessage().equals("negative bit number")); + } + } + + /** + * flipBit(int n) zero + */ + public void testFlipBitZero() { + byte aBytes[] = {0}; + int aSign = 0; + int number = 0; + byte rBytes[] = {1}; + BigInteger aNumber = new BigInteger(aSign, aBytes); + BigInteger result = aNumber.flipBit(number); + byte resBytes[] = new byte[rBytes.length]; + resBytes = result.toByteArray(); + for(int i = 0; i < resBytes.length; i++) { + assertTrue(resBytes[i] == rBytes[i]); + } + assertTrue("incorrect sign", result.signum() == 1); + } + + /** + * flipBit(int n) outside zero + */ + public void testFlipBitZeroOutside1() { + byte aBytes[] = {0}; + int aSign = 0; + int number = 62; + byte rBytes[] = {64, 0, 0, 0, 0, 0, 0, 0}; + BigInteger aNumber = new BigInteger(aSign, aBytes); + BigInteger result = aNumber.flipBit(number); + byte resBytes[] = new byte[rBytes.length]; + resBytes = result.toByteArray(); + for(int i = 0; i < resBytes.length; i++) { + assertTrue("incorrect value", resBytes[i] == rBytes[i]); + } + assertTrue("incorrect sign", result.signum() == 1); + } + + /** + * flipBit(int n) outside zero + */ + public void testFlipBitZeroOutside2() { + byte aBytes[] = {0}; + int aSign = 0; + int number = 63; + byte rBytes[] = {0, -128, 0, 0, 0, 0, 0, 0, 0}; + BigInteger aNumber = new BigInteger(aSign, aBytes); + BigInteger result = aNumber.flipBit(number); + byte resBytes[] = new byte[rBytes.length]; + resBytes = result.toByteArray(); + for(int i = 0; i < resBytes.length; i++) { + assertTrue("incorrect value", resBytes[i] == rBytes[i]); + } + assertTrue("incorrect sign", result.signum() == 1); + } + + /** + * flipBit(int n) the leftmost bit in a negative number + */ + public void testFlipBitLeftmostNegative() { + byte aBytes[] = {1, -128, 56, 100, -15, 35, 26}; + int aSign = -1; + int number = 48; + byte rBytes[] = {-1, 127, -57, -101, 14, -36, -26, 49}; + BigInteger aNumber = new BigInteger(aSign, aBytes); + BigInteger result = aNumber.flipBit(number); + byte resBytes[] = new byte[rBytes.length]; + resBytes = result.toByteArray(); + for(int i = 0; i < resBytes.length; i++) { + assertTrue(resBytes[i] == rBytes[i]); + } + assertTrue("incorrect sign", result.signum() == -1); + } + + /** + * flipBit(int n) the leftmost bit in a positive number + */ + public void testFlipBitLeftmostPositive() { + byte aBytes[] = {1, -128, 56, 100, -15, 35, 26}; + int aSign = 1; + int number = 48; + byte rBytes[] = {0, -128, 56, 100, -15, 35, 26}; + BigInteger aNumber = new BigInteger(aSign, aBytes); + BigInteger result = aNumber.flipBit(number); + byte resBytes[] = new byte[rBytes.length]; + resBytes = result.toByteArray(); + for(int i = 0; i < resBytes.length; i++) { + assertTrue(resBytes[i] == rBytes[i]); + } + assertTrue("incorrect sign", result.signum() == 1); + } + + /** + * flipBit(int n) inside a negative number + */ + public void testFlipBitNegativeInside1() { + byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; + int aSign = -1; + int number = 15; + byte rBytes[] = {-2, 127, -57, -101, 1, 75, -90, -46, -92, -4, 14, 92, -26}; + BigInteger aNumber = new BigInteger(aSign, aBytes); + BigInteger result = aNumber.flipBit(number); + byte resBytes[] = new byte[rBytes.length]; + resBytes = result.toByteArray(); + for(int i = 0; i < resBytes.length; i++) { + assertTrue(resBytes[i] == rBytes[i]); + } + assertTrue("incorrect sign", result.signum() == -1); + } + + /** + * flipBit(int n) inside a negative number + */ + public void testFlipBitNegativeInside2() { + byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; + int aSign = -1; + int number = 45; + byte rBytes[] = {-2, 127, -57, -101, 1, 75, -90, -14, -92, -4, 14, -36, -26}; + BigInteger aNumber = new BigInteger(aSign, aBytes); + BigInteger result = aNumber.flipBit(number); + byte resBytes[] = new byte[rBytes.length]; + resBytes = result.toByteArray(); + for(int i = 0; i < resBytes.length; i++) { + assertTrue(resBytes[i] == rBytes[i]); + } + assertTrue("incorrect sign", result.signum() == -1); + } + + /** + * flipBit(int n) inside a negative number with all ones in bit representation + */ + public void testFlipBitNegativeInside3() { + String as = "-18446744073709551615"; + String res = "-18446744073709551611"; + int number = 2; + BigInteger aNumber = new BigInteger(as); + BigInteger result = aNumber.flipBit(number); + assertEquals(res, result.toString()); + } + + /** + * flipBit(0) in the negative number of length 1 + * with all ones in bit representation. + * the resulting number's length is 2. + */ + public void testFlipBitNegativeInside4() { + String as = "-4294967295"; + String res = "-4294967296"; + int number = 0; + BigInteger aNumber = new BigInteger(as); + BigInteger result = aNumber.flipBit(number); + assertEquals(res, result.toString()); + } + + /** + * flipBit(0) in the negative number of length 2 + * with all ones in bit representation. + * the resulting number's length is 3. + */ + public void testFlipBitNegativeInside5() { + String as = "-18446744073709551615"; + String res = "-18446744073709551616"; + int number = 0; + BigInteger aNumber = new BigInteger(as); + BigInteger result = aNumber.flipBit(number); + assertEquals(res, result.toString()); + } + + /** + * flipBit(int n) outside a negative number + */ + public void testFlipBitNegativeOutside1() { + byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; + int aSign = -1; + int number = 150; + byte rBytes[] = {-65, -1, -1, -1, -1, -1, -2, 127, -57, -101, 1, 75, -90, -46, -92, -4, 14, -36, -26}; + BigInteger aNumber = new BigInteger(aSign, aBytes); + BigInteger result = aNumber.flipBit(number); + byte resBytes[] = new byte[rBytes.length]; + resBytes = result.toByteArray(); + for(int i = 0; i < resBytes.length; i++) { + assertTrue(resBytes[i] == rBytes[i]); + } + assertTrue("incorrect sign", result.signum() == -1); + } + + /** + * flipBit(int n) outside a negative number + */ + public void testFlipBitNegativeOutside2() { + byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; + int aSign = -1; + int number = 191; + byte rBytes[] = {-1, 127, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -2, 127, -57, -101, 1, 75, -90, -46, -92, -4, 14, -36, -26}; + BigInteger aNumber = new BigInteger(aSign, aBytes); + BigInteger result = aNumber.flipBit(number); + byte resBytes[] = new byte[rBytes.length]; + resBytes = result.toByteArray(); + for(int i = 0; i < resBytes.length; i++) { + assertTrue(resBytes[i] == rBytes[i]); + } + assertTrue("incorrect sign", result.signum() == -1); + } + + /** + * flipBit(int n) inside a positive number + */ + public void testFlipBitPositiveInside1() { + byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; + int aSign = 1; + int number = 15; + byte rBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, -93, 26}; + BigInteger aNumber = new BigInteger(aSign, aBytes); + BigInteger result = aNumber.flipBit(number); + byte resBytes[] = new byte[rBytes.length]; + resBytes = result.toByteArray(); + for(int i = 0; i < resBytes.length; i++) { + assertTrue(resBytes[i] == rBytes[i]); + } + assertTrue("incorrect sign", result.signum() == 1); + } + + /** + * flipBit(int n) inside a positive number + */ + public void testFlipBitPositiveInside2() { + byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; + int aSign = 1; + int number = 45; + byte rBytes[] = {1, -128, 56, 100, -2, -76, 89, 13, 91, 3, -15, 35, 26}; + BigInteger aNumber = new BigInteger(aSign, aBytes); + BigInteger result = aNumber.flipBit(number); + byte resBytes[] = new byte[rBytes.length]; + resBytes = result.toByteArray(); + for(int i = 0; i < resBytes.length; i++) { + assertTrue(resBytes[i] == rBytes[i]); + } + assertTrue("incorrect sign", result.signum() == 1); + } + + /** + * flipBit(int n) outside a positive number + */ + public void testFlipBitPositiveOutside1() { + byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; + int aSign = 1; + int number = 150; + byte rBytes[] = {64, 0, 0, 0, 0, 0, 1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; + BigInteger aNumber = new BigInteger(aSign, aBytes); + BigInteger result = aNumber.flipBit(number); + byte resBytes[] = new byte[rBytes.length]; + resBytes = result.toByteArray(); + for(int i = 0; i < resBytes.length; i++) { + assertTrue(resBytes[i] == rBytes[i]); + } + assertTrue("incorrect sign", result.signum() == 1); + } + + /** + * flipBit(int n) outside a positive number + */ + public void testFlipBitPositiveOutside2() { + byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; + int aSign = 1; + int number = 191; + byte rBytes[] = {0, -128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; + BigInteger aNumber = new BigInteger(aSign, aBytes); + BigInteger result = aNumber.flipBit(number); + byte resBytes[] = new byte[rBytes.length]; + resBytes = result.toByteArray(); + for(int i = 0; i < resBytes.length; i++) { + assertTrue(resBytes[i] == rBytes[i]); + } + assertTrue("incorrect sign", result.signum() == 1); + } + + /** + * setBit(int n) of a negative n + */ + public void testSetBitException() { + byte aBytes[] = {-1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; + int aSign = 1; + int number = -7; + BigInteger aNumber = new BigInteger(aSign, aBytes); + try { + BigInteger result = aNumber.setBit(number); + fail("ArithmeticException has not been caught"); + } catch (ArithmeticException e) { + assertTrue("Improper exception message", e.getMessage().equals("negative bit number")); + } + } + + /** + * setBit(int n) outside zero + */ + public void testSetBitZero() { + byte aBytes[] = {0}; + int aSign = 0; + int number = 0; + byte rBytes[] = {1}; + BigInteger aNumber = new BigInteger(aSign, aBytes); + BigInteger result = aNumber.setBit(number); + byte resBytes[] = new byte[rBytes.length]; + resBytes = result.toByteArray(); + for(int i = 0; i < resBytes.length; i++) { + assertTrue(resBytes[i] == rBytes[i]); + } + assertTrue("incorrect sign", result.signum() == 1); + } + + /** + * setBit(int n) outside zero + */ + public void testSetBitZeroOutside1() { + byte aBytes[] = {0}; + int aSign = 0; + int number = 95; + byte rBytes[] = {0, -128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + BigInteger aNumber = new BigInteger(aSign, aBytes); + BigInteger result = aNumber.setBit(number); + byte resBytes[] = new byte[rBytes.length]; + resBytes = result.toByteArray(); + for(int i = 0; i < resBytes.length; i++) { + assertTrue(resBytes[i] == rBytes[i]); + } + assertTrue("incorrect sign", result.signum() == 1); + } + + /** + * setBit(int n) inside a positive number + */ + public void testSetBitPositiveInside1() { + byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; + int aSign = 1; + int number = 20; + byte rBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; + BigInteger aNumber = new BigInteger(aSign, aBytes); + BigInteger result = aNumber.setBit(number); + byte resBytes[] = new byte[rBytes.length]; + resBytes = result.toByteArray(); + for(int i = 0; i < resBytes.length; i++) { + assertTrue(resBytes[i] == rBytes[i]); + } + assertTrue("incorrect sign", result.signum() == 1); + } + + /** + * setBit(int n) inside a positive number + */ + public void testSetBitPositiveInside2() { + byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; + int aSign = 1; + int number = 17; + byte rBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -13, 35, 26}; + BigInteger aNumber = new BigInteger(aSign, aBytes); + BigInteger result = aNumber.setBit(number); + byte resBytes[] = new byte[rBytes.length]; + resBytes = result.toByteArray(); + for(int i = 0; i < resBytes.length; i++) { + assertTrue(resBytes[i] == rBytes[i]); + } + assertTrue("incorrect sign", result.signum() == 1); + } + + /** + * setBit(int n) inside a positive number + */ + public void testSetBitPositiveInside3() { + byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; + int aSign = 1; + int number = 45; + byte rBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; + BigInteger aNumber = new BigInteger(aSign, aBytes); + BigInteger result = aNumber.setBit(number); + byte resBytes[] = new byte[rBytes.length]; + resBytes = result.toByteArray(); + for(int i = 0; i < resBytes.length; i++) { + assertTrue(resBytes[i] == rBytes[i]); + } + assertTrue("incorrect sign", result.signum() == 1); + } + + /** + * setBit(int n) inside a positive number + */ + public void testSetBitPositiveInside4 () { + byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; + int aSign = 1; + int number = 50; + byte rBytes[] = {1, -128, 56, 100, -2, -76, 93, 45, 91, 3, -15, 35, 26}; + BigInteger aNumber = new BigInteger(aSign, aBytes); + BigInteger result = aNumber.setBit(number); + byte resBytes[] = new byte[rBytes.length]; + resBytes = result.toByteArray(); + for(int i = 0; i < resBytes.length; i++) { + assertTrue(resBytes[i] == rBytes[i]); + } + assertTrue("incorrect sign", result.signum() == 1); + } + + /** + * setBit(int n) outside a positive number + */ + public void testSetBitPositiveOutside1() { + byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; + int aSign = 1; + int number = 150; + byte rBytes[] = {64, 0, 0, 0, 0, 0, 1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; + BigInteger aNumber = new BigInteger(aSign, aBytes); + BigInteger result = aNumber.setBit(number); + byte resBytes[] = new byte[rBytes.length]; + resBytes = result.toByteArray(); + for(int i = 0; i < resBytes.length; i++) { + assertTrue(resBytes[i] == rBytes[i]); + } + assertTrue("incorrect sign", result.signum() == 1); + } + + /** + * setBit(int n) outside a positive number + */ + public void testSetBitPositiveOutside2() { + byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; + int aSign = 1; + int number = 223; + byte rBytes[] = {0, -128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; + BigInteger aNumber = new BigInteger(aSign, aBytes); + BigInteger result = aNumber.setBit(number); + byte resBytes[] = new byte[rBytes.length]; + resBytes = result.toByteArray(); + for(int i = 0; i < resBytes.length; i++) { + assertTrue(resBytes[i] == rBytes[i]); + } + assertTrue("incorrect sign", result.signum() == 1); + } + + /** + * setBit(int n) the leftmost bit in a positive number + */ + public void testSetBitTopPositive() { + byte aBytes[] = {1, -128, 56, 100, -15, 35, 26}; + int aSign = 1; + int number = 63; + byte rBytes[] = {0, -128, 1, -128, 56, 100, -15, 35, 26}; + BigInteger aNumber = new BigInteger(aSign, aBytes); + BigInteger result = aNumber.setBit(number); + byte resBytes[] = new byte[rBytes.length]; + resBytes = result.toByteArray(); + for(int i = 0; i < resBytes.length; i++) { + assertTrue(resBytes[i] == rBytes[i]); + } + assertTrue("incorrect sign", result.signum() == 1); + } + + /** + * setBit(int n) the leftmost bit in a negative number + */ + public void testSetBitLeftmostNegative() { + byte aBytes[] = {1, -128, 56, 100, -15, 35, 26}; + int aSign = -1; + int number = 48; + byte rBytes[] = {-1, 127, -57, -101, 14, -36, -26, 49}; + BigInteger aNumber = new BigInteger(aSign, aBytes); + BigInteger result = aNumber.setBit(number); + byte resBytes[] = new byte[rBytes.length]; + resBytes = result.toByteArray(); + for(int i = 0; i < resBytes.length; i++) { + assertTrue(resBytes[i] == rBytes[i]); + } + assertTrue("incorrect sign", result.signum() == -1); + } + + /** + * setBit(int n) inside a negative number + */ + public void testSetBitNegativeInside1() { + byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; + int aSign = -1; + int number = 15; + byte rBytes[] = {-2, 127, -57, -101, 1, 75, -90, -46, -92, -4, 14, -36, -26}; + BigInteger aNumber = new BigInteger(aSign, aBytes); + BigInteger result = aNumber.setBit(number); + byte resBytes[] = new byte[rBytes.length]; + resBytes = result.toByteArray(); + for(int i = 0; i < resBytes.length; i++) { + assertTrue(resBytes[i] == rBytes[i]); + } + assertTrue("incorrect sign", result.signum() == -1); + } + + /** + * setBit(int n) inside a negative number + */ + public void testSetBitNegativeInside2() { + byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26}; + int aSign = -1; + int number = 44; + byte rBytes[] = {-2, 127, -57, -101, 1, 75, -90, -46, -92, -4, 14, -36, -26}; + BigInteger aNumber = new BigInteger(aSign, aBytes); + BigInteger result = aNumber.setBit(number); + byte resBytes[] = new byte[rBytes.length]; + resBytes = result.toByteArray(); + for(int i = 0; i < resBytes.length; i++) { + assertTrue(resBytes[i] == rBytes[i]); + } [... 431 lines stripped ...]