*
* Each test needs to be of the form:
*
- * static int test_<result>_<name> ();
+ * public static int test_<result>_<name> ();
*
* where <result> is an integer (the value that needs to be returned by
* the method to make it pass.
class Tests {
- static int Main () {
+ public static int Main () {
return TestDriver.RunTests (typeof (Tests));
}
- static int test_10_simple_cast () {
+ public static int test_10_simple_cast () {
long a = 10;
return (int)a;
}
- static int test_1_bigmul1 () {
+ public static int test_1_bigmul1 () {
int a;
int b;
long c;
return 0;
}
- static int test_1_bigmul2 () {
+ public static int test_1_bigmul2 () {
int a = System.Int32.MaxValue, b = System.Int32.MaxValue;
long s = System.Int64.MinValue;
long c;
return 0;
}
- static int test_1_bigmul3 () {
+ public static int test_1_bigmul3 () {
int a = 10, b = 10;
ulong c;
c = (ulong) a * (ulong) b;
return 0;
}
- static int test_1_bigmul4 () {
+ public static int test_1_bigmul4 () {
int a = System.Int32.MaxValue, b = System.Int32.MaxValue;
ulong c;
c = (ulong) a * (ulong) b;
return 0;
}
- static int test_1_bigmul5 () {
+ public static int test_1_bigmul5 () {
int a = System.Int32.MaxValue, b = System.Int32.MinValue;
long c;
c = (long) a * (long) b;
return 0;
}
- static int test_1_bigmul6 () {
+ public static int test_1_bigmul6 () {
uint a = System.UInt32.MaxValue, b = System.UInt32.MaxValue/(uint)2;
ulong c;
c = (ulong) a * (ulong) b;
return 0;
}
- static int test_0_beq () {
+ public static int test_0_beq () {
long a = 0xffffffffff;
if (a != 0xffffffffff)
return 1;
return 0;
}
- static int test_0_bne_un () {
+ public static int test_0_bne_un () {
long a = 0xffffffffff;
if (a == 0xfffffffffe)
return 1;
return 0;
}
- static int test_0_ble () {
+ public static int test_0_ble () {
long a = 0xffffffffff;
if (a > 0xffffffffff)
return 1;
return 0;
}
- static int test_0_ble_un () {
+ public static int test_0_ble_un () {
ulong a = 0xffffffffff;
if (a > 0xffffffffff)
return 1;
return 0;
}
- static int test_0_bge () {
+ public static int test_0_bge () {
long a = 0xffffffffff;
if (a < 0xffffffffff)
return 1;
return 0;
}
- static int test_0_bge_un () {
+ public static int test_0_bge_un () {
ulong a = 0xffffffffff;
if (a < 0xffffffffff)
return 1;
return 0;
}
- static int test_0_blt () {
+ public static int test_0_blt () {
long a = 0xfffffffffe;
if (a >= 0xffffffffff)
return 1;
return 0;
}
- static int test_0_blt_un () {
+ public static int test_0_blt_un () {
ulong a = 0xfffffffffe;
if (a >= 0xffffffffff)
return 1;
return 0;
}
- static int test_0_bgt () {
+ public static int test_0_bgt () {
long a = 0xffffffffff;
if (a <= 0xfffffffffe)
return 1;
return 0;
}
- static int test_0_conv_to_i4 () {
+ public static int test_0_conv_to_i4 () {
long a = 0;
return (int)a;
}
- static int test_0_conv_from_i4 () {
+
+ public static int test_32_conv_to_u4 () {
+ long a = 32;
+
+ return (int)(uint)a;
+ }
+
+ public static int test_15_conv_to_u4_2 () {
+ long a = 0x10000000f;
+
+ return (int)(uint)a;
+ }
+
+ public static int test_0_conv_from_i4 () {
long a = 2;
if (a != 2)
return 1;
return 0;
}
- static int test_0_conv_from_i4_negative () {
+ public static int test_0_conv_from_i4_negative () {
long a = -2;
if (a != -2)
return 1;
return 0;
}
+ public static int test_0_conv_to_r8 () {
+ long a = 150;
+ double b = (double) a;
+
+ if (b != 150.0)
+ return 1;
+ return 0;
+ }
+
+ public static int test_0_conv_to_r4 () {
+ long a = 3000;
+ float b = (float) a;
+
+ if (b != 3000.0F)
+ return 1;
+ return 0;
+ }
/*
- static int test_0_conv_from_r8 () {
+ public static int test_0_conv_from_r8 () {
double b = 2.0;
long a = (long)b;
return 0;
}
- static int test_0_conv_from_r4 () {
+ public static int test_0_conv_from_r4 () {
float b = 2.0F;
long a = (long)b;
}
*/
- static int test_8_and () {
+ public static int test_8_and () {
long a = 0xffffffffff;
long b = 8;
return (int)(a & b);
}
- static int test_8_and_imm () {
+ public static int test_8_and_imm () {
long a = 0xffffffffff;
return (int)(a & 8);
}
- static int test_10_or () {
+ public static int test_10_or () {
long a = 8;
long b = 2;
return (int)(a | b);
}
- static int test_10_or_imm () {
+ public static int test_10_or_imm () {
long a = 8;
return (int)(a | 2);
}
- static int test_5_xor () {
+ public static int test_5_xor () {
long a = 7;
long b = 2;
return (int)(a ^ b);
}
- static int test_5_xor_imm () {
+ public static int test_5_xor_imm () {
long a = 7;
return (int)(a ^ 2);
}
- static int test_5_add () {
+ public static int test_5_add () {
long a = 2;
long b = 3;
return (int)(a + b);
}
- static int test_5_add_imm () {
+ public static int test_5_add_imm () {
long a = 2;
return (int)(a + 3);
}
- static int test_0_add_imm_no_inc () {
+ public static int test_0_add_imm_carry () {
+ long a = -1;
+ return (int)(a + 1);
+ }
+
+ public static int test_0_add_imm_no_inc () {
// we can't blindly convert an add x, 1 to an inc x
long a = 0x1ffffffff;
long c;
return 1;
}
- static int test_5_sub () {
+ public static int test_4_addcc_imm () {
+ long a = 3;
+ long b = 0;
+ return (int)(a - b + 1);
+ }
+
+ public static int test_5_sub () {
long a = 8;
long b = 3;
return (int)(a - b);
}
- static int test_5_sub_imm () {
+ public static int test_5_sub_imm () {
long a = 8;
return (int)(a - 3);
}
- static int test_2_neg () {
- long a = -2;
- return (int)(-a);
- }
+ public static int test_0_sub_imm_carry () {
+ long a = 0;
+ return (int)((a - 1) + 1);
+ }
- static int test_0_shl () {
- long a = 9;
- int b = 1;
-
- if ((a >> b) != 4)
+ public static int test_0_add_ovf () {
+ long i, j, k;
+
+ checked {
+ i = System.Int64.MinValue;
+ j = 0;
+ k = i + j;
+ }
+
+ if (k != System.Int64.MinValue)
return 1;
+ checked {
+ i = System.Int64.MaxValue;
+ j = 0;
+ k = i + j;
+ }
+
+ if (k != System.Int64.MaxValue)
+ return 2;
+
+ checked {
+ i = System.Int64.MinValue;
+ j = System.Int64.MaxValue;
+ k = i + j;
+ }
+
+ if (k != -1)
+ return 3;
+
+ checked {
+ i = System.Int64.MaxValue;
+ j = System.Int64.MinValue;
+ k = i + j;
+ }
+
+ if (k != -1)
+ return 4;
+
+ checked {
+ i = System.Int64.MinValue + 1234;
+ j = -1234;
+ k = i + j;
+ }
+
+ if (k != System.Int64.MinValue)
+ return 5;
+
+ checked {
+ i = System.Int64.MaxValue - 1234;
+ j = 1234;
+ k = i + j;
+ }
+
+ if (k != System.Int64.MaxValue)
+ return 6;
return 0;
}
-
- static int test_1_rshift ()
- {
- long a = 9;
- int b = 1;
- a = -9;
- if ((a >> b) != -5)
- return 0;
- return 1;
+
+ public static int test_0_add_un_ovf () {
+ ulong n = (ulong)134217728 * 16;
+ ulong number = checked (n + (uint)0);
+
+ return number == n ? 0 : 1;
+ }
+
+ public static int test_0_sub_ovf () {
+ long i, j, k;
+
+ checked {
+ i = System.Int64.MinValue;
+ j = 0;
+ k = i - j;
+ }
+
+ if (k != System.Int64.MinValue)
+ return 1;
+
+ checked {
+ i = System.Int64.MaxValue;
+ j = 0;
+ k = i - j;
+ }
+
+ if (k != System.Int64.MaxValue)
+ return 2;
+
+ checked {
+ i = System.Int64.MinValue;
+ j = System.Int64.MinValue + 1234;
+ k = i - j;
+ }
+
+ if (k != -1234)
+ return 3;
+
+ checked {
+ i = System.Int64.MaxValue;
+ j = 1234;
+ k = i - j;
+ }
+
+ if (k != System.Int64.MaxValue - 1234)
+ return 4;
+
+ checked {
+ i = System.Int64.MaxValue - 1234;
+ j = -1234;
+ k = i - j;
+ }
+
+ if (k != System.Int64.MaxValue)
+ return 5;
+
+ checked {
+ i = System.Int64.MinValue + 1234;
+ j = 1234;
+ k = i - j;
+ }
+
+ if (k != System.Int64.MinValue)
+ return 6;
+
+ return 0;
+ }
+
+ public static int test_0_sub_ovf_un () {
+ ulong i, j, k;
+
+ checked {
+ i = System.UInt64.MaxValue;
+ j = 0;
+ k = i - j;
+ }
+
+ if (k != System.UInt64.MaxValue)
+ return 1;
+
+ checked {
+ i = System.UInt64.MaxValue;
+ j = System.UInt64.MaxValue;
+ k = i - j;
+ }
+
+ if (k != 0)
+ return 2;
+
+ return 0;
}
- static int test_5_shift ()
+ public static int test_2_neg () {
+ long a = -2;
+ return (int)(-a);
+ }
+
+ public static int test_0_neg_large () {
+ long min = -9223372036854775808;
+ unchecked {
+ ulong ul = (ulong)min;
+ return (min == -(long)ul) ? 0 : 1;
+ }
+ }
+
+ public static int test_5_shift ()
{
long a = 9;
int b = 1;
return count;
}
- static int test_1_simple_neg () {
+ public static int test_1_shift_u ()
+ {
+ ulong a;
+ int count = 0;
+
+ // The JIT optimizes this
+ a = 8589934592UL;
+ if ((a >> 32) != 2)
+ return 0;
+ count ++;
+
+ return count;
+ }
+
+ public static int test_1_simple_neg () {
long a = 9;
if (-a != -9)
return 1;
}
- static int test_2_compare () {
+ public static int test_2_compare () {
long a = 1;
long b = 1;
return 2;
}
- static int test_9_alu ()
+ public static int test_9_alu ()
{
long a = 9, b = 6;
int count = 0;
return count;
}
- static int test_24_mul () {
+ public static int test_24_mul () {
long a = 8;
long b = 3;
return (int)(a * b);
}
- static int test_24_mul_ovf () {
+ public static int test_24_mul_ovf () {
long a = 8;
long b = 3;
long res;
return (int)res;
}
- static int test_24_mul_un () {
+ public static int test_24_mul_un () {
ulong a = 8;
ulong b = 3;
return (int)(a * b);
}
- static int test_24_mul_ovf_un () {
+ public static int test_24_mul_ovf_un () {
ulong a = 8;
ulong b = 3;
ulong res;
}
return (int)res;
}
+
+ public static int test_0_mul_imm () {
+ long i = 4;
+
+ if ((i * 0) != 0)
+ return 1;
+ if ((i * 1) != 4)
+ return 2;
+ if ((i * 2) != 8)
+ return 3;
+ if ((i * 3) != 12)
+ return 4;
+ if ((i * 1234) != 4936)
+ return 5;
+ if ((i * -1) != -4)
+ return 6;
+ if ((i * -2) != -8)
+ return 7;
+ if ((i * -3) != -12)
+ return 8;
+ if ((i * -1234) != -4936)
+ return 9;
+
+ return 0;
+ }
+
+ public static int test_0_mul_imm_opt ()
+ {
+ long i;
+
+ i = 1;
+ if ((i * 2) != 2)
+ return 1;
+ i = -1;
+ if ((i * 2) != -2)
+ return 2;
+ i = 1;
+ if ((i * 3) != 3)
+ return 3;
+ i = -1;
+ if ((i * 3) != -3)
+ return 4;
+ i = 1;
+ if ((i * 5) != 5)
+ return 5;
+ i = -1;
+ if ((i * 5) != -5)
+ return 6;
+ i = 1;
+ if ((i * 6) != 6)
+ return 7;
+ i = -1;
+ if ((i * 6) != -6)
+ return 8;
+ i = 1;
+ if ((i * 9) != 9)
+ return 9;
+ i = -1;
+ if ((i * 9) != -9)
+ return 10;
+ i = 1;
+ if ((i * 10) != 10)
+ return 11;
+ i = -1;
+ if ((i * 10) != -10)
+ return 12;
+ i = 1;
+ if ((i * 12) != 12)
+ return 13;
+ i = -1;
+ if ((i * 12) != -12)
+ return 14;
+ i = 1;
+ if ((i * 25) != 25)
+ return 15;
+ i = -1;
+ if ((i * 25) != -25)
+ return 16;
+ i = 1;
+ if ((i * 100) != 100)
+ return 17;
+ i = -1;
+ if ((i * 100) != -100)
+ return 18;
+
+ return 0;
+ }
- static int test_4_divun () {
+ public static int test_4_divun () {
uint b = 12;
int a = 3;
return (int)(b / a);
}
- static int test_1431655764_bigdivun_imm () {
- uint b = (uint)-2;
- return (int)(b / 3);
+ public static int test_1431655764_bigdivun_imm () {
+ unchecked {
+ uint b = (uint)-2;
+ return (int)(b / 3);
+ }
}
- static int test_1431655764_bigdivun () {
- uint b = (uint)-2;
- int a = 3;
- return (int)(b / a);
+ public static int test_1431655764_bigdivun () {
+ unchecked {
+ uint b = (uint)-2;
+ int a = 3;
+ return (int)(b / a);
+ }
}
- static int test_1_remun () {
+ public static int test_1_remun () {
uint b = 13;
int a = 3;
return (int)(b % a);
}
- static int test_2_bigremun () {
- uint b = (uint)-2;
- int a = 3;
- return (int)(b % a);
+ public static int test_2_bigremun () {
+ unchecked {
+ uint b = (uint)-2;
+ int a = 3;
+ return (int)(b % a);
+ }
}
- static int test_0_ceq () {
+ public static int test_0_ceq () {
long a = 2;
long b = 2;
long c = 3;
return 0;
}
+
+ public static int test_0_ceq_complex () {
+ long l = 1, ll = 2;
+
+ if (l < 0 != ll < 0)
+ return 1;
+
+ return 0;
+ }
- static int test_0_clt () {
+ public static int test_0_clt () {
long a = 2;
long b = 2;
long c = 3;
return 0;
}
- static int test_0_clt_un () {
+ public static int test_0_clt_un () {
ulong a = 2;
ulong b = 2;
ulong c = 3;
return 0;
}
- static int test_0_cgt () {
+ public static int test_0_cgt () {
long a = 2;
long b = 2;
long c = 3;
return 0;
}
- static int test_0_cgt_un () {
+ public static int test_0_cgt_un () {
ulong a = 2;
ulong b = 2;
ulong c = 3;
return 0x500000000;
}
- static int test_3_long_ret () {
+ public static int test_3_long_ret () {
long val = return_5low ();
return (int) (val - 2);
}
- static int test_1_long_ret2 () {
+ public static int test_1_long_ret2 () {
long val = return_5high ();
if (val > 0xffffffff)
return 1;
return 0;
}
- static int test_3_byte_cast () {
+ public static int test_3_byte_cast () {
ulong val = 0xff00ff00f0f0f0f0;
byte b;
b = (byte) (val & 0xFF);
if (b != 0xf0)
return 1;
+
return 3;
}
-
- static int test_4_ushort_cast () {
+
+ public static int test_4_ushort_cast () {
ulong val = 0xff00ff00f0f0f0f0;
ushort b;
b = (ushort) (val & 0xFFFF);
return 4;
}
- static int test_500_mul_div () {
+ public static int test_500_mul_div () {
long val = 1000;
long exp = 10;
long maxexp = 20;
return (int)res;
}
-
- static long position = 0;
-
- static int test_4_static_inc_long () {
-
- int count = 4;
-
- position = 0;
-
- position += count;
-
- return (int)position;
- }
static void doit (double value, out long m) {
m = (long) value;
}
- static int test_3_checked_cast_un () {
+ public static int test_3_checked_cast_un () {
ulong i = 2;
long j;
return 3;
}
- static int test_4_checked_cast () {
+ public static int test_4_checked_cast () {
long i = 3;
ulong j;
return 4;
}
- static int test_10_int_uint_compare () {
+ public static int test_12_checked_i1_cast () {
+ long l = 12;
+
+ checked {
+ return (sbyte)l;
+ }
+ }
+
+ public static int test_127_checked_i1_cast_un () {
+ ulong l = 127;
+
+ checked {
+ return (sbyte)l;
+ }
+ }
+
+ public static int test_1234_checked_i2_cast () {
+ long l = 1234;
+
+ checked {
+ return (short)l;
+ }
+ }
+
+ public static int test_32767_checked_i2_cast_un () {
+ ulong l = 32767;
+
+ checked {
+ return (ushort)l;
+ }
+ }
+
+ public static int test_1234_checked_i4_cast () {
+ ulong ul = 1234;
+
+ checked {
+ return (int)ul;
+ }
+ }
+
+ public static int test_10_int_uint_compare () {
uint size = 10;
int j = 0;
for (int i = 0; i < size; ++i) {
return j;
}
- static int test_0_ftol_clobber () {
+ 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_ulong_regress () {
+ ulong u = 4257145737;
+ u --;
+ return (u == 4257145736) ? 0 : 1;
+ }
+
+ public static int test_0_assemble_long ()
+ {
+ uint a = 5;
+ ulong x = 0x12345678;
+ ulong y = 1;
+
+
+ ulong z = ((x - y) << 32) | a;
+
+ if (z != 0x1234567700000005)
+ return 1;
+
+ return 0;
+ }
+
+ public static int test_0_hash ()
+ {
+ ulong x = 0x1234567887654321;
+ int h = (int)(x & 0xffffffff) ^ (int)(x >> 32);
+ if (h != unchecked ((int)(0x87654321 ^ 0x12345678)))
+ return h;
+ return 0;
+
+ }
+
+ public static int test_0_shift_regress () {
+ long a = 0;
+ int b = 6;
+ UInt16 c = 3;
+
+ return ((a >> (b - c)) == 0) ? 0 : 1;
+ }
+
+ public static int test_1234_conv_ovf_u8 () {
+ int i = 1234;
+
+ checked {
+ ulong l = (ulong)i;
+ return (int)l;
+ }
+ }
}