return 0;
}
- static int test_0_conv_i4 () {
+ static int test_0_conv_i () {
double a = 2.0;
- int b = (int)a;
- if (b != 2)
+ int i = (int)a;
+ if (i != 2)
return 1;
+ uint ui = (uint)a;
+ if (ui != 2)
+ return 2;
+ short s = (short)a;
+ if (s != 2)
+ return 3;
+ ushort us = (ushort)a;
+ if (us != 2)
+ return 4;
+ byte b = (byte)a;
+ if (b != 2)
+ return 5;
+ sbyte sb = (sbyte)a;
+ if (sb != 2)
+ return 6;
return 0;
}
+ static int test_5_conv_r4 () {
+ int i = 5;
+ float f = (float)i;
+ return (int)f;
+ }
+
+ static int test_5_double_conv_r4 () {
+ double d = 5.0;
+ float f = (float)d;
+ return (int)f;
+ }
+
+ static int test_5_float_conv_r8 () {
+ float f = 5.0F;
+ double d = (double)f;
+ return (int)d;
+ }
+
+ static int test_5_conv_r8 () {
+ int i = 5;
+ double f = (double)i;
+ return (int)f;
+ }
+
static int test_5_add () {
double a = 2.0;
double b = 3.0;
return (int)(-a);
}
- static int test_46_float_spill () {
+ static int test_46_float_add_spill () {
// we overflow the FP stack
double a = 1;
double b = 2;
return (int)(1.0 + (a + (b + (c + (d + (e + (f + (g + (h + i)))))))));
}
+ static int test_4_float_sub_spill () {
+ // we overflow the FP stack
+ double a = 1;
+ double b = 2;
+ double c = 3;
+ double d = 4;
+ double e = 5;
+ double f = 6;
+ double g = 7;
+ double h = 8;
+ double i = 9;
+
+ return -(int)(1.0 - (a - (b - (c - (d - (e - (f - (g - (h - i)))))))));
+ ////// -(int)(1.0 - (1 - (2 - (3 - (4 - (5 - (6 - (7 - (8 - 9)))))))));
+ }
+
+ static int test_362880_float_mul_spill () {
+ // we overflow the FP stack
+ double a = 1;
+ double b = 2;
+ double c = 3;
+ double d = 4;
+ double e = 5;
+ double f = 6;
+ double g = 7;
+ double h = 8;
+ double i = 9;
+
+ return (int)(1.0 * (a * (b * (c * (d * (e * (f * (g * (h * i)))))))));
+ }
+
static int test_4_long_cast () {
long a = 1000;
double d = (double)a;
long b = (long)d;
if (b != 1000)
return 0;
+ a = -1;
+ d = (double)a;
+ b = (long)d;
+ if (b != -1)
+ return 1;
return 4;
}
+ static int test_4_ulong_cast () {
+ ulong a = 1000;
+ double d = (double)a;
+ ulong b = (ulong)d;
+ if (b != 1000)
+ return 0;
+ return 4;
+ }
- static int test_15_float_cmp () {
+ static int test_4_single_long_cast () {
+ long a = 1000;
+ float d = (float)a;
+ long b = (long)d;
+ if (b != 1000)
+ return 0;
+ a = -1;
+ d = (float)a;
+ b = (long)d;
+ if (b != -1)
+ return 1;
+ return 4;
+ }
+
+ public static int test_0_lconv_to_r8 () {
+ long a = 150;
+ double b = (double) a;
+
+ if (b != 150.0)
+ return 1;
+ return 0;
+ }
+
+ public static int test_0_lconv_to_r4 () {
+ long a = 3000;
+ float b = (float) a;
+
+ if (b != 3000.0F)
+ return 1;
+ return 0;
+ }
+
+ static void doit (double value, out long m) {
+ m = (long) value;
+ }
+
+ public static int test_0_ftol_clobber () {
+ long m;
+ doit (1.3, out m);
+ if (m != 1)
+ return 2;
+ return 0;
+ }
+
+ public static int test_0_rounding () {
+ long ticks = 631502475130080000L;
+ long ticksperday = 864000000000L;
+
+ double days = (double) ticks / ticksperday;
+
+ if ((int)days != 730905)
+ return 1;
+
+ return 0;
+ }
+
+ /* FIXME: This only works on little-endian machines */
+ /*
+ static unsafe int test_2_negative_zero () {
+ int result = 0;
+ double d = -0.0;
+ float f = -0.0f;
+
+ byte *ptr = (byte*)&d;
+ if (ptr [7] == 0)
+ return result;
+ result ++;
+
+ ptr = (byte*)&f;
+ if (ptr [3] == 0)
+ return result;
+ result ++;
+
+ return result;
+ }
+ */
+
+ static int test_16_float_cmp () {
double a = 2.0;
double b = 1.0;
int result = 0;
return result;
result++;
+ val = (a != a);
+ if (val)
+ return result;
+ result++;
+
val = a < a;
if (val)
return result;
return result;
}
+ static int test_0_float_precision () {
+ float f1 = 3.40282346638528859E+38f;
+ float f2 = 3.40282346638528859E+38f;
+ float PositiveInfinity = 1.0f / 0.0f;
+ float f = f1 + f2;
+
+ return f == PositiveInfinity ? 0 : 1;
+ }
}