/* Copyright (C) 1999, 2002 Hewlett-Packard Company
This file is part of Mauve.
Mauve is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
Mauve is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Mauve; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
// Tags: JDK1.0
package gnu.testlet.java.lang.Double;
import gnu.testlet.Testlet;
import gnu.testlet.TestHarness;
public class DoubleTest implements Testlet
{
public int getExpectedPass() { return 106; }
public int getExpectedFail() { return 0; }
public int getExpectedKnownFail() { return 0; }
protected static TestHarness harness;
public void test_Basics()
{
double min1 = 5e-324;
double min2 = Double.MIN_VALUE;
double max1 = 1.7976931348623157e+308;
double max2 = Double.MAX_VALUE;
double ninf1 = -1.0/0.0;
double ninf2 = Double.NEGATIVE_INFINITY;
double pinf1 = 1.0/0.0;
double pinf2 = Double.POSITIVE_INFINITY;
Double nan1 = new Double(0.0/0.0);
Double nan2 = new Double(Double.NaN);
if ( min1 != min2 ) {
harness.fail("test_Basics - 1a");
System.out.println("Expected: " + min1);
System.out.println("Got: " + min2);
}
if ( max1 != max2 ) {
harness.fail("test_Basics - 1b");
System.out.println("Expected: " + max1);
System.out.println("Got: " + max2);
}
if (ninf1 != ninf2) {
harness.fail("test_Basics - 1c");
System.out.println("Expected: " + ninf1);
System.out.println("Got: " + ninf2);
}
if (pinf1 != pinf2) {
harness.fail("test_Basics - 1d");
System.out.println("Expected: " + pinf1);
System.out.println("Got: " + pinf2);
}
if (!nan2.equals(nan1) ) {
harness.fail("test_Basics CYGNUS: NaN.equals - 1e");
System.out.println("Expected: " + nan1);
System.out.println("Got: " + nan2);
}
Double i1 = new Double(100.5);
harness.check(!( i1.doubleValue() != 100.5 ),
"test_Basics - 2" );
harness.check(!( (new Double(3.4)).doubleValue() != 3.4 ),
"test_Basics - 6" );
Double nan = new Double(Double.NaN );
harness.check(!( !nan.isNaN()),
"test_Basics - 7" );
harness.check(!( (new Double(10.0f)).isNaN()),
"test_Basics - 8" );
harness.check(!( !Double.isNaN( Double.NaN )),
"test_Basics - 9" );
harness.check(!( !(new Double(Double.POSITIVE_INFINITY)).isInfinite()),
"test_Basics - 10" );
harness.check(!( !(new Double(Double.NEGATIVE_INFINITY)).isInfinite()),
"test_Basics - 11" );
harness.check(!( !( Double.isInfinite( Double.NEGATIVE_INFINITY))),
"test_Basics - 12" );
harness.check(!( !( Double.isInfinite( Double.POSITIVE_INFINITY))),
"test_Basics - 13" );
harness.check(!( 0.0 - 0.0 != 0.0),
"test_Basics - 14" );
harness.check(!( 0.0 + 0.0 != 0.0),
"test_Basics - 15" );
harness.check(!( 0.0 + -0.0 != 0.0),
"test_Basics - 16" );
harness.check(!( 0.0 - -0.0 != 0.0),
"test_Basics - 17" );
harness.check(!( -0.0 - 0.0 != -0.0),
"test_Basics - 18" );
harness.check(!( -0.0 + 0.0 != 0.0),
"test_Basics - 19" );
harness.check(!( -0.0 + -0.0 != -0.0),
"test_Basics - 20" );
harness.check(!( -0.0 - -0.0 != 0.0),
"test_Basics - 21" );
harness.check(!( !"0.0".equals(0.0 - 0.0 +"" )),
"test_Basics - 22" );
}
public void test_toString()
{
harness.check(!( !( new Double(123.0)).toString().equals("123.0")),
"test_toString - 1" );
harness.check(!( !( new Double(-44.5343)).toString().equals("-44.5343")),
"test_toString - 2" );
harness.check(!( !Double.toString( 23.04 ).equals ("23.04" )),
"test_toString - 3" );
harness.check(!( !Double.toString( Double.NaN ).equals ("NaN" )),
"test_toString - 4" );
harness.check(!( !Double.toString( Double.POSITIVE_INFINITY ).equals ("Infinity" )),
"test_toString - 5" );
harness.check(!( !Double.toString( Double.NEGATIVE_INFINITY ).equals ("-Infinity" )),
"test_toString - 6" );
harness.check(!( !Double.toString( 0.0 ).equals ("0.0" )),
"test_toString - 7" );
String str;
str = Double.toString( -0.0 );
harness.check(!( !str.equals ("-0.0" )),
"test_toString - 8" );
str = Double.toString( -9412128.34 );
harness.check(!( !str.equals ("-9412128.34" )),
"test_toString - 9" );
// The following case fails for some Sun JDKs (e.g. 1.3.1
// and 1.4.0) where toString(0.001) returns "0.0010". This
// is contrary to the JDK 1.4 javadoc. This particular
// case has been noted as a comment to Sun Java bug #4642835
/*
str = Double.toString( 0.001 );
if ( !Double.toString( 0.001 ).equals ("0.001" )) {
harness.fail("test_toString - 10" );
System.out.println("Expected: " + "0.001");
System.out.println("Got: " + Double.toString(0.001));
}
*/
str = Double.toString( 1e4d );
if ( !Double.toString( 1e4d ).equals ("10000.0" )) {
harness.fail("test_toString - 11" );
System.out.println("Expected: " + "10000.0");
System.out.println("Got: " + Double.toString(1e4d));
}
str = Double.toString(Double.MIN_VALUE);
if ( !str.equals("4.9E-324")) {
harness.fail("test_toString - 15" );
harness.debug("Expected: 4.9E-324");
harness.debug("Got: " + str);
}
/*
str = Double.toString(-23.43E33);
if ( !(new Double( str)).equals(new Double(-23.43E33)))
harness.fail("test_toString - 16" );
*/
}
public void test_equals()
{
Double i1 = new Double(2334.34E4);
Double i2 = new Double(-2334.34E4);
harness.check(!( !i1.equals( new Double(2334.34E4))),
"test_equals - 1" );
harness.check(!( !i2.equals( new Double(-2334.34E4))),
"test_equals - 2" );
harness.check(!( i1.equals( i2 )),
"test_equals - 3" );
harness.check(!( i1.equals(null)),
"test_equals - 4" );
double n1 = Double.NaN;
double n2 = Double.NaN;
harness.check(!( n1 == n2 ),
"test_equals - 5" );
Double flt1 = new Double( Double.NaN);
Double flt2 = new Double( Double.NaN);
harness.check(!( !flt1.equals(flt2)),
"test_equals CYGNUS: NaN.equals - 6" );
harness.check(!( 0.0 != -0.0 ),
"test_equals - 7" );
Double pzero = new Double( 0.0 );
Double nzero = new Double( -0.0 );
harness.check(!( pzero.equals(nzero) ),
"test_equals CYGNUS: Double.equals - 8" );
}
public void test_hashCode( )
{
Double flt1 = new Double(3.4028235e+38);
long lng1 = Double.doubleToLongBits( 3.4028235e+38);
harness.check(!( flt1.hashCode() != (int) ( lng1^(lng1>>>32)) ),
"test_hashCode - 1");
Double flt2 = new Double( -2343323354.0 );
long lng2 = Double.doubleToLongBits( -2343323354.0 );
harness.check(!( flt2.hashCode() != (int) ( lng2^(lng2>>>32)) ),
"test_hashCode - 2");
}
public void test_intValue( )
{
Double b1 = new Double(3.4e+32);
Double b2 = new Double(-23.45);
int i1 = b1.intValue();
int i2 = b2.intValue();
harness.check(!( i1 != (int) 3.4e+32),
"test_intValue CYGNUS: Float to int conversions - 1" );
harness.check(!( i2 != (int) -23.45 ),
"test_intValue - 2" );
Double b3 = new Double(3000.54);
harness.check(!( b3.intValue() != 3000 ),
"test_intValue - 3" );
Double b4 = new Double(32735.3249);
harness.check(!( b4.intValue() != 32735 ),
"test_intValue - 4" );
Double b5 = new Double(-32735.3249);
harness.check(!( b5.intValue() != -32735 ),
"test_intValue - 5" );
Double b6 = new Double(-32735.3249);
harness.check(!( b6.intValue() != -32735 ),
"test_intValue - 6" );
Double b7 = new Double(0.0);
harness.check(!( b7.intValue() != 0 ),
"test_intValue - 7" );
}
public void test_longValue( )
{
Double b1 = new Double(3.4e+32);
Double b2 = new Double(-23.45);
harness.check(!( b1.longValue() != (long) 3.4e+32),
"test_longValue CYGNUS: Float to int conversions - 1" );
harness.check(!( b2.longValue() != (long) -23.45 ),
"test_longValue - 2" );
}
public void test_DoubleValue( )
{
Double b1 = new Double(3276.34);
Double b2 = new Double(-3276.32);
harness.check(!( b1.doubleValue() != 3276.34 ),
"test_DoubleValue - 1" );
harness.check(!( b2.doubleValue() != -3276.32 ),
"test_DoubleValue - 2" );
}
public void test_doubleValue( )
{
Double b1 = new Double(0.0);
Double b2 = new Double(30.0);
harness.check(!( b1.doubleValue() != 0.0 ),
"test_doubleValue - 1" );
harness.check(!( b2.doubleValue() != 30.0 ),
"test_doubleValue - 2" );
}
public void test_floatValue( )
{
Double b1 = new Double(0.0);
Double b2 = new Double(30.0);
harness.check(!( b1.floatValue() != 0.0f ),
"test_floatValue - 1" );
harness.check(!( b2.floatValue() != 30.0f ),
"test_floatValue - 2" );
}
public void test_valueOf( )
{
try {
Double.valueOf(null);
harness.fail("test_valueOf - 1" );
}
catch ( NumberFormatException nfe )
{harness.check(false, "test_valueOf null should throw NullPointerException");}
catch ( NullPointerException e )
{harness.check(true, "test_valueOf null");}
try {
Double.valueOf("Kona");
harness.fail("test_valueOf - 2" );
}catch( NumberFormatException e) {}
harness.check(!( Double.valueOf( "3.4e+32" ).doubleValue() != 3.4e+32 ),
"test_valueOf - 3" );
harness.check(!( Double.valueOf(" -23.45 ").doubleValue() != -23.45 ),
"test_valueOf - 4" );
}
public void test_parseDouble( )
{
try {
Double.parseDouble(null);
harness.fail("test_parseDouble - 1" );
}
catch ( NumberFormatException nfe )
{harness.check(false, "test_parseDouble null should throw NullPointerException");}
catch ( NullPointerException e )
{harness.check(true, "test_parseDouble null");}
try {
Double.parseDouble("Kona");
harness.fail("test_parseDouble - 2" );
}catch( NumberFormatException e) {}
harness.check(!( Double.parseDouble( "3.4e+32" ) != 3.4e+32 ),
"test_parseDouble - 3" );
harness.check(!( Double.parseDouble(" -23.45 ") != -23.45 ),
"test_parseDouble - 4" );
}
public void test_doubleToLongBits()
{
harness.check(!( Double.doubleToLongBits( Double.POSITIVE_INFINITY ) != 0x7ff0000000000000L ),
"test_doubleToLongBits - 1" );
harness.check(!( Double.doubleToLongBits( Double.NEGATIVE_INFINITY ) != 0xfff0000000000000L ),
"test_doubleToLongBits - 2" );
long nanval = Double.doubleToLongBits( Double.NaN );
harness.check(!( nanval != 0x7ff8000000000000L ),
"test_doubleToLongBits CYGNUS: NaN.doubleToLongBits" );
long i1 = Double.doubleToLongBits(3.4e+32f);
long i2 = Double.doubleToLongBits(-34.56f);
long sign1 = i1 & 0x8000000000000000L ;
long sign2 = i2 & 0x8000000000000000L ;
long exp1 = i1 & 0x7ff0000000000000L ;
long exp2 = i2 & 0x7ff0000000000000L ;
long man1 = i1 & 0x000fffffffffffffL ;
long man2 = i2 & 0x000fffffffffffffL ;
harness.check(!(sign1 != 0 ),
"test_doubleToLongBits - 4" );
harness.check(!( sign2 != 0x8000000000000000L ),
"test_doubleToLongBits - 5" );
harness.check(!( exp1 != 5093571178556030976L ),
"test_doubleToLongBits - 6" );
harness.check(!( exp2 != 4629700416936869888L ),
"test_doubleToLongBits - 7" );
harness.check(!( man1 != 214848222789632L ),
"test_doubleToLongBits - 8" );
harness.check(!( man2 != 360288163463168L ),
"test_doubleToLongBits - 9" );
}
public void test_longBitsToDouble( )
{
harness.check(!( Double.longBitsToDouble( 0x7ff0000000000000L) != Double.POSITIVE_INFINITY ),
"test_longBitsToDouble - 1" );
harness.check(!( Double.longBitsToDouble( 0xfff0000000000000L ) != Double.NEGATIVE_INFINITY ),
"test_longBitsToDouble - 2" );
harness.check(!( !Double.isNaN(Double.longBitsToDouble( 0xfff8000000000000L ))),
"test_longBitsToDouble - 3" );
harness.check(!( !Double.isNaN(Double.longBitsToDouble( 0x7ffffff000000000L ))),
"test_longBitsToDouble - 4" );
harness.check(!( !Double.isNaN(Double.longBitsToDouble( 0xfff8000020000001L ))),
"test_longBitsToDouble - 5" );
harness.check(!( !Double.isNaN(Double.longBitsToDouble( 0xfffffffffffffff1L ))),
"test_longBitsToDouble - 6" );
double fl1 = Double.longBitsToDouble( 0x34343f33 );
if ( Double.doubleToLongBits(fl1) != 0x34343f33 ) {
harness.fail("test_longBitsToDouble - 7" );
System.out.println("Expected: " + Long.toString(0x34343f33));
System.out.println("Got: " + Long.toString(Double.doubleToLongBits(fl1)));
}
harness.check(!( Double.doubleToLongBits( Double.longBitsToDouble(0x33439943)) != 0x33439943 ),
"test_longBitsToDouble - 8");
}
public void check_remainder( double val, double val1 ,
double ret , int errno )
{
double res = val % val1;
harness.check(!( res < ret - 0.001 || res > ret + 0.001 ),
"test_remainder " + errno );
}
public void check_remainder_NaN( double val, double val1 ,
int errno )
{
double res = val % val1;
if (!Double.isNaN(res)) {
harness.fail("test_remainder " +
errno);
}
}
public void test_remainder( )
{
check_remainder(15.2 , 1.0 , 0.2, 1 );
check_remainder(2345.2432 , 1.2 ,0.44319999999997 , 2 );
check_remainder(20.56 , 1.87 ,1.8600000000000 , 3 );
check_remainder(0.0 , 1.2 , 0.00000000000000 , 4 );
check_remainder(1000 , 10 , 0.00000000000000 , 5 );
check_remainder(234.332 , 134.34 , 99.992000000000 , 6 );
check_remainder(1.0 , 1.0, 0.0 , 7 );
check_remainder(45.0 , 5.0, 0.0 , 8 );
check_remainder(1.25 , 0.50 , 0.25 , 9 );
check_remainder(12345.678, 1234.5678, 1234.5678000000 , 10 );
check_remainder(Double.MAX_VALUE , Double.MIN_VALUE , 0.00000000000000 , 11 );
check_remainder(0.0 , 999.99, 0.00000000000000 , 12 );
check_remainder(123.0 , 25.0 , 23.0 , 13 );
check_remainder(15.0 , 1.5 , 0.00 , 14 );
check_remainder_NaN(Double.NaN, 1.5 , 15 );
check_remainder_NaN(1.5, Double.NaN, 16 );
check_remainder_NaN(Double.NaN, 0, 17 );
check_remainder_NaN(0, Double.NaN, 18 );
check_remainder_NaN(Double.POSITIVE_INFINITY, 1.5, 19 );
check_remainder_NaN(Double.NEGATIVE_INFINITY, 1.5, 20 );
check_remainder_NaN(1.5, 0, 21 );
check_remainder_NaN(Double.POSITIVE_INFINITY, 0, 22 );
check_remainder_NaN(Double.NEGATIVE_INFINITY, 0, 23 );
// EJWcr00505
check_remainder(15.0 , Double.POSITIVE_INFINITY, 15.0 , 24 );
check_remainder(-15.0 , Double.POSITIVE_INFINITY, -15.0 , 25 );
check_remainder(0.0 , Double.POSITIVE_INFINITY, 0.0 , 26 );
check_remainder(-0.0 , Double.POSITIVE_INFINITY, -0.0 , 27 );
check_remainder(0.1 , Double.POSITIVE_INFINITY, 0.1 , 28 );
check_remainder(-0.1 , Double.POSITIVE_INFINITY, -0.1 , 29 );
check_remainder(15.0 , Double.NEGATIVE_INFINITY, 15.0 , 30 );
check_remainder(-15.0 , Double.NEGATIVE_INFINITY, -15.0 , 31 );
check_remainder(0.0 , Double.NEGATIVE_INFINITY, 0.0 , 32 );
check_remainder(-0.0 , Double.NEGATIVE_INFINITY, -0.0 , 33 );
check_remainder(0.1 , Double.NEGATIVE_INFINITY, 0.1 , 34 );
check_remainder(-0.1 , Double.NEGATIVE_INFINITY, -0.1 , 35 );
}
public void test_shortbyteValue()
{
Double d1 = new Double( 123.35 );
Double d2 = new Double( 400.35 );
Double d3 = new Double(0.0 );
harness.check(!( d1.shortValue() != 123 ),
"test_shortbyteValue - 1" );
harness.check(!( d2.shortValue() != 400 ),
"test_shortbyteValue - 2" );
harness.check(!( d3.shortValue() != 0 ),
"test_shortbyteValue - 3" );
harness.check(!( d1.byteValue() != 123 ),
"test_shortbyteValue - 4" );
harness.check(!( d2.byteValue() != (byte) 400 ),
"test_shortbyteValue - 5" );
harness.check(!( d3.byteValue() != 0 ),
"test_shortbyteValue - 6" );
}
public void test_neg() {
double zero = 0.0;
String zero1 = String.valueOf(zero);
if (!zero1.equals("0.0")) {
harness.fail("test_neg - 1");
}
zero = -zero;
String zero2 = String.valueOf(zero);
if (!zero2.equals("-0.0")) {
harness.fail("test_neg - 2");
System.out.println("Expected -0.0, got: " + zero2);
}
zero = -zero;
String zero3 = String.valueOf(zero);
if (!zero3.equals("0.0")) {
harness.fail("test_neg - 3");
}
double nonzero = -21.23;
String nonzero1 = String.valueOf(nonzero);
if (!nonzero1.equals("-21.23")) {
harness.fail("test_neg - 4");
}
nonzero = -nonzero;
String nonzero2 = String.valueOf(nonzero);
if (!nonzero2.equals("21.23")) {
harness.fail("test_neg - 5");
}
nonzero = -nonzero;
String nonzero3 = String.valueOf(nonzero);
if (!nonzero3.equals("-21.23")) {
harness.fail("test_neg - 6");
}
}
public void testall()
{
test_Basics();
test_remainder();
test_toString();
test_equals();
test_hashCode();
test_intValue();
test_longValue();
test_DoubleValue();
test_doubleValue();
test_floatValue();
test_shortbyteValue();
test_valueOf();
test_parseDouble();
test_doubleToLongBits();
test_longBitsToDouble();
test_neg();
}
public void test (TestHarness the_harness)
{
harness = the_harness;
testall ();
}
}