blob: 38f7283e8dbe6f5032a2ad03d75ea7c1e9dfc71b [file] [log] [blame]
/*
* Copyright 2009 Google Inc.
*
* 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.
*/
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with this
* work for additional information regarding copyright ownership. The ASF
* licenses this file to You 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.
*
* INCLUDES MODIFICATIONS BY GOOGLE.
*/
/**
* author Elena Semukhina
*/
package com.google.gwt.emultest.java.math;
import com.google.gwt.emultest.java.util.EmulTestBase;
import java.math.BigInteger;
/**
* Class: java.math.BigInteger Methods: intValue, longValue, toByteArray(),
* valueOf(long val), floatValue(), doubleValue().
*/
public class BigIntegerConvertTest extends EmulTestBase {
/**
* Convert a negative number to a double value. The number's bit length is
* less than 64 bits.
*/
public void testDoubleValueNegative1() {
String a = "-27467238945";
double result = -2.7467238945E10;
double aNumber = new BigInteger(a).doubleValue();
assertTrue(aNumber == result);
}
/**
* Convert a negative number to a double value. The number's bit length is
* inside [63, 1024].
*/
public void testDoubleValueNegative2() {
String a = "-2746723894572364578265426346273456972";
double result = -2.7467238945723645E36;
double aNumber = new BigInteger(a).doubleValue();
assertTrue(aNumber == result);
}
/**
* Convert a negative number to a double value. The number's bit length is
* greater than 1024.
*/
public void testDoubleValueNegativeInfinity1() {
String a = "-2746723894572364578265426346273456972283746872364768676747462342342342342342342342323423423423423423426767456345745293762384756238475634563456845634568934568347586346578648576478568456457634875673845678456786587345873645767456834756745763457863485768475678465783456702897830296720476846578634576384567845678346573465786457863";
double aNumber = new BigInteger(a).doubleValue();
assertTrue(aNumber == Double.NEGATIVE_INFINITY);
}
/**
* Convert a negative number to a double value. The exponent is 1023 and the
* mantissa is all 0s. The rounding bit is 0. The result is
* Double.NEGATIVE_INFINITY.
*/
public void testDoubleValueNegativeInfinity2() {
byte[] a = {
-1, -1, -1, -1, -1, -1, -1, -8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int aSign = -1;
double aNumber = new BigInteger(aSign, a).doubleValue();
assertTrue(aNumber == Double.NEGATIVE_INFINITY);
}
/**
* Convert a positive number to a double value. The exponent is 1023 and the
* mantissa is all 0s but the 54th bit (implicit) is 1.
*/
public void testDoubleValueNegMantissaIsZero() {
byte[] a = {
-128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0};
int aSign = -1;
double aNumber = new BigInteger(aSign, a).doubleValue();
assertTrue(aNumber == -8.98846567431158E307);
}
/**
* Convert a negative number to a double value. The exponent is 1023 and the
* mantissa is all 1s. The result is -Double.MAX_VALUE.
*/
public void testDoubleValueNegMaxValue() {
byte[] a = {
0, -1, -1, -1, -1, -1, -1, -8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1};
int aSign = -1;
double aNumber = new BigInteger(aSign, a).doubleValue();
assertTrue(aNumber == -Double.MAX_VALUE);
}
/**
* Convert a positive number to a double value. Rounding is NOT needed.
*/
public void testDoubleValueNegNotRounded() {
byte[] a = {-128, 1, 2, 3, 4, 5, -128, 23, 1, -3, -5};
int aSign = -1;
double result = -1.5474726438794828E26;
double aNumber = new BigInteger(aSign, a).doubleValue();
assertTrue(aNumber == result);
}
/**
* Convert a positive number to a double value. Rounding is needed.
*/
public void testDoubleValueNegRounded1() {
byte[] a = {-128, 1, 2, 3, 4, 5, 60, 23, 1, -3, -5};
int aSign = -1;
double result = -1.54747264387948E26;
double aNumber = new BigInteger(aSign, a).doubleValue();
assertTrue(aNumber == result);
}
/**
* Convert a positive number to a double value. Rounding is needed. The
* rounding bit is 1 and the next bit to the left is 0 but some of dropped
* bits are 1s.
*/
public void testDoubleValueNegRounded2() {
byte[] a = {-128, 1, 2, 3, 4, 5, 36, 23, 1, -3, -5};
int aSign = -1;
double result = -1.547472643879479E26;
double aNumber = new BigInteger(aSign, a).doubleValue();
assertTrue(aNumber == result);
}
/**
* Convert a positive number to a double value. The number's length is less
* than 64 bits.
*/
public void testDoubleValuePositive1() {
String a = "27467238945";
double result = 2.7467238945E10;
double aNumber = new BigInteger(a).doubleValue();
assertTrue(aNumber == result);
}
/**
* Convert a positive number to a double value. The number's bit length is
* inside [63, 1024].
*/
public void testDoubleValuePositive2() {
String a = "2746723894572364578265426346273456972";
double result = 2.7467238945723645E36;
double aNumber = new BigInteger(a).doubleValue();
assertTrue(aNumber == result);
}
/**
* Convert a positive number to a double value. The exponent is 1023 and the
* mantissa is all 1s. The rounding bit is 1. The result is
* Double.POSITIVE_INFINITY.
*/
public void testDoubleValuePositiveInfinity1() {
byte[] a = {
-1, -1, -1, -1, -1, -1, -1, -8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int aSign = 1;
double aNumber = new BigInteger(aSign, a).doubleValue();
assertTrue(aNumber == Double.POSITIVE_INFINITY);
}
/**
* Convert a positive number to a double value. The number's bit length is
* greater than 1024.
*/
public void testDoubleValuePositiveInfinity2() {
String a = "2746723894572364578265426346273456972283746872364768676747462342342342342342342342323423423423423423426767456345745293762384756238475634563456845634568934568347586346578648576478568456457634875673845678456786587345873645767456834756745763457863485768475678465783456702897830296720476846578634576384567845678346573465786457863";
double aNumber = new BigInteger(a).doubleValue();
assertTrue(aNumber == Double.POSITIVE_INFINITY);
}
/**
* Convert a positive number to a double value. The exponent is 1023 and the
* mantissa is all 0s but the 54th bit (implicit) is 1.
*/
public void testDoubleValuePosMantissaIsZero() {
byte[] a = {
-128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0};
int aSign = 1;
double result = 8.98846567431158E307;
double aNumber = new BigInteger(aSign, a).doubleValue();
assertTrue(aNumber == result);
}
/**
* Convert a positive number to a double value. The exponent is 1023 and the
* mantissa is all 1s. The rounding bit is 0. The result is Double.MAX_VALUE.
*/
public void testDoubleValuePosMaxValue() {
byte[] a = {
0, -1, -1, -1, -1, -1, -1, -8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1};
int aSign = 1;
double aNumber = new BigInteger(aSign, a).doubleValue();
assertTrue(aNumber == Double.MAX_VALUE);
}
/**
* Convert a positive number to a double value. Rounding is NOT needed.
*/
public void testDoubleValuePosNotRounded() {
byte[] a = {-128, 1, 2, 3, 4, 5, -128, 23, 1, -3, -5};
int aSign = 1;
double result = 1.5474726438794828E26;
double aNumber = new BigInteger(aSign, a).doubleValue();
assertTrue(aNumber == result);
}
/**
* Convert a positive number to a double value. Rounding is needed. The
* rounding bit is 1 and the next bit to the left is 1.
*/
public void testDoubleValuePosRounded1() {
byte[] a = {-128, 1, 2, 3, 4, 5, 60, 23, 1, -3, -5};
int aSign = 1;
double result = 1.54747264387948E26;
double aNumber = new BigInteger(aSign, a).doubleValue();
assertTrue(aNumber == result);
}
/**
* Convert a positive number to a double value. Rounding is needed. The
* rounding bit is 1 and the next bit to the left is 0 but some of dropped
* bits are 1s.
*/
public void testDoubleValuePosRounded2() {
byte[] a = {-128, 1, 2, 3, 4, 5, 36, 23, 1, -3, -5};
int aSign = 1;
double result = 1.547472643879479E26;
double aNumber = new BigInteger(aSign, a).doubleValue();
assertTrue(aNumber == result);
}
/**
* Return the double value of ZERO.
*/
public void testDoubleValueZero() {
String a = "0";
double result = 0.0;
double aNumber = new BigInteger(a).doubleValue();
assertTrue(aNumber == result);
}
/**
* Convert a negative number to a float value. The number's bit length is less
* than 32 bits.
*/
public void testFloatValueBug2482() {
String a = "2147483649";
float result = 2.14748365E9f;
float aNumber = new BigInteger(a).floatValue();
assertEquals("incorrect value", aNumber, result, 1);
}
/**
* Convert a negative number to a float value. The value is near
* Float.MAX_VALUE, but since all calculation in JS is done in double
* precision, it can't be completely accurate about passing that value
* through.
*/
public void testFloatValueNearNegMaxValue() {
byte[] a = {
0, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int aSign = -1;
float aNumber = new BigInteger(aSign, a).floatValue();
assertEquals(-3.4028235e38, aNumber, 1e31);
}
/**
* Convert a positive number to a float value. The value is near
* Float.MAX_VALUE, but since all calculation in JS is done in double
* precision, it can't be completely accurate about passing that value
* through.
*/
public void testFloatValueNearPosMaxValue() {
byte[] a = {
0, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int aSign = 1;
float aNumber = new BigInteger(aSign, a).floatValue();
assertEquals(3.4028235e38, aNumber, 1e31);
}
/**
* Convert a negative number to a float value. The number's bit length is less
* than 32 bits.
*/
public void testFloatValueNegative1() {
String a = "-27467238";
float result = -2.7467238E7f;
float aNumber = new BigInteger(a).floatValue();
assertEquals("incorrect value", result, aNumber, 1);
}
/**
* Convert a negative number to a double value. The number's bit length
* is inside [63, 1024].
*/
public void testFloatValueNegative2() {
String a = "-27467238945723645782";
float result = -2.7467239E19f;
float aNumber = new BigInteger(a).floatValue();
assertEquals("incorrect value", result, aNumber, 1e12);
}
/**
* Convert a negative number to a float value. The number's bit length is
* greater than 127.
*/
public void testFloatValueNegativeInfinity1() {
String a = "-2746723894572364578265426346273456972283746872364768676747462342342342342342342342323423423423423423426767456345745293762384756238475634563456845634568934568347586346578648576478568456457634875673845678456786587345873645767456834756745763457863485768475678465783456702897830296720476846578634576384567845678346573465786457863";
float aNumber = new BigInteger(a).floatValue();
assertEquals("incorrect value", Float.NEGATIVE_INFINITY, aNumber);
}
/**
* Convert a negative number to a float value. The exponent is 1023 and the
* mantissa is all 0s. The rounding bit is 0. The result is
* Float.NEGATIVE_INFINITY.
*/
public void testFloatValueNegativeInfinity2() {
byte[] a = {
0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1};
int aSign = -1;
float aNumber = new BigInteger(aSign, a).floatValue();
assertEquals(Float.NEGATIVE_INFINITY, aNumber);
}
/**
* Convert a positive number to a double value. The exponent is 1023 and the
* mantissa is all 0s but the 54th bit (implicit) is 1.
*/
public void testFloatValueNegMantissaIsZero() {
byte[] a = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int aSign = -1;
float aNumber = new BigInteger(aSign, a).floatValue();
assertEquals(Float.NEGATIVE_INFINITY, aNumber);
}
/**
* Convert a positive number to a float value. Rounding is NOT needed.
*/
public void testFloatValueNegNotRounded() {
byte[] a = {-128, 1, 2, 3, 4, 5, 60, 23, 1, -3, -5};
int aSign = -1;
float result = -1.5474726E26f;
float aNumber = new BigInteger(aSign, a).floatValue();
assertEquals(result, aNumber, 1e19);
}
/**
* Convert a positive number to a float value. Rounding is needed.
*/
public void testFloatValueNegRounded1() {
byte[] a = {-128, 1, -1, -4, 4, 5, 60, 23, 1, -3, -5};
int aSign = -1;
float result = -1.5475195E26f;
float aNumber = new BigInteger(aSign, a).floatValue();
assertEquals(result, aNumber, 1e19);
}
/**
* Convert a positive number to a float value. Rounding is needed. The
* rounding bit is 1 and the next bit to the left is 0 but some of dropped
* bits are 1s.
*/
public void testFloatValueNegRounded2() {
byte[] a = {-128, 1, 2, -128, 4, 5, 60, 23, 1, -3, -5};
int aSign = -1;
float result = -1.5474728E26f;
float aNumber = new BigInteger(aSign, a).floatValue();
assertEquals(result, aNumber, 1e19);
}
/**
* Convert a negative number beyond Float.MAX_VALUE, ensuring that it is
* converted to Float.NEGATIVE_INFINITY.
*/
public void testFloatValuePastNegMaxValue() {
byte[] a = {
0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1};
int aSign = -1;
float aNumber = new BigInteger(aSign, a).floatValue();
assertEquals(Float.NEGATIVE_INFINITY, aNumber);
}
/**
* Convert a positive number beyond Float.MAX_VALUE, ensuring that it is
* converted to Float.POSITIVE_INFINITY.
*/
public void testFloatValuePastPosMaxValue() {
byte[] a = {
0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1};
int aSign = 1;
float aNumber = new BigInteger(aSign, a).floatValue();
assertEquals(Float.POSITIVE_INFINITY, aNumber);
}
/**
* Convert a positive number to a float value. The number's length is less
* than 32 bits.
*/
public void testFloatValuePositive1() {
String a = "27467238";
float result = 2.7467238E7f;
float aNumber = new BigInteger(a).floatValue();
assertEquals(result, aNumber);
}
/**
* Convert a positive number to a float value. The number's bit length is
* inside [32, 127].
*/
public void testFloatValuePositive2() {
String a = "27467238945723645782";
float result = 2.7467239E19f;
float aNumber = new BigInteger(a).floatValue();
assertEquals(result, aNumber, 1e12);
}
/**
* Convert a positive number to a float value. The exponent is 1023 and the
* mantissa is all 1s. The rounding bit is 1. The result is
* Float.POSITIVE_INFINITY.
*/
public void testFloatValuePositiveInfinity1() {
byte[] a = {
0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1};
int aSign = 1;
float aNumber = new BigInteger(aSign, a).floatValue();
assertEquals(Float.POSITIVE_INFINITY, aNumber);
}
/**
* Convert a positive number to a float value. The number's bit length is
* greater than 127.
*/
public void testFloatValuePositiveInfinity2() {
String a = "274672389457236457826542634627345697228374687236476867674746234"
+ "23423423423423423423234234234234234234267674563457452937623847562384"
+ "75634563456845634568934568347586346578648576478568456457634875673845"
+ "67845678658734587364576745683475674576345786348576847567846578345670"
+ "2897830296720476846578634576384567845678346573465786457863";
float aNumber = new BigInteger(a).floatValue();
assertEquals(Float.POSITIVE_INFINITY, aNumber);
}
/**
* Convert a positive number to a float value. The exponent is 1023 and the
* mantissa is all 0s but the 54th bit (implicit) is 1.
*/
public void testFloatValuePosMantissaIsZero() {
byte[] a = {-128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int aSign = 1;
float result = 1.7014118E38f;
float aNumber = new BigInteger(aSign, a).floatValue();
assertEquals(result, aNumber, 1e31);
}
/**
* Convert a positive number to a float value. Rounding is NOT needed.
*/
public void testFloatValuePosNotRounded() {
byte[] a = {-128, 1, 2, 3, 4, 5, 60, 23, 1, -3, -5};
int aSign = 1;
float result = 1.5474726E26f;
float aNumber = new BigInteger(aSign, a).floatValue();
assertEquals(result, aNumber, 1e19);
}
/**
* Convert a positive number to a float value. Rounding is needed. The
* rounding bit is 1 and the next bit to the left is 1.
*/
public void testFloatValuePosRounded1() {
byte[] a = {-128, 1, -1, -4, 4, 5, 60, 23, 1, -3, -5};
int aSign = 1;
float result = 1.5475195E26f;
float aNumber = new BigInteger(aSign, a).floatValue();
assertEquals(result, aNumber, 1e19);
}
/**
* Convert a positive number to a float value. Rounding is needed. The
* rounding bit is 1 and the next bit to the left is 0 but some of dropped
* bits are 1s.
*/
public void testFloatValuePosRounded2() {
byte[] a = {-128, 1, 2, -128, 4, 5, 60, 23, 1, -3, -5};
int aSign = 1;
float result = 1.5474728E26f;
float aNumber = new BigInteger(aSign, a).floatValue();
assertEquals(result, aNumber, 1e19);
}
/**
* Return the float value of ZERO.
*/
public void testFloatValueZero() {
String a = "0";
float result = 0.0f;
float aNumber = new BigInteger(a).floatValue();
assertEquals(result, aNumber);
}
/**
* Convert a negative BigInteger to an integer value. The low digit is
* negative.
*/
public void testIntValueNegative1() {
byte aBytes[] = {12, 56, 100, -2, -76, -128, 45, 91, 3};
int sign = -1;
int resInt = 2144511229;
int aNumber = new BigInteger(sign, aBytes).intValue();
assertEquals(resInt, aNumber);
}
/**
* Convert a negative BigInteger to an integer value. The low digit is
* negative.
*/
public void testIntValueNegative2() {
byte aBytes[] = {-12, 56, 100};
int result = -771996;
int aNumber = new BigInteger(aBytes).intValue();
assertEquals(result, aNumber);
}
/**
* Convert a negative BigInteger to an integer value. The low digit is
* positive.
*/
public void testIntValueNegative3() {
byte aBytes[] = {12, 56, 100, -2, -76, 127, 45, 91, 3};
int sign = -1;
int resInt = -2133678851;
int aNumber = new BigInteger(sign, aBytes).intValue();
assertEquals(resInt, aNumber);
}
/**
* Convert a positive BigInteger to an integer value. The low digit is
* positive
*/
public void testIntValuePositive1() {
byte aBytes[] = {12, 56, 100, -2, -76, 89, 45, 91, 3};
int resInt = 1496144643;
int aNumber = new BigInteger(aBytes).intValue();
assertEquals(resInt, aNumber);
}
/**
* Convert a positive BigInteger to an integer value. The low digit is
* positive
*/
public void testIntValuePositive2() {
byte aBytes[] = {12, 56, 100};
int resInt = 800868;
int aNumber = new BigInteger(aBytes).intValue();
assertEquals(resInt, aNumber);
}
/**
* Convert a positive BigInteger to an integer value. The low digit is
* negative.
*/
public void testIntValuePositive3() {
byte aBytes[] = {56, 13, 78, -12, -5, 56, 100};
int sign = 1;
int resInt = -184862620;
int aNumber = new BigInteger(sign, aBytes).intValue();
assertEquals(resInt, aNumber);
}
/**
* Convert a number to a negative long value The BigInteger is longer than
* int.
*/
public void testLongValueNegative1() {
byte aBytes[] = {12, -1, 100, -2, -76, -128, 45, 91, 3};
long result = -43630045168837885L;
long aNumber = new BigInteger(aBytes).longValue();
assertEquals(result, aNumber);
}
/**
* Convert a number to a negative long value The number fits in a long.
*/
public void testLongValueNegative2() {
byte aBytes[] = {-12, 56, 100, 45, -101, 45, 98};
long result = -3315696807498398L;
long aNumber = new BigInteger(aBytes).longValue();
assertEquals(result, aNumber);
}
/**
* Convert a BigInteger to a positive long value The BigInteger is longer than
* int.
*/
public void testLongValuePositive1() {
byte aBytes[] = {12, 56, 100, -2, -76, 89, 45, 91, 3, 120, -34, -12, 45, 98};
long result = 3268209772258930018L;
long aNumber = new BigInteger(aBytes).longValue();
assertEquals(result, aNumber);
}
/**
* Convert a number to a positive long value The number fits in a long.
*/
public void testLongValuePositive2() {
byte aBytes[] = {12, 56, 100, 18, -105, 34, -18, 45};
long result = 880563758158769709L;
long aNumber = new BigInteger(aBytes).longValue();
assertEquals(result, aNumber);
}
/**
* valueOf (long val): convert Integer.MAX_VALUE to a BigInteger.
*/
public void testValueOfIntegerMax() {
long longVal = Integer.MAX_VALUE;
BigInteger aNumber = BigInteger.valueOf(longVal);
byte rBytes[] = {127, -1, -1, -1};
byte resBytes[] = new byte[rBytes.length];
resBytes = aNumber.toByteArray();
for (int i = 0; i < resBytes.length; i++) {
assertEquals("Byte " + i, rBytes[i], resBytes[i]);
}
assertEquals("incorrect sign", 1, aNumber.signum());
}
/**
* valueOf (long val): convert Integer.MIN_VALUE to a BigInteger.
*/
public void testValueOfIntegerMin() {
long longVal = Integer.MIN_VALUE;
BigInteger aNumber = BigInteger.valueOf(longVal);
byte rBytes[] = {-128, 0, 0, 0};
byte resBytes[] = new byte[rBytes.length];
resBytes = aNumber.toByteArray();
for (int i = 0; i < resBytes.length; i++) {
assertEquals("Byte " + i, rBytes[i], resBytes[i]);
}
assertEquals("incorrect sign", -1, aNumber.signum());
}
/**
* valueOf (long val): convert Long.MAX_VALUE to a BigInteger.
*/
public void testValueOfLongMax() {
long longVal = Long.MAX_VALUE;
BigInteger aNumber = BigInteger.valueOf(longVal);
byte rBytes[] = {127, -1, -1, -1, -1, -1, -1, -1};
byte resBytes[] = new byte[rBytes.length];
resBytes = aNumber.toByteArray();
for (int i = 0; i < resBytes.length; i++) {
assertEquals("Byte " + i, rBytes[i], resBytes[i]);
}
assertEquals("incorrect sign", 1, aNumber.signum());
}
/**
* valueOf (long val): convert Long.MIN_VALUE to a BigInteger.
*/
public void testValueOfLongMin() {
long longVal = Long.MIN_VALUE;
BigInteger aNumber = BigInteger.valueOf(longVal);
byte rBytes[] = {-128, 0, 0, 0, 0, 0, 0, 0};
byte resBytes[] = new byte[rBytes.length];
resBytes = aNumber.toByteArray();
for (int i = 0; i < resBytes.length; i++) {
assertEquals("Byte " + i, rBytes[i], resBytes[i]);
}
assertEquals("incorrect sign", -1, aNumber.signum());
}
/**
* valueOf (long val): convert a negative long value to a BigInteger.
*/
public void testValueOfLongNegative1() {
long longVal = -268209772258930018L;
BigInteger aNumber = BigInteger.valueOf(longVal);
byte rBytes[] = {-4, 71, 32, -94, 23, 55, -46, -98};
byte resBytes[] = new byte[rBytes.length];
resBytes = aNumber.toByteArray();
for (int i = 0; i < resBytes.length; i++) {
assertEquals("Byte " + i, rBytes[i], resBytes[i]);
}
assertEquals("incorrect sign", -1, aNumber.signum());
}
/**
* valueOf (long val): convert a negative long value to a BigInteger. The long
* value fits in integer.
*/
public void testValueOfLongNegative2() {
long longVal = -58930018L;
BigInteger aNumber = BigInteger.valueOf(longVal);
byte rBytes[] = {-4, 124, -52, -98};
byte resBytes[] = new byte[rBytes.length];
resBytes = aNumber.toByteArray();
for (int i = 0; i < resBytes.length; i++) {
assertEquals("Byte " + i, rBytes[i], resBytes[i]);
}
assertEquals("incorrect sign", -1, aNumber.signum());
}
/**
* valueOf (long val): convert a positive long value to a BigInteger.
*/
public void testValueOfLongPositive1() {
long longVal = 268209772258930018L;
BigInteger aNumber = BigInteger.valueOf(longVal);
byte rBytes[] = {3, -72, -33, 93, -24, -56, 45, 98};
byte resBytes[] = new byte[rBytes.length];
resBytes = aNumber.toByteArray();
for (int i = 0; i < resBytes.length; i++) {
assertEquals("Byte " + i, rBytes[i], resBytes[i]);
}
assertEquals("incorrect sign", 1, aNumber.signum());
}
/**
* valueOf (long val): convert a positive long value to a BigInteger. The long
* value fits in integer.
*/
public void testValueOfLongPositive2() {
long longVal = 58930018L;
BigInteger aNumber = BigInteger.valueOf(longVal);
byte rBytes[] = {3, -125, 51, 98};
byte resBytes[] = new byte[rBytes.length];
resBytes = aNumber.toByteArray();
for (int i = 0; i < resBytes.length; i++) {
assertEquals("Byte " + i, rBytes[i], resBytes[i]);
}
assertEquals("incorrect sign", 1, aNumber.signum());
}
/**
* valueOf (long val): convert a zero long value to a BigInteger.
*/
public void testValueOfLongZero() {
long longVal = 0L;
BigInteger aNumber = BigInteger.valueOf(longVal);
byte rBytes[] = {0};
byte resBytes[] = new byte[rBytes.length];
resBytes = aNumber.toByteArray();
for (int i = 0; i < resBytes.length; i++) {
assertEquals("Byte " + i, rBytes[i], resBytes[i]);
}
assertEquals("incorrect sign", 0, aNumber.signum());
}
}