package test; import java.io.*; import java.util.*; import com.jopdesign.sys.SoftFloat; public class GenFloatTestDef { private static int fcmpl(float a, float b) { if (Float.isNaN(a)) return -1; if (Float.isNaN(b)) return -1; if (a == b) return 0; if (a < b) return -1; return 1; } private static int fcmpg(float a, float b) { if (Float.isNaN(a)) return 1; if (Float.isNaN(b)) return 1; if (a == b) return 0; if (a < b) return -1; return 1; } public static void main (String[] args) { float [] nums = { Float.NaN, Float.MAX_VALUE, Float.MIN_VALUE, Float.NEGATIVE_INFINITY, Float.POSITIVE_INFINITY, 0.0f, 1.0f, -1.0f, -126.0f, -24.0f, -2.0f, 2.0f, 24.0f, 127.0f, 3.14159f, 2.71828f, Float.intBitsToFloat(0x00800000), Float.intBitsToFloat(0x33800000), Float.intBitsToFloat(0x3E800000), Float.intBitsToFloat(0x3F000000), Float.intBitsToFloat(0x3F800000), Float.intBitsToFloat(0x40000000), Float.intBitsToFloat(0x40800000), Float.intBitsToFloat(0x4B800000), Float.intBitsToFloat(0x7F000000), Float.intBitsToFloat(0x80800000), Float.intBitsToFloat(0xB3800000), Float.intBitsToFloat(0xBE800000), Float.intBitsToFloat(0xBF000000), Float.intBitsToFloat(0xBF800000), Float.intBitsToFloat(0xC0000000), Float.intBitsToFloat(0xC0800000), Float.intBitsToFloat(0xCB800000), Float.intBitsToFloat(0xFE800000), Float.intBitsToFloat(0x00000000), Float.intBitsToFloat(0x00000001), Float.intBitsToFloat(0x00000002), Float.intBitsToFloat(0x00000004), Float.intBitsToFloat(0x00000008), Float.intBitsToFloat(0x00000010), Float.intBitsToFloat(0x00000020), Float.intBitsToFloat(0x00000040), Float.intBitsToFloat(0x00000080), Float.intBitsToFloat(0x00000100), Float.intBitsToFloat(0x00000200), Float.intBitsToFloat(0x00000400), Float.intBitsToFloat(0x00000800), Float.intBitsToFloat(0x00001000), Float.intBitsToFloat(0x00002000), Float.intBitsToFloat(0x00004000), Float.intBitsToFloat(0x00008000), Float.intBitsToFloat(0x00010000), Float.intBitsToFloat(0x00020000), Float.intBitsToFloat(0x00040000), Float.intBitsToFloat(0x00080000), Float.intBitsToFloat(0x00100000), Float.intBitsToFloat(0x00200000), Float.intBitsToFloat(0x00400000), Float.intBitsToFloat(0x00800000), Float.intBitsToFloat(0x01000000), Float.intBitsToFloat(0x02000000), Float.intBitsToFloat(0x04000000), Float.intBitsToFloat(0x08000000), Float.intBitsToFloat(0x10000000), Float.intBitsToFloat(0x20000000), Float.intBitsToFloat(0x40000000), Float.intBitsToFloat(0x80000000), Float.intBitsToFloat(0xC0000000), Float.intBitsToFloat(0xE0000000), Float.intBitsToFloat(0xF0000000), Float.intBitsToFloat(0xF8000000), Float.intBitsToFloat(0xFC000000), Float.intBitsToFloat(0xFE000000), Float.intBitsToFloat(0xFF000000), Float.intBitsToFloat(0xFF800000), Float.intBitsToFloat(0xFFC00000), Float.intBitsToFloat(0xFFE00000), Float.intBitsToFloat(0xFFF00000), Float.intBitsToFloat(0xFFF80000), Float.intBitsToFloat(0xFFFC0000), Float.intBitsToFloat(0xFFFE0000), Float.intBitsToFloat(0xFFFF0000), Float.intBitsToFloat(0xFFFF8000), Float.intBitsToFloat(0xFFFFC000), Float.intBitsToFloat(0xFFFFE000), Float.intBitsToFloat(0xFFFFF000), Float.intBitsToFloat(0xFFFFF800), Float.intBitsToFloat(0xFFFFFC00), Float.intBitsToFloat(0xFFFFFE00), Float.intBitsToFloat(0xFFFFFF00), Float.intBitsToFloat(0xFFFFFF80), Float.intBitsToFloat(0xFFFFFFC0), Float.intBitsToFloat(0xFFFFFFE0), Float.intBitsToFloat(0xFFFFFFF0), Float.intBitsToFloat(0xFFFFFFF8), Float.intBitsToFloat(0xFFFFFFFC), Float.intBitsToFloat(0xFFFFFFFE), Float.intBitsToFloat(0xFFFFFFFF), Float.intBitsToFloat(0xFFFFFFFE), Float.intBitsToFloat(0xFFFFFFFD), Float.intBitsToFloat(0xFFFFFFFB), Float.intBitsToFloat(0xFFFFFFF7), Float.intBitsToFloat(0xFFFFFFEF), Float.intBitsToFloat(0xFFFFFFDF), Float.intBitsToFloat(0xFFFFFFBF), Float.intBitsToFloat(0xFFFFFF7F), Float.intBitsToFloat(0xFFFFFEFF), Float.intBitsToFloat(0xFFFFFDFF), Float.intBitsToFloat(0xFFFFFBFF), Float.intBitsToFloat(0xFFFFF7FF), Float.intBitsToFloat(0xFFFFEFFF), Float.intBitsToFloat(0xFFFFDFFF), Float.intBitsToFloat(0xFFFFBFFF), Float.intBitsToFloat(0xFFFF7FFF), Float.intBitsToFloat(0xFFFEFFFF), Float.intBitsToFloat(0xFFFDFFFF), Float.intBitsToFloat(0xFFFBFFFF), Float.intBitsToFloat(0xFFF7FFFF), Float.intBitsToFloat(0xFFEFFFFF), Float.intBitsToFloat(0xFFDFFFFF), Float.intBitsToFloat(0xFFBFFFFF), Float.intBitsToFloat(0xFF7FFFFF), Float.intBitsToFloat(0xFEFFFFFF), Float.intBitsToFloat(0xFDFFFFFF), Float.intBitsToFloat(0xFBFFFFFF), Float.intBitsToFloat(0xF7FFFFFF), Float.intBitsToFloat(0xEFFFFFFF), Float.intBitsToFloat(0xDFFFFFFF), Float.intBitsToFloat(0xBFFFFFFF), Float.intBitsToFloat(0x7FFFFFFF), Float.intBitsToFloat(0x3FFFFFFF), Float.intBitsToFloat(0x1FFFFFFF), Float.intBitsToFloat(0x0FFFFFFF), Float.intBitsToFloat(0x07FFFFFF), Float.intBitsToFloat(0x03FFFFFF), Float.intBitsToFloat(0x01FFFFFF), Float.intBitsToFloat(0x00FFFFFF), Float.intBitsToFloat(0x007FFFFF), Float.intBitsToFloat(0x003FFFFF), Float.intBitsToFloat(0x001FFFFF), Float.intBitsToFloat(0x000FFFFF), Float.intBitsToFloat(0x0007FFFF), Float.intBitsToFloat(0x0003FFFF), Float.intBitsToFloat(0x0001FFFF), Float.intBitsToFloat(0x0000FFFF), Float.intBitsToFloat(0x00007FFF), Float.intBitsToFloat(0x00003FFF), Float.intBitsToFloat(0x00001FFF), Float.intBitsToFloat(0x00000FFF), Float.intBitsToFloat(0x000007FF), Float.intBitsToFloat(0x000003FF), Float.intBitsToFloat(0x000001FF), Float.intBitsToFloat(0x000000FF), Float.intBitsToFloat(0x0000007F), Float.intBitsToFloat(0x0000003F), Float.intBitsToFloat(0x0000001F), Float.intBitsToFloat(0x0000000F), Float.intBitsToFloat(0x00000007), Float.intBitsToFloat(0x00000003), Float.intBitsToFloat(0x80000000), Float.intBitsToFloat(0x80000001), Float.intBitsToFloat(0x80000002), Float.intBitsToFloat(0x80000004), Float.intBitsToFloat(0x80000008), Float.intBitsToFloat(0x80000010), Float.intBitsToFloat(0x80000020), Float.intBitsToFloat(0x80000040), Float.intBitsToFloat(0x80000080), Float.intBitsToFloat(0x80000100), Float.intBitsToFloat(0x80000200), Float.intBitsToFloat(0x80000400), Float.intBitsToFloat(0x80000800), Float.intBitsToFloat(0x80001000), Float.intBitsToFloat(0x80002000), Float.intBitsToFloat(0x80004000), Float.intBitsToFloat(0x80008000), Float.intBitsToFloat(0x80010000), Float.intBitsToFloat(0x80020000), Float.intBitsToFloat(0x80040000), Float.intBitsToFloat(0x80080000), Float.intBitsToFloat(0x80100000), Float.intBitsToFloat(0x80200000), Float.intBitsToFloat(0x80400000), Float.intBitsToFloat(0x80800000), Float.intBitsToFloat(0x81000000), Float.intBitsToFloat(0x82000000), Float.intBitsToFloat(0x84000000), Float.intBitsToFloat(0x88000000), Float.intBitsToFloat(0x90000000), Float.intBitsToFloat(0xA0000000), Float.intBitsToFloat(0xC0000000), Float.intBitsToFloat(0x80000000), Float.intBitsToFloat(0xBFFFFFFF), Float.intBitsToFloat(0x9FFFFFFF), Float.intBitsToFloat(0x8FFFFFFF), Float.intBitsToFloat(0x87FFFFFF), Float.intBitsToFloat(0x83FFFFFF), Float.intBitsToFloat(0x81FFFFFF), Float.intBitsToFloat(0x80FFFFFF), Float.intBitsToFloat(0x807FFFFF), Float.intBitsToFloat(0x803FFFFF), Float.intBitsToFloat(0x801FFFFF), Float.intBitsToFloat(0x800FFFFF), Float.intBitsToFloat(0x8007FFFF), Float.intBitsToFloat(0x8003FFFF), Float.intBitsToFloat(0x8001FFFF), Float.intBitsToFloat(0x8000FFFF), Float.intBitsToFloat(0x80007FFF), Float.intBitsToFloat(0x80003FFF), Float.intBitsToFloat(0x80001FFF), Float.intBitsToFloat(0x80000FFF), Float.intBitsToFloat(0x800007FF), Float.intBitsToFloat(0x800003FF), Float.intBitsToFloat(0x800001FF), Float.intBitsToFloat(0x800000FF), Float.intBitsToFloat(0x8000007F), Float.intBitsToFloat(0x8000003F), Float.intBitsToFloat(0x8000001F), Float.intBitsToFloat(0x8000000F), Float.intBitsToFloat(0x80000007), Float.intBitsToFloat(0x80000003), Float.intBitsToFloat(0xabfb2c81), Float.intBitsToFloat(0xeb21fece), Float.intBitsToFloat(0x361b388b), Float.intBitsToFloat(0x7621d144), Float.intBitsToFloat(0x838b1c87), Float.intBitsToFloat(0x4476555a), Float.intBitsToFloat(0xac7cc276), Float.intBitsToFloat(0xec4111fe), Float.intBitsToFloat(0x83bd1c1b), Float.intBitsToFloat(0x43bd69ec), Float.intBitsToFloat(0xb08711b2), Float.intBitsToFloat(0x70e7fc01), Float.intBitsToFloat(0xb6c4c126), Float.intBitsToFloat(0xf84a5aed), Float.intBitsToFloat(0x9e1b55f9), Float.intBitsToFloat(0x5e99b660), Float.intBitsToFloat(0xbfc02e00), Float.intBitsToFloat(0xc2020300), Float.intBitsToFloat(0xc22a0300), Float.intBitsToFloat(0xc2020300), Float.intBitsToFloat(0xc1780200), Float.intBitsToFloat(0xc1e40400), Float.intBitsToFloat(0xbfc02c00), Float.intBitsToFloat(0xc1180d00), Float.intBitsToFloat(0xc2df0100), Float.intBitsToFloat(0xc19c0000), Float.intBitsToFloat(0xc2950100), Float.intBitsToFloat(0xc2a30100), Float.intBitsToFloat(0xc2c30100), Float.intBitsToFloat(0x3effffff) }; System.err.println("Testing predefined values..."); for (int i=0; i<nums.length; i++) { for (int k=0; k<nums.length; k++) { { int pc_val = Float.floatToRawIntBits(nums[i] + nums[k]); int jop_val = SoftFloat.float32_add (Float.floatToRawIntBits(nums[i]), Float.floatToRawIntBits(nums[k])); if ((Float.isNaN(Float.intBitsToFloat(pc_val)) != Float.isNaN(Float.intBitsToFloat(jop_val))) || (!Float.isNaN(Float.intBitsToFloat(pc_val)) && (pc_val != jop_val))) { System.err.println("("+Integer.toHexString(Float.floatToRawIntBits(nums[i]))+"+" +Integer.toHexString(Float.floatToRawIntBits(nums[k]))+") != SoftFloat.float32_add ("+Integer.toHexString(Float.floatToRawIntBits(nums[i]))+"," +Integer.toHexString(Float.floatToRawIntBits(nums[k]))+")"); System.err.println(Integer.toHexString(pc_val)+" != "+Integer.toHexString(jop_val)); } } } } System.err.println("Testing SoftFloat.float32_add finished."); for (int i=0; i<nums.length; i++) { for (int k=0; k<nums.length; k++) { { int pc_val = Float.floatToRawIntBits(nums[i] - nums[k]); int jop_val = SoftFloat.float32_sub (Float.floatToRawIntBits(nums[i]), Float.floatToRawIntBits(nums[k])); if ((Float.isNaN(Float.intBitsToFloat(pc_val)) != Float.isNaN(Float.intBitsToFloat(jop_val))) || (!Float.isNaN(Float.intBitsToFloat(pc_val)) && (pc_val != jop_val))) { System.err.println("("+Integer.toHexString(Float.floatToRawIntBits(nums[i]))+"-" +Integer.toHexString(Float.floatToRawIntBits(nums[k]))+") != SoftFloat.float32_sub ("+Integer.toHexString(Float.floatToRawIntBits(nums[i]))+"," +Integer.toHexString(Float.floatToRawIntBits(nums[k]))+")"); System.err.println(Integer.toHexString(pc_val)+" != "+Integer.toHexString(jop_val)); } } } } System.err.println("Testing SoftFloat.float32_sub finished."); for (int i=0; i<nums.length; i++) { for (int k=0; k<nums.length; k++) { { int pc_val = Float.floatToRawIntBits(nums[i] * nums[k]); int jop_val = SoftFloat.float32_mul (Float.floatToRawIntBits(nums[i]), Float.floatToRawIntBits(nums[k])); if ((Float.isNaN(Float.intBitsToFloat(pc_val)) != Float.isNaN(Float.intBitsToFloat(jop_val))) || (!Float.isNaN(Float.intBitsToFloat(pc_val)) && (pc_val != jop_val))) { System.err.println("("+Integer.toHexString(Float.floatToRawIntBits(nums[i]))+"*" +Integer.toHexString(Float.floatToRawIntBits(nums[k]))+") != SoftFloat.float32_mul ("+Integer.toHexString(Float.floatToRawIntBits(nums[i]))+"," +Integer.toHexString(Float.floatToRawIntBits(nums[k]))+")"); System.err.println(Integer.toHexString(pc_val)+" != "+Integer.toHexString(jop_val)); } } } } System.err.println("Testing SoftFloat.float32_mul finished."); for (int i=0; i<nums.length; i++) { for (int k=0; k<nums.length; k++) { { int pc_val = Float.floatToRawIntBits(nums[i] / nums[k]); int jop_val = SoftFloat.float32_div (Float.floatToRawIntBits(nums[i]), Float.floatToRawIntBits(nums[k])); if ((Float.isNaN(Float.intBitsToFloat(pc_val)) != Float.isNaN(Float.intBitsToFloat(jop_val))) || (!Float.isNaN(Float.intBitsToFloat(pc_val)) && (pc_val != jop_val))) { System.err.println("("+Integer.toHexString(Float.floatToRawIntBits(nums[i]))+"/" +Integer.toHexString(Float.floatToRawIntBits(nums[k]))+") != SoftFloat.float32_div ("+Integer.toHexString(Float.floatToRawIntBits(nums[i]))+"," +Integer.toHexString(Float.floatToRawIntBits(nums[k]))+")"); System.err.println(Integer.toHexString(pc_val)+" != "+Integer.toHexString(jop_val)); } } } } System.err.println("Testing SoftFloat.float32_div finished."); for (int i=0; i<nums.length; i++) { for (int k=0; k<nums.length; k++) { { int pc_val = Float.floatToRawIntBits(nums[i] % nums[k]); int jop_val = SoftFloat.float32_rem (Float.floatToRawIntBits(nums[i]), Float.floatToRawIntBits(nums[k])); if ((Float.isNaN(Float.intBitsToFloat(pc_val)) != Float.isNaN(Float.intBitsToFloat(jop_val))) || (!Float.isNaN(Float.intBitsToFloat(pc_val)) && (pc_val != jop_val))) { System.err.println("("+Integer.toHexString(Float.floatToRawIntBits(nums[i]))+"%" +Integer.toHexString(Float.floatToRawIntBits(nums[k]))+") != SoftFloat.float32_rem ("+Integer.toHexString(Float.floatToRawIntBits(nums[i]))+"," +Integer.toHexString(Float.floatToRawIntBits(nums[k]))+")"); System.err.println(Integer.toHexString(pc_val)+" != "+Integer.toHexString(jop_val)); } } } } System.err.println("Testing SoftFloat.float32_rem finished."); for (int i=0; i<nums.length; i++) { for (int k=0; k<nums.length; k++) { { int pc_val = fcmpl (nums[i], nums[k]); int jop_val = SoftFloat.float32_cmpl (Float.floatToRawIntBits(nums[i]), Float.floatToRawIntBits(nums[k])); if (pc_val != jop_val) { System.err.println("fcmpl ("+Integer.toHexString(Float.floatToRawIntBits(nums[i]))+"," +Integer.toHexString(Float.floatToRawIntBits(nums[k]))+") != SoftFloat.float32_cmpl ("+Integer.toHexString(Float.floatToRawIntBits(nums[i]))+"," +Integer.toHexString(Float.floatToRawIntBits(nums[k]))+")"); System.err.println(Integer.toHexString(pc_val)+" != "+Integer.toHexString(jop_val)); } } } } System.err.println("Testing SoftFloat.float32_cmpl finished."); for (int i=0; i<nums.length; i++) { for (int k=0; k<nums.length; k++) { { int pc_val = fcmpg (nums[i], nums[k]); int jop_val = SoftFloat.float32_cmpg (Float.floatToRawIntBits(nums[i]), Float.floatToRawIntBits(nums[k])); if (pc_val != jop_val) { System.err.println("fcmpg ("+Integer.toHexString(Float.floatToRawIntBits(nums[i]))+"," +Integer.toHexString(Float.floatToRawIntBits(nums[k]))+") != SoftFloat.float32_cmpg ("+Integer.toHexString(Float.floatToRawIntBits(nums[i]))+"," +Integer.toHexString(Float.floatToRawIntBits(nums[k]))+")"); System.err.println(Integer.toHexString(pc_val)+" != "+Integer.toHexString(jop_val)); } } } } System.err.println("Testing SoftFloat.float32_cmpg finished."); for (int i=0; i<nums.length; i++) { { int pc_val = Math.round (nums[i]); int jop_val = SoftFloat.float32_to_int32 (Float.floatToRawIntBits(nums[i])); if (pc_val != jop_val) { System.err.println("Math.round ("+Integer.toHexString(Float.floatToRawIntBits(nums[i]))+") != SoftFloat.float32_to_int32 ("+Integer.toHexString(Float.floatToRawIntBits(nums[i]))+")"); System.err.println(Integer.toHexString(pc_val)+" != "+Integer.toHexString(jop_val)); } } } System.err.println("Testing SoftFloat.float32_to_int32 finished."); for (int i=0; i<nums.length; i++) { { int pc_val = (int) (nums[i]); int jop_val = SoftFloat.float32_to_int32_round_to_zero (Float.floatToRawIntBits(nums[i])); if (pc_val != jop_val) { System.err.println("(int) ("+Integer.toHexString(Float.floatToRawIntBits(nums[i]))+") != SoftFloat.float32_to_int32_round_to_zero ("+Integer.toHexString(Float.floatToRawIntBits(nums[i]))+")"); System.err.println(Integer.toHexString(pc_val)+" != "+Integer.toHexString(jop_val)); } } } System.err.println("Testing SoftFloat.float32_to_int32_round_to_zero finished."); System.err.println("All tests finished."); } }