svn path=/trunk/mono/; revision=53658
[mono.git] / mono / mini / basic.cs
index 96eac959b0cf66fd851762ffb6aa7c9c29b6d707..0c3f393fc8f7151216a5514a0562d0ccdb7aa434 100644 (file)
@@ -307,6 +307,90 @@ class Tests {
                return number == n ? 0 : 1;
        }
 
+       public static int test_0_sub_ovf () {
+               int i, j, k;
+
+               checked {
+                       i = System.Int32.MinValue;
+                       j = 0;
+                       k = i - j;
+               }
+
+               if (k != System.Int32.MinValue)
+                       return 1;
+
+               checked {
+                       i = System.Int32.MaxValue;
+                       j = 0;
+                       k = i - j;
+               }
+
+               if (k != System.Int32.MaxValue)
+                       return 2;
+
+               checked {
+                       i = System.Int32.MinValue;
+                       j = System.Int32.MinValue + 1234;
+                       k = i - j;
+               }
+
+               if (k != -1234)
+                       return 3;
+
+               checked {
+                       i = System.Int32.MaxValue;
+                       j = 1234;
+                       k = i - j;
+               }
+
+               if (k != System.Int32.MaxValue - 1234)
+                       return 4;
+
+               checked {
+                       i = System.Int32.MaxValue - 1234;
+                       j = -1234;
+                       k = i - j;
+               }
+
+               if (k != System.Int32.MaxValue)
+                       return 5;
+
+               checked {
+                       i = System.Int32.MinValue + 1234;
+                       j = 1234;
+                       k = i - j;
+               }
+
+               if (k != System.Int32.MinValue)
+                       return 6;
+
+               return 0;
+       }
+
+       public static int test_0_sub_ovf_un () {
+               uint i, j, k;
+
+               checked {
+                       i = System.UInt32.MaxValue;
+                       j = 0;
+                       k = i - j;
+               }
+
+               if (k != System.UInt32.MaxValue)
+                       return 1;
+
+               checked {
+                       i = System.UInt32.MaxValue;
+                       j = System.UInt32.MaxValue;
+                       k = i - j;
+               }
+
+               if (k != 0)
+                       return 2;
+
+               return 0;
+       }
+
        public static int test_3_or () {
                int b = 2;
                int a = 3;
@@ -641,6 +725,17 @@ class Tests {
                
                return 0;
        }
+
+       public static int test_0_conv_ovf_i4_un () {
+               uint c;
+
+               checked {
+                       c = 0x7fffffff;
+                       int b = (int)c;
+               }
+
+               return 0;
+       }
        
        public static int test_0_bool () {
                bool val = true;
@@ -755,15 +850,6 @@ class Tests {
                return 0;
        }
 
-       public static unsafe int test_0_pin_string () {
-               string x = "xxx";
-               fixed (char *c = x) {
-                       if (*c != 'x')
-                               return 1;
-               }
-               return 0;
-       }
-
        public static int test_3_shift_regalloc () {
                int shift = 8;
                int orig = 1;
@@ -927,33 +1013,9 @@ class Tests {
                
                return n;
        }
-       
-       public static int my_flags;
+
        public static int test_0_and_cmp ()
        {
-               
-               /* various forms of test [mem], imm */
-               
-               my_flags = 0x01020304;
-               
-               if ((my_flags & 0x01020304) == 0)
-                       return 1;
-               
-               if ((my_flags & 0x00000304) == 0)
-                       return 2;
-               
-               if ((my_flags & 0x00000004) == 0)
-                       return 3;
-               
-               if ((my_flags & 0x00000300) == 0)
-                       return 4;
-               
-               if ((my_flags & 0x00020000) == 0)
-                       return 5;
-               
-               if ((my_flags & 0x01000000) == 0)
-                       return 6;
-               
                /* test esi, imm */
                int local = 0x01020304;
                
@@ -974,6 +1036,68 @@ class Tests {
                
                if ((local & 0x01000000) == 0)
                        return 12;
+
+               return 0;
+       }
+
+       public static int test_0_mul_imm_opt ()
+       {
+               int 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;
        }
@@ -993,22 +1117,7 @@ class Tests {
                
                return 0;
        }
-       
-       static byte b;
-       public static int test_0_byte_compares ()
-       {
-               b = 0xff;
-               if (b == -1)
-                       return 1;
-               b = 0;
-               if (!(b < System.Byte.MaxValue))
-                       return 2;
-               
-               if (!(b <= System.Byte.MaxValue))
-                       return 3;
-               
-               return 0;
-       }
+
        public static int test_0_cmp_regvar_zero ()
        {
                int n = 10;