package test; import java.io.*; import java.util.*; import com.jopdesign.sys.SoftFloat; public class GenFloatTestRnd { 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; } static long l = 0; public static void main (String[] args) { System.err.println("Testing random values..."); final long tim = System.currentTimeMillis(); new Thread() { public void run() { for (;;) { System.out.print((l/1000000)+" M "); long diff = System.currentTimeMillis()-tim; diff /= 1000; if (diff!=0) { System.out.print((l/diff)+"/s"); } try { Thread.sleep(1000); } catch(Exception e) {} System.out.print("\r"); } } }.start(); Random rnd = new Random(); float a = 0; float b = 0; for (l = 0; true; ++l) { a = Float.intBitsToFloat(rnd.nextInt()); b = Float.intBitsToFloat(rnd.nextInt()); { int pc_val = Float.floatToRawIntBits(a + b); int jop_val = SoftFloat.float32_add (Float.floatToRawIntBits(a), Float.floatToRawIntBits(b)); 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(a))+"+" +Integer.toHexString(Float.floatToRawIntBits(b))+") != SoftFloat.float32_add ("+Integer.toHexString(Float.floatToRawIntBits(a))+"," +Integer.toHexString(Float.floatToRawIntBits(b))+")"); System.err.println(Integer.toHexString(pc_val)+" != "+Integer.toHexString(jop_val)); } } { int pc_val = Float.floatToRawIntBits(a - b); int jop_val = SoftFloat.float32_sub (Float.floatToRawIntBits(a), Float.floatToRawIntBits(b)); 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(a))+"-" +Integer.toHexString(Float.floatToRawIntBits(b))+") != SoftFloat.float32_sub ("+Integer.toHexString(Float.floatToRawIntBits(a))+"," +Integer.toHexString(Float.floatToRawIntBits(b))+")"); System.err.println(Integer.toHexString(pc_val)+" != "+Integer.toHexString(jop_val)); } } { int pc_val = Float.floatToRawIntBits(a * b); int jop_val = SoftFloat.float32_mul (Float.floatToRawIntBits(a), Float.floatToRawIntBits(b)); 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(a))+"*" +Integer.toHexString(Float.floatToRawIntBits(b))+") != SoftFloat.float32_mul ("+Integer.toHexString(Float.floatToRawIntBits(a))+"," +Integer.toHexString(Float.floatToRawIntBits(b))+")"); System.err.println(Integer.toHexString(pc_val)+" != "+Integer.toHexString(jop_val)); } } { int pc_val = Float.floatToRawIntBits(a / b); int jop_val = SoftFloat.float32_div (Float.floatToRawIntBits(a), Float.floatToRawIntBits(b)); 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(a))+"/" +Integer.toHexString(Float.floatToRawIntBits(b))+") != SoftFloat.float32_div ("+Integer.toHexString(Float.floatToRawIntBits(a))+"," +Integer.toHexString(Float.floatToRawIntBits(b))+")"); System.err.println(Integer.toHexString(pc_val)+" != "+Integer.toHexString(jop_val)); } } { int pc_val = Float.floatToRawIntBits(a % b); int jop_val = SoftFloat.float32_rem (Float.floatToRawIntBits(a), Float.floatToRawIntBits(b)); 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(a))+"%" +Integer.toHexString(Float.floatToRawIntBits(b))+") != SoftFloat.float32_rem ("+Integer.toHexString(Float.floatToRawIntBits(a))+"," +Integer.toHexString(Float.floatToRawIntBits(b))+")"); System.err.println(Integer.toHexString(pc_val)+" != "+Integer.toHexString(jop_val)); } } { int pc_val = fcmpl (a, b); int jop_val = SoftFloat.float32_cmpl (Float.floatToRawIntBits(a), Float.floatToRawIntBits(b)); if (pc_val != jop_val) { System.err.println("fcmpl ("+Integer.toHexString(Float.floatToRawIntBits(a))+"," +Integer.toHexString(Float.floatToRawIntBits(b))+") != SoftFloat.float32_cmpl ("+Integer.toHexString(Float.floatToRawIntBits(a))+"," +Integer.toHexString(Float.floatToRawIntBits(b))+")"); System.err.println(Integer.toHexString(pc_val)+" != "+Integer.toHexString(jop_val)); } } { int pc_val = fcmpg (a, b); int jop_val = SoftFloat.float32_cmpg (Float.floatToRawIntBits(a), Float.floatToRawIntBits(b)); if (pc_val != jop_val) { System.err.println("fcmpg ("+Integer.toHexString(Float.floatToRawIntBits(a))+"," +Integer.toHexString(Float.floatToRawIntBits(b))+") != SoftFloat.float32_cmpg ("+Integer.toHexString(Float.floatToRawIntBits(a))+"," +Integer.toHexString(Float.floatToRawIntBits(b))+")"); System.err.println(Integer.toHexString(pc_val)+" != "+Integer.toHexString(jop_val)); } } { int pc_val = Math.round (a); int jop_val = SoftFloat.float32_to_int32 (Float.floatToRawIntBits(a)); if (pc_val != jop_val) { System.err.println("Math.round ("+Integer.toHexString(Float.floatToRawIntBits(a))+") != SoftFloat.float32_to_int32 ("+Integer.toHexString(Float.floatToRawIntBits(a))+")"); System.err.println(Integer.toHexString(pc_val)+" != "+Integer.toHexString(jop_val)); } } { int pc_val = (int) (a); int jop_val = SoftFloat.float32_to_int32_round_to_zero (Float.floatToRawIntBits(a)); if (pc_val != jop_val) { System.err.println("(int) ("+Integer.toHexString(Float.floatToRawIntBits(a))+") != SoftFloat.float32_to_int32_round_to_zero ("+Integer.toHexString(Float.floatToRawIntBits(a))+")"); System.err.println(Integer.toHexString(pc_val)+" != "+Integer.toHexString(jop_val)); } } } } }