2006-02-16 Martin Baulig <martin@ximian.com>
[mono.git] / mono / tests / checked.cs
old mode 100755 (executable)
new mode 100644 (file)
index 21cb8bd..87c3f2a
@@ -1,7 +1,4 @@
 using System;\r
-using System.Data;\r
-using \r
-System.Data.SqlTypes;\r
 \r
 namespace test {\r
        public class tester {\r
@@ -96,8 +93,96 @@ namespace test {
 \r
                        if (ui != 100000)\r
                                return -6;\r
-                       \r
-                       \r
+\r
+                       // Check mul.ovf\r
+                       checked {\r
+                               int l;\r
+                               int m;\r
+\r
+                               int[][] cases = new int [][] { \r
+                                       new int [] {0, 0, 0},\r
+                                       new int [] {-5, 0, 0},\r
+                                       new int [] {3, -5, -15},\r
+                                       new int [] {3, 5, 15},\r
+                                       new int [] {-3, -5, 15},\r
+                                       new int [] {-3, 5, -15},\r
+                                       new int [] {-1, 32767, -32767},\r
+                                       new int [] {32767, -1, -32767}};\r
+\r
+\r
+                               for (int j = 0; j < cases.Length; ++j)\r
+                                       if (cases [j][0] * cases [j][1] != cases [j][2])\r
+                                               return -7 - j;\r
+                       }\r
+\r
+                       checked {\r
+                               int j;\r
+                               int k;\r
+\r
+                               j = k = 0;\r
+                               if (j * k != 0)\r
+                                       return -7;\r
+\r
+                               j = -5;\r
+                               k = 0;\r
+                               if (j * k != 0)\r
+                                       return -8;\r
+\r
+                               j = 0;\r
+                               k = -5;\r
+                               if (j * k != 0)\r
+                                       return -9;\r
+\r
+                               j = 3;\r
+                               k = -5;\r
+                               if (j * k != -15)\r
+                                       return -10;\r
+\r
+                               j = 3;\r
+                               k = 5;\r
+                               if (j * k != 15)\r
+                                       return -11;\r
+\r
+                               j = -3;\r
+                               k = -5;\r
+                               if (j * k != 15)\r
+                                       return -12;\r
+\r
+                               j = -3;\r
+                               k = 5;\r
+                               if (j * k != -15)\r
+                                       return -13;\r
+\r
+                               j = -1;\r
+                               k = 32767;\r
+                               if (j * k != -32767)\r
+                                       return -14;\r
+                               \r
+                               j = 32767;\r
+                               k = -1;\r
+                               if (j * k != -32767)\r
+                                       return -15;\r
+                       }\r
+\r
+                       checked {\r
+                               long l;\r
+                               long m;\r
+\r
+                               long[][] cases = new long [][] { \r
+                                       new long [] {0, 0, 0},\r
+                                       new long [] {-5, 0, 0},\r
+                                       new long [] {3, -5, -15},\r
+                                       new long [] {3, 5, 15},\r
+                                       new long [] {-3, -5, 15},\r
+                                       new long [] {-3, 5, -15},\r
+                                       new long [] {-1, 2147483647, -2147483647},\r
+                                       new long [] {2147483647, -1, -2147483647}};\r
+\r
+                               for (int j = 0; j < cases.Length; ++j)\r
+                                       if (cases [j][0] * cases [j][1] != cases [j][2])\r
+                                               return -15 - j;\r
+                       }\r
+                               \r
                        Console.WriteLine("test-ok");\r
 \r
                        return 0;\r