/*
* This file is part of the Jikes RVM project (http://jikesrvm.org).
*
* This file is licensed to You under the Eclipse Public License (EPL);
* You may not use this file except in compliance with the License. You
* may obtain a copy of the License at
*
* http://www.opensource.org/licenses/eclipse-1.0.php
*
* See the COPYRIGHT.txt file distributed with this work for information
* regarding copyright ownership.
*/
package test.org.jikesrvm.basic.core.bytecode;
class TestArithmetic {
private static int int_3 = -3;
private static int int1 = 1;
private static int int3 = 3;
private static int int5 = 5;
private static int int33 = 33;
private static int int65 = 65;
private static long long_3 = -3;
private static long long_1 = -1;
private static long long0 = 0;
private static long long2 = 2;
private static long long10000000000 = 10000000000L;
private static long long0x0110000000000011 = 0x0110000000000011L;
private static long long0x1010000000000101 = 0x1010000000000101L;
private static long long0xBEEFBEEFCAFEBABE = 0xBEEFBEEFCAFEBABEL;
public static void main(String[] args) {
System.out.println();
System.out.println("-- itest --");
itest();
System.out.println();
System.out.println("-- ltest --");
ltest();
System.out.println();
System.out.println("-- ftest --");
ftest();
System.out.println();
System.out.println("-- dtest --");
dtest();
System.out.println();
System.out.println("-- nanTestFloat --");
nanTestFloat();
System.out.println();
System.out.println("-- nanTestDouble --");
nanTestDouble();
System.out.println();
System.out.println("-- remTest --");
remTest();
}
private static void itest() {
int a = int3;
System.out.print("Expected: 4 Actual: ");
System.out.println(a + 1); // iadd
System.out.print("Expected: 2 Actual: ");
System.out.println(a - 1); // isub
System.out.print("Expected: 9 Actual: ");
System.out.println(a * 3); // imul
System.out.print("Expected: 1 Actual: ");
System.out.println(a / 2); // idiv
System.out.print("Expected: 1 Actual: ");
System.out.println(a % 2); // irem
System.out.print("Expected: -3 Actual: ");
System.out.println(-a); // ineg
System.out.print("Expected: 4 Actual: ");
System.out.println(++a); // iinc
a = int_3;
System.out.print("Expected: -2 Actual: ");
System.out.println(a + 1); // iadd
System.out.print("Expected: -4 Actual: ");
System.out.println(a - 1); // isub
System.out.print("Expected: -9 Actual: ");
System.out.println(a * 3); // imul
System.out.print("Expected: -1 Actual: ");
System.out.println(a / 2); // idiv
System.out.print("Expected: -1 Actual: ");
System.out.println(a % 2); // irem
System.out.print("Expected: 3 Actual: ");
System.out.println(-a); // ineg
System.out.print("Expected: -2 Actual: ");
System.out.println(++a); // iinc
a = int3; // 0x00000011
int b = int5; // 0x00000101
System.out.print("Expected: 1 Actual: ");
System.out.println(a & b); // iand
System.out.print("Expected: 7 Actual: ");
System.out.println(a | b); // ior
System.out.print("Expected: 6 Actual: ");
System.out.println(a ^ b); // ixor
a = int_3; // 0xfffffffd;
System.out.print("Expected: -6 Actual: ");
System.out.println(a << 1); // ishl
System.out.print("Expected: -2 Actual: ");
System.out.println(a >> 1); // ishr
System.out.print("Expected: 2147483646 Actual: ");
System.out.println(a >>> 1); // iushr
// funny Java shift cases
a = int1;
System.out.print("Expected: 1 Actual: ");
System.out.println(a << 32);
System.out.print("Expected: 0 Actual: ");
System.out.println((a << 16) << 16);
System.out.print("Expected: 2 Actual: ");
System.out.println(a << 33);
System.out.print("Expected: -2147483648 Actual: ");
System.out.println(a << -1);
System.out.print("Expected: 1 Actual: ");
System.out.println(a << -32);
System.out.print("Expected: -2147483648 Actual: ");
System.out.println(a << -33);
System.out.print("Expected: 2 Actual: ");
System.out.println(1 << int33);
System.out.print("Expected: 1 Actual: ");
System.out.println(a >> 32);
System.out.print("Expected: 0 Actual: ");
System.out.println((a >> 16) >> 16);
System.out.print("Expected: 0 Actual: ");
System.out.println(a >> 33);
System.out.print("Expected: 0 Actual: ");
System.out.println(a >> -1);
System.out.print("Expected: 1 Actual: ");
System.out.println(a >> -32);
System.out.print("Expected: 0 Actual: ");
System.out.println(a >> -33);
System.out.print("Expected: -2 Actual: ");
System.out.println(-4 >> int33);
System.out.print("Expected: 1 Actual: ");
System.out.println(a >>> 32);
System.out.print("Expected: 0 Actual: ");
System.out.println((a >>> 16) >>> 16);
System.out.print("Expected: 0 Actual: ");
System.out.println(a >>> 33);
System.out.print("Expected: 0 Actual: ");
System.out.println(a >>> -1);
System.out.print("Expected: 1 Actual: ");
System.out.println(a >>> -32);
System.out.print("Expected: 0 Actual: ");
System.out.println(a >>> -33);
System.out.print("Expected: 2147483646 Actual: ");
System.out.println(-4 >>> int33);
// IA32 bit test patterns
System.out.print("Expected: true Actual: ");
System.out.println(((1 << int1) & int3) != 0);
System.out.print("Expected: false Actual: ");
System.out.println(((1 << int1) & int3) == 0);
System.out.print("Expected: true Actual: ");
System.out.println(((1 << int33) & int3) != 0);
System.out.print("Expected: true Actual: ");
System.out.println((int3 & (1 << int1)) != 0);
System.out.print("Expected: false Actual: ");
System.out.println((int3 & (1 << int1)) == 0);
System.out.print("Expected: true Actual: ");
System.out.println((int3 & (1 << int33)) != 0);
System.out.print("Expected: taken Actual: ");
if (((1 << int1) & int3) != 0) {
System.out.println("taken");
}
System.out.print("Expected: true Actual: ");
System.out.println(((int3 >> int1) & 1) == 1);
System.out.print("Expected: false Actual: ");
System.out.println(((int3 >> int1) & 1) != 1);
System.out.print("Expected: true Actual: ");
System.out.println(((int3 >> int1) & 1) != 0);
System.out.print("Expected: false Actual: ");
System.out.println(((int3 >> int1) & 1) == 0);
System.out.print("Expected: true Actual: ");
System.out.println(((int3 >> int33) & 1) == 1);
System.out.print("Expected: taken Actual: ");
if (((int3 >> int1) & 1) != 0) {
System.out.println("taken");
}
System.out.print("Expected: true Actual: ");
System.out.println(((int3 >>> int1) & 1) == 1);
System.out.print("Expected: false Actual: ");
System.out.println(((int3 >>> int1) & 1) != 1);
System.out.print("Expected: true Actual: ");
System.out.println(((int3 >>> int1) & 1) != 0);
System.out.print("Expected: false Actual: ");
System.out.println(((int3 >>> int1) & 1) == 0);
System.out.print("Expected: true Actual: ");
System.out.println(((int3 >>> int33) & 1) == 1);
System.out.print("Expected: taken Actual: ");
if (((int3 >>> int1) & 1) == 1) {
System.out.println("taken");
}
// Rotate tests
System.out.print("Expected: 10 Actual: ");
System.out.println((int5 << 1)|(int5 >>> -1)); // Rotate left by 1
System.out.print("Expected: 10 Actual: ");
System.out.println((int5 >>> -1)|(int5 << 1)); // Rotate left by 1
System.out.print("Expected: -2147483646 Actual: ");
System.out.println((int5 << -1)|(int5 >>> 1)); // Rotate right by 1
System.out.print("Expected: -2147483646 Actual: ");
System.out.println((int5 >>> 1)|(int5 << -1)); // Rotate right by 1
System.out.print("Expected: 10 Actual: ");
System.out.println((int5 << int1)|(int5 >>> -int1)); // Rotate left by 1
System.out.print("Expected: 10 Actual: ");
System.out.println((int5 >>> -int1)|(int5 << int1)); // Rotate left by 1
System.out.print("Expected: -2147483646 Actual: ");
System.out.println((int5 << -int1)|(int5 >>> int1)); // Rotate right by 1
System.out.print("Expected: -2147483646 Actual: ");
System.out.println((int5 >>> int1)|(int5 << -int1)); // Rotate right by 1
}
private static void ltest() {
long a = long10000000000;
long b = long2;
System.out.print("Expected: 10000000002 Actual: ");
System.out.println(a + b); // ladd
System.out.print("Expected: 9999999998 Actual: ");
System.out.println(a - b); // lsub
System.out.print("Expected: 20000000000 Actual: ");
System.out.println(a * b); // lmul
System.out.print("Expected: 5000000000 Actual: ");
System.out.println(a / b); // ldiv
System.out.print("Expected: 0 Actual: ");
System.out.println(a % b); // lrem
System.out.print("Expected: -2 Actual: ");
System.out.println(-b); // lneg
System.out.print("Expected: -10000000000 Actual: ");
System.out.println(-a); // lneg
a = long_3;
System.out.print("Expected: -1 Actual: ");
System.out.println(a + 2); // ladd
System.out.print("Expected: -5 Actual: ");
System.out.println(a - 2); // lsub
System.out.print("Expected: -9 Actual: ");
System.out.println(a * 3); // lmul
System.out.print("Expected: -1 Actual: ");
System.out.println(a / 2); // ldiv
System.out.print("Expected: -1 Actual: ");
System.out.println(a % 2); // lrem
System.out.print("Expected: 3 Actual: ");
System.out.println(-a); // lneg
a = long0x0110000000000011;
b = long0x1010000000000101;
System.out.print("Expected: 4503599627370497 Actual: ");
System.out.println(a & b); // land
System.out.print("Expected: 1229482698272145681 Actual: ");
System.out.println(a | b); // lor
System.out.print("Expected: 1224979098644775184 Actual: ");
System.out.println(a ^ b); // lxor
// bit patterns that can be optimized for certain operators if converting
// long operators into int operators
long long0x00000000FFFFFFFF = 0x00000000FFFFFFFFL;
long long0xFFFFFFFF00000000 = 0xFFFFFFFF00000000L;
long long0x00000001FFFFFFFF = 0x00000001FFFFFFFFL;
long long0xFFFFFFFF00000001 = 0xFFFFFFFF00000001L;
long long0x0000000100000000 = 0x0000000100000000L;
long long0x0000000100000001 = 0x0000000100000001L;
a = long_1;
System.out.print("Expected: -4294967295 Actual: ");
System.out.println(a * long0x00000000FFFFFFFF);
System.out.print("Expected: 4294967296 Actual: ");
System.out.println(a * long0xFFFFFFFF00000000);
System.out.print("Expected: -8589934591 Actual: ");
System.out.println(a * long0x00000001FFFFFFFF);
System.out.print("Expected: 4294967295 Actual: ");
System.out.println(a * long0xFFFFFFFF00000001);
System.out.print("Expected: -4294967296 Actual: ");
System.out.println(a * long0x0000000100000000);
System.out.print("Expected: -4294967297 Actual: ");
System.out.println(a * long0x0000000100000001);
System.out.print("Expected: 4294967295 Actual: ");
System.out.println(a & long0x00000000FFFFFFFF);
System.out.print("Expected: -4294967296 Actual: ");
System.out.println(a & long0xFFFFFFFF00000000);
System.out.print("Expected: 8589934591 Actual: ");
System.out.println(a & long0x00000001FFFFFFFF);
System.out.print("Expected: -4294967295 Actual: ");
System.out.println(a & long0xFFFFFFFF00000001);
System.out.print("Expected: 4294967296 Actual: ");
System.out.println(a & long0x0000000100000000);
System.out.print("Expected: 4294967297 Actual: ");
System.out.println(a & long0x0000000100000001);
a = long0;
System.out.print("Expected: 4294967295 Actual: ");
System.out.println(a | long0x00000000FFFFFFFF);
System.out.print("Expected: -4294967296 Actual: ");
System.out.println(a | long0xFFFFFFFF00000000);
System.out.print("Expected: 8589934591 Actual: ");
System.out.println(a | long0x00000001FFFFFFFF);
System.out.print("Expected: -4294967295 Actual: ");
System.out.println(a | long0xFFFFFFFF00000001);
System.out.print("Expected: 4294967297 Actual: ");
System.out.println(a | long0x0000000100000001);
System.out.print("Expected: 4294967295 Actual: ");
System.out.println(a ^ long0x00000000FFFFFFFF);
System.out.print("Expected: -4294967296 Actual: ");
System.out.println(a ^ long0xFFFFFFFF00000000);
System.out.print("Expected: 8589934591 Actual: ");
System.out.println(a ^ long0x00000001FFFFFFFF);
System.out.print("Expected: -4294967295 Actual: ");
System.out.println(a ^ long0xFFFFFFFF00000001);
System.out.print("Expected: 4294967297 Actual: ");
System.out.println(a ^ long0x0000000100000001);
a = long0xBEEFBEEFCAFEBABE;
System.out.print("Expected: 9070106573795063164 Actual: ");
System.out.println(a << 1); // lshl
System.out.print("Expected: -306530926119425288 Actual: ");
System.out.println(a << 2);
System.out.print("Expected: -613061852238850576 Actual: ");
System.out.println(a << 3);
System.out.print("Expected: -1226123704477701152 Actual: ");
System.out.println(a << 4);
System.out.print("Expected: -1171235197933666816 Actual: ");
System.out.println(a << 8);
System.out.print("Expected: -4688305491665879040 Actual: ");
System.out.println(a << 16);
System.out.print("Expected: -3819410108757049344 Actual: ");
System.out.println(a << 32);
System.out.print("Expected: -7638820217514098688 Actual: ");
System.out.println(a << 33);
System.out.print("Expected: 3169103638681354240 Actual: ");
System.out.println(a << 34);
System.out.print("Expected: 6338207277362708480 Actual: ");
System.out.println(a << 35);
System.out.print("Expected: -5770329518984134656 Actual: ");
System.out.println(a << 36);
System.out.print("Expected: -91551935198396416 Actual: ");
System.out.println(a << 40);
System.out.print("Expected: -4990551337079930880 Actual: ");
System.out.println(a << 48);
System.out.print("Expected: -4755801206503243776 Actual: ");
System.out.println(a << 56);
System.out.print("Expected: 0 Actual: ");
System.out.println(a << 63);
System.out.print("Expected: -4688318749957244226 Actual: ");
System.out.println(a << 64);
System.out.print("Expected: 9070106573795063164 Actual: ");
System.out.println(a << 65);
System.out.print("Expected: 9070106573795063164 Actual: ");
System.out.println(a << int65);
System.out.print("Expected: -2344159374978622113 Actual: ");
System.out.println(a >> 1); // lshr
System.out.print("Expected: -1172079687489311057 Actual: ");
System.out.println(a >> 2);
System.out.print("Expected: -586039843744655529 Actual: ");
System.out.println(a >> 3);
System.out.print("Expected: -293019921872327765 Actual: ");
System.out.println(a >> 4);
System.out.print("Expected: -18313745117020486 Actual: ");
System.out.println(a >> 8);
System.out.print("Expected: -71538066863362 Actual: ");
System.out.println(a >> 16);
System.out.print("Expected: -1091584273 Actual: ");
System.out.println(a >> 32);
System.out.print("Expected: -545792137 Actual: ");
System.out.println(a >> 33);
System.out.print("Expected: -272896069 Actual: ");
System.out.println(a >> 34);
System.out.print("Expected: -136448035 Actual: ");
System.out.println(a >> 35);
System.out.print("Expected: -68224018 Actual: ");
System.out.println(a >> 36);
System.out.print("Expected: -4264002 Actual: ");
System.out.println(a >> 40);
System.out.print("Expected: -16657 Actual: ");
System.out.println(a >> 48);
System.out.print("Expected: -66 Actual: ");
System.out.println(a >> 56);
System.out.print("Expected: -1 Actual: ");
System.out.println(a >> 63);
System.out.print("Expected: -4688318749957244226 Actual: ");
System.out.println(a >> 64);
System.out.print("Expected: -2344159374978622113 Actual: ");
System.out.println(a >> 65);
System.out.print("Expected: -2344159374978622113 Actual: ");
System.out.println(a >> int65);
System.out.print("Expected: 6879212661876153695 Actual: ");
System.out.println(a >>> 1); // lushr
System.out.print("Expected: 3439606330938076847 Actual: ");
System.out.println(a >>> 2);
System.out.print("Expected: 1719803165469038423 Actual: ");
System.out.println(a >>> 3);
System.out.print("Expected: 859901582734519211 Actual: ");
System.out.println(a >>> 4);
System.out.print("Expected: 53743848920907450 Actual: ");
System.out.println(a >>> 8);
System.out.print("Expected: 209936909847294 Actual: ");
System.out.println(a >>> 16);
System.out.print("Expected: 3203383023 Actual: ");
System.out.println(a >>> 32);
System.out.print("Expected: 1601691511 Actual: ");
System.out.println(a >>> 33);
System.out.print("Expected: 800845755 Actual: ");
System.out.println(a >>> 34);
System.out.print("Expected: 400422877 Actual: ");
System.out.println(a >>> 35);
System.out.print("Expected: 200211438 Actual: ");
System.out.println(a >>> 36);
System.out.print("Expected: 12513214 Actual: ");
System.out.println(a >>> 40);
System.out.print("Expected: 48879 Actual: ");
System.out.println(a >>> 48);
System.out.print("Expected: 190 Actual: ");
System.out.println(a >>> 56);
System.out.print("Expected: 1 Actual: ");
System.out.println(a >>> 63);
System.out.print("Expected: -4688318749957244226 Actual: ");
System.out.println(a >>> 64);
System.out.print("Expected: 6879212661876153695 Actual: ");
System.out.println(a >>> 65);
System.out.print("Expected: 6879212661876153695 Actual: ");
System.out.println(a >>> int65);
}
private static float float0 = 0.0f;
private static float float0_9 = 0.9f;
private static float float1 = 1.0f;
private static float float1_5 = 1.5f;
private static float float2 = 2.0f;
private static float float_maxint = (float)Integer.MAX_VALUE;
private static float float_minint = (float)Integer.MIN_VALUE;
private static double double0 = 0.0f;
private static double double1 = 1.0f;
private static double double2 = 2.0f;
private static double double_maxint = (double)Integer.MAX_VALUE;
private static double double_minint = (double)Integer.MIN_VALUE;
private static float float_maxlong = (float)Long.MAX_VALUE;
private static float float_minlong = (float)Long.MIN_VALUE;
private static double double_maxlong = (double)Long.MAX_VALUE;
private static double double_minlong = (double)Long.MIN_VALUE;
private static void ftest() {
// f2i, d2i, f2l and d2l tests
System.out.print("Expected: 0 Actual: ");
System.out.println((int)float0);
System.out.print("Expected: 1 Actual: ");
System.out.println((int)float1);
System.out.print("Expected: 0 Actual: ");
System.out.println((int)double0);
System.out.print("Expected: 1 Actual: ");
System.out.println((int)double1);
System.out.print("Expected: 0 Actual: ");
System.out.println((int)Float.NaN);
System.out.print("Expected: 0 Actual: ");
System.out.println((int)-Float.NaN);
System.out.print("Expected: 0 Actual: ");
System.out.println((int)Double.NaN);
System.out.print("Expected: 0 Actual: ");
System.out.println((int)-Double.NaN);
System.out.print("Expected: 2147483647 Actual: ");
System.out.println((int)Float.POSITIVE_INFINITY);
System.out.print("Expected: -2147483648 Actual: ");
System.out.println((int)Float.NEGATIVE_INFINITY);
System.out.print("Expected: 2147483647 Actual: ");
System.out.println((int)float_maxint);
System.out.print("Expected: -2147483648 Actual: ");
System.out.println((int)float_minint);
System.out.print("Expected: 2147483647 Actual: ");
System.out.println((int)double_maxint);
System.out.print("Expected: -2147483648 Actual: ");
System.out.println((int)double_minint);
System.out.print("Expected: 0 Actual: ");
System.out.println((long)float0);
System.out.print("Expected: 1 Actual: ");
System.out.println((long)float1);
System.out.print("Expected: 0 Actual: ");
System.out.println((long)double0);
System.out.print("Expected: 1 Actual: ");
System.out.println((long)double1);
System.out.print("Expected: 0 Actual: ");
System.out.println((long)Float.NaN);
System.out.print("Expected: 0 Actual: ");
System.out.println((long)-Float.NaN);
System.out.print("Expected: 0 Actual: ");
System.out.println((long)Double.NaN);
System.out.print("Expected: 0 Actual: ");
System.out.println((long)-Double.NaN);
System.out.print("Expected: 9223372036854775807 Actual: ");
System.out.println((long)Float.POSITIVE_INFINITY);
System.out.print("Expected: -9223372036854775808 Actual: ");
System.out.println((long)Float.NEGATIVE_INFINITY);
System.out.print("Expected: 9223372036854775807 Actual: ");
System.out.println((long)float_maxlong);
System.out.print("Expected: -9223372036854775808 Actual: ");
System.out.println((long)float_minlong);
System.out.print("Expected: 9223372036854775807 Actual: ");
System.out.println((long)double_maxlong);
System.out.print("Expected: -9223372036854775808 Actual: ");
System.out.println((long)double_minlong);
float a = float1;
float b = float2;
System.out.print("Expected: " + Integer.toHexString(Float.floatToIntBits(3.0F)) + " Actual: ");
System.out.println(Integer.toHexString(Float.floatToIntBits(a + b))); // fadd
System.out.print("Expected: " + Integer.toHexString(Float.floatToIntBits(-1.0F)) + " Actual: ");
System.out.println(Integer.toHexString(Float.floatToIntBits(a - b))); // fsub
System.out.print("Expected: " + Integer.toHexString(Float.floatToIntBits(2.0F)) + " Actual: ");
System.out.println(Integer.toHexString(Float.floatToIntBits(a * b))); // fmul
System.out.print("Expected: " + Integer.toHexString(Float.floatToIntBits(0.5F)) + " Actual: ");
System.out.println(Integer.toHexString(Float.floatToIntBits(a / b))); // fdiv
System.out.print("Expected: " + Integer.toHexString(Float.floatToIntBits(-1.0F)) + " Actual: ");
System.out.println(Integer.toHexString(Float.floatToIntBits(-a))); // fneg
a = float1_5;
b = float0_9;
System.out.print("Expected: " + Integer.toHexString(Float.floatToIntBits(0.6F)) + " Actual: ");
System.out.println(Integer.toHexString(Float.floatToIntBits(a % b))); // frem
System.out.print("Expected: NaN Actual: ");
System.out.println(float0/float0);
System.out.print("Expected: NaN Actual: ");
System.out.println(Float.NaN + Float.NaN);
System.out.print("Expected: NaN Actual: ");
System.out.println(Float.NaN + float2);
System.out.print("Expected: NaN Actual: ");
System.out.println(Float.NaN * float2);
System.out.print("Expected: NaN Actual: ");
System.out.println((float0 / 0.0) * Float.POSITIVE_INFINITY);
System.out.print("Expected: NaN Actual: ");
System.out.println((float1 / 0.0) * 0.0);
System.out.print("Expected: NaN Actual: ");
System.out.println((float1 / 0.0) - (float1 / 0.0));
System.out.print("Expected: NaN Actual: ");
System.out.println((float1 / 0.0) / (float1 / 0.0));
System.out.print("Expected: NaN Actual: ");
System.out.println((-float1 / 0.0) * 0.0);
System.out.print("Expected: NaN Actual: ");
System.out.println((-float1 / 0.0) - (-float1 / 0.0));
System.out.print("Expected: false Actual: ");
System.out.println(Float.NaN > float1);
System.out.print("Expected: false Actual: ");
System.out.println(Float.NaN < float1);
System.out.print("Expected: false Actual: ");
System.out.println(Float.NaN == float1);
System.out.print("Expected: false Actual: ");
System.out.println(Float.NaN == -float1);
System.out.print("Expected: false Actual: ");
System.out.println(Float.NaN > Float.POSITIVE_INFINITY);
System.out.print("Expected: false Actual: ");
System.out.println(Float.NaN < Float.POSITIVE_INFINITY);
System.out.print("Expected: true Actual: ");
System.out.println(Float.POSITIVE_INFINITY == Float.POSITIVE_INFINITY);
System.out.print("Expected: true Actual: ");
System.out.println(-Float.POSITIVE_INFINITY == Float.NEGATIVE_INFINITY);
System.out.print("Expected: true Actual: ");
System.out.println(Float.NEGATIVE_INFINITY < float1);
System.out.print("Expected: true Actual: ");
System.out.println((-float1/0.0) == (-float1/0.0));
System.out.print("Expected: Infinity Actual: ");
System.out.println(float1/0.0);
System.out.print("Expected: Infinity Actual: ");
System.out.println((float1/0.0) + 2.0);
System.out.print("Expected: Infinity Actual: ");
System.out.println((float1/0.0) * 0.5);
System.out.print("Expected: Infinity Actual: ");
System.out.println((float1/0.0) + (float1/0.0));
System.out.print("Expected: Infinity Actual: ");
System.out.println((float1/0.0) * (float1/0.0));
System.out.print("Expected: Infinity Actual: ");
System.out.println(Math.abs(-float1/0.0));
System.out.print("Expected: -Infinity Actual: ");
System.out.println(-float1/0.0);
System.out.print("Expected: -Infinity Actual: ");
System.out.println((-float1/0.0) + 2.0);
System.out.print("Expected: -Infinity Actual: ");
System.out.println((-float1/0.0) * 0.5);
System.out.print("Expected: 2147483647 Actual: ");
System.out.println((int)(float1/0.0));
System.out.print("Expected: -2147483648 Actual: ");
System.out.println((int)(-float1/0.0));
System.out.print("Expected: 0 Actual: ");
System.out.println((int)Float.NaN);
}
private static void dtest() {
double a = 1;
double b = 2;
System.out.print("Expected: " + Long.toHexString(Double.doubleToLongBits(3.0D)) + " Actual: ");
System.out.println(Long.toHexString(Double.doubleToLongBits(a + b))); // dadd
System.out.print("Expected: " + Long.toHexString(Double.doubleToLongBits(-1.0D)) + " Actual: ");
System.out.println(Long.toHexString(Double.doubleToLongBits(a - b))); // dsub
System.out.print("Expected: " + Long.toHexString(Double.doubleToLongBits(2.0D)) + " Actual: ");
System.out.println(Long.toHexString(Double.doubleToLongBits(a * b))); // dmul
System.out.print("Expected: " + Long.toHexString(Double.doubleToLongBits(0.5D)) + " Actual: ");
System.out.println(Long.toHexString(Double.doubleToLongBits(a / b))); // ddiv
System.out.print("Expected: " + Long.toHexString(Double.doubleToLongBits(-1.0D)) + " Actual: ");
System.out.println(Long.toHexString(Double.doubleToLongBits(-a))); // dneg
a = 1.5;
b = 0.9;
System.out.print("Expected: " + Long.toHexString(Double.doubleToLongBits(0.6D)) + " Actual: ");
System.out.println(Long.toHexString(Double.doubleToLongBits(a % b))); // drem
System.out.print("Expected: NaN Actual: ");
System.out.println(double0/double0);
System.out.print("Expected: NaN Actual: ");
System.out.println(Double.NaN + Double.NaN);
System.out.print("Expected: NaN Actual: ");
System.out.println(Double.NaN + double2);
System.out.print("Expected: NaN Actual: ");
System.out.println(Double.NaN * double2);
System.out.print("Expected: NaN Actual: ");
System.out.println((double0 / 0.0) * Double.POSITIVE_INFINITY);
System.out.print("Expected: NaN Actual: ");
System.out.println((double1 / 0.0) * 0.0);
System.out.print("Expected: NaN Actual: ");
System.out.println((double1 / 0.0) - (double1 / 0.0));
System.out.print("Expected: NaN Actual: ");
System.out.println((double1 / 0.0) / (double1 / 0.0));
System.out.print("Expected: NaN Actual: ");
System.out.println((-double1 / 0.0) * 0.0);
System.out.print("Expected: NaN Actual: ");
System.out.println((-double1 / 0.0) - (-double1 / 0.0));
System.out.print("Expected: false Actual: ");
System.out.println(Double.NaN > double1);
System.out.print("Expected: false Actual: ");
System.out.println(Double.NaN < double1);
System.out.print("Expected: false Actual: ");
System.out.println(Double.NaN == double1);
System.out.print("Expected: false Actual: ");
System.out.println(Double.NaN == -double1);
System.out.print("Expected: false Actual: ");
System.out.println(Double.NaN > Double.POSITIVE_INFINITY);
System.out.print("Expected: false Actual: ");
System.out.println(Double.NaN < Double.POSITIVE_INFINITY);
System.out.print("Expected: true Actual: ");
System.out.println(Double.POSITIVE_INFINITY == Double.POSITIVE_INFINITY);
System.out.print("Expected: true Actual: ");
System.out.println(-Double.POSITIVE_INFINITY == Double.NEGATIVE_INFINITY);
System.out.print("Expected: true Actual: ");
System.out.println(Double.NEGATIVE_INFINITY < double1);
System.out.print("Expected: true Actual: ");
System.out.println((-double1/0.0) == (-double1/0.0));
System.out.print("Expected: Infinity Actual: ");
System.out.println(double1/0.0);
System.out.print("Expected: Infinity Actual: ");
System.out.println((double1/0.0) + 2.0);
System.out.print("Expected: Infinity Actual: ");
System.out.println((double1/0.0) * 0.5);
System.out.print("Expected: Infinity Actual: ");
System.out.println((double1/0.0) + (double1/0.0));
System.out.print("Expected: Infinity Actual: ");
System.out.println((double1/0.0) * (double1/0.0));
System.out.print("Expected: Infinity Actual: ");
System.out.println(Math.abs(-double1/0.0));
System.out.print("Expected: -Infinity Actual: ");
System.out.println(-double1/0.0);
System.out.print("Expected: -Infinity Actual: ");
System.out.println((-double1/0.0) + 2.0);
System.out.print("Expected: -Infinity Actual: ");
System.out.println((-double1/0.0) * 0.5);
System.out.print("Expected: 2147483647 Actual: ");
System.out.println((int)(double1/0.0));
System.out.print("Expected: -2147483648 Actual: ");
System.out.println((int)(-double1/0.0));
System.out.print("Expected: 0 Actual: ");
System.out.println((int)Double.NaN);
}
private static void nanTestFloat() {
float zero = float0;
float NaN = zero / zero;
System.out.print(" expr expected got \n");
System.out.print("---------- -------- ----------\n");
System.out.print("NaN < NaN false " + (NaN < NaN) + "\n");
System.out.print("NaN <= NaN false " + (NaN <= NaN) + "\n");
System.out.print("NaN == NaN false " + (NaN == NaN) + "\n");
System.out.print("NaN != NaN true " + (NaN != NaN) + "\n");
System.out.print("NaN >= NaN false " + (NaN >= NaN) + "\n");
System.out.print("NaN > NaN false " + (NaN > NaN) + "\n");
}
private static void nanTestDouble() {
double zero = 0;
double NaN = zero / zero;
System.out.println(" expr expected got ");
System.out.println("---------- -------- ----------");
System.out.println("NaN < NaN false " + (NaN < NaN));
System.out.println("NaN <= NaN false " + (NaN <= NaN));
System.out.println("NaN == NaN false " + (NaN == NaN));
System.out.println("NaN != NaN true " + (NaN != NaN));
System.out.println("NaN >= NaN false " + (NaN >= NaN));
System.out.println("NaN > NaN false " + (NaN > NaN));
}
private static void remTest() {
rem(+2, +3);
rem(+2, -3);
rem(-2, +3);
rem(-2, -3);
}
private static void rem(final double a, final double b) {
System.out.println(a + " / " + b + "=" + Long.toHexString(Double.doubleToLongBits(a / b)));
System.out.println(a + " % " + b + "=" + Long.toHexString(Double.doubleToLongBits(a % b)));
System.out.println(a + " rem " + b + "=" + Long.toHexString(Double.doubleToLongBits(Math.IEEEremainder(a, b))));
System.out.println();
}
}