2007-01-28 Zoltan Varga <vargaz@gmail.com>
[mono.git] / mono / mini / basic.cs
index b56800cfc7d9ec1a39d995df76b78de04fc78fd9..45e449430939e74bc54eae78956383f035d0c612 100644 (file)
@@ -152,6 +152,16 @@ class Tests {
                return b / 2;
        }
 
+       public static int test_2_div_fold4 () {
+               int b = -8;
+               return -(b / 4);
+       }
+
+       public static int test_2_div_fold16 () {
+               int b = 32;
+               return b / 16;
+       }
+
        public static int test_719177_div_destreg () {
                int year = 1970;
                return ((365* (year-1)) + ((year-1)/4));
@@ -240,7 +250,7 @@ class Tests {
                return (int)res;
        }
 
-       public static int test_0_add_ovf () {
+       public static int test_0_add_ovf1 () {
                int i, j, k;
 
                checked {
@@ -251,6 +261,11 @@ class Tests {
 
                if (k != System.Int32.MinValue)
                        return 1;
+               return 0;
+       }
+
+       public static int test_0_add_ovf2 () {
+               int i, j, k;
 
                checked {
                        i = System.Int32.MaxValue;
@@ -260,6 +275,11 @@ class Tests {
 
                if (k != System.Int32.MaxValue)
                        return 2;
+               return 0;
+       }
+
+       public static int test_0_add_ovf3 () {
+               int i, j, k;
 
                checked {
                        i = System.Int32.MinValue;
@@ -269,6 +289,11 @@ class Tests {
 
                if (k != -1)
                        return 3;
+               return 0;
+       }
+
+       public static int test_0_add_ovf4 () {
+               int i, j, k;
 
                checked {
                        i = System.Int32.MaxValue;
@@ -278,6 +303,11 @@ class Tests {
 
                if (k != -1)
                        return 4;
+               return 0;
+       }
+
+       public static int test_0_add_ovf5 () {
+               int i, j, k;
 
                checked {
                        i = System.Int32.MinValue + 1234;
@@ -287,6 +317,11 @@ class Tests {
 
                if (k != System.Int32.MinValue)
                        return 5;
+               return 0;
+       }
+
+       public static int test_0_add_ovf6 () {
+               int i, j, k;
 
                checked {
                        i = System.Int32.MaxValue - 1234;
@@ -307,7 +342,7 @@ class Tests {
                return number == n ? 0 : 1;
        }
 
-       public static int test_0_sub_ovf () {
+       public static int test_0_sub_ovf1 () {
                int i, j, k;
 
                checked {
@@ -319,6 +354,12 @@ class Tests {
                if (k != System.Int32.MinValue)
                        return 1;
 
+               return 0;
+       }
+
+       public static int test_0_sub_ovf2 () {
+               int i, j, k;
+
                checked {
                        i = System.Int32.MaxValue;
                        j = 0;
@@ -328,6 +369,12 @@ class Tests {
                if (k != System.Int32.MaxValue)
                        return 2;
 
+               return 0;
+       }
+
+       public static int test_0_sub_ovf3 () {
+               int i, j, k;
+
                checked {
                        i = System.Int32.MinValue;
                        j = System.Int32.MinValue + 1234;
@@ -337,6 +384,12 @@ class Tests {
                if (k != -1234)
                        return 3;
 
+               return 0;
+       }
+
+       public static int test_0_sub_ovf4 () {
+               int i, j, k;
+
                checked {
                        i = System.Int32.MaxValue;
                        j = 1234;
@@ -346,6 +399,12 @@ class Tests {
                if (k != System.Int32.MaxValue - 1234)
                        return 4;
 
+               return 0;
+       }
+
+       public static int test_0_sub_ovf5 () {
+               int i, j, k;
+
                checked {
                        i = System.Int32.MaxValue - 1234;
                        j = -1234;
@@ -355,6 +414,12 @@ class Tests {
                if (k != System.Int32.MaxValue)
                        return 5;
 
+               return 0;
+       }
+
+       public static int test_0_sub_ovf6 () {
+               int i, j, k;
+
                checked {
                        i = System.Int32.MinValue + 1234;
                        j = 1234;
@@ -1039,6 +1104,68 @@ class Tests {
 
                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;
+       }
        
        public static int test_0_cne ()
        {
@@ -1055,22 +1182,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;
@@ -1083,4 +1195,84 @@ class Tests {
                return 0;
        }
 
+       public static int test_5_div_un_cfold ()
+       {
+               uint i = 10;
+               uint j = 2;
+
+               return (int)(i / j);
+       }
+
+       public static int test_1_rem_un_cfold ()
+       {
+               uint i = 11;
+               uint j = 2;
+
+               return (int)(i % j);
+       }
+
+       public static int test_0_div_opt () {
+               int i;
+
+               // Avoid cfolding this
+               i = 0;
+               for (int j = 0; j < 1234567; ++j)
+                       i ++;
+               if ((i / 2) != 617283)
+                       return 1;
+               if ((i / 4) != 308641)
+                       return 2;
+               if ((i / 8) != 154320)
+                       return 3;
+               if ((i / 16) != 77160)
+                       return 4;
+
+               // Avoid cfolding this
+               i = 0;
+               for (int j = 0; j < 1234567; ++j)
+                       i --;
+               if ((i / 2) != -617283)
+                       return 5;
+               if ((i / 4) != -308641)
+                       return 6;
+               if ((i / 8) != -154320)
+                       return 7;
+               if ((i / 16) != -77160)
+                       return 8;
+
+               return 0;
+       }
+
+       public static int test_0_rem_opt () {
+               int i;
+
+               // Avoid cfolding this
+               i = 0;
+               for (int j = 0; j < 29; ++j)
+                       i ++;
+               if ((i % 2) != 1)
+                       return 1;
+               if ((i % 4) != 1)
+                       return 2;
+               if ((i % 8) != 5)
+                       return 3;
+               if ((i % 16) != 13)
+                       return 4;
+
+               // Avoid cfolding this
+               i = 0;
+               for (int j = 0; j < 29; ++j)
+                       i --;
+               if ((i % 2) != -1)
+                       return 5;
+               if ((i % 4) != -1)
+                       return 6;
+               if ((i % 8) != -5)
+                       return 7;
+               if ((i % 16) != -13)
+                       return 8;
+
+               return 0;
+       }
+
 }