Merge pull request #5714 from alexischr/update_bockbuild
[mono.git] / mono / tests / checked.cs
1 using System;\r
2 \r
3 namespace test {\r
4         public class tester {\r
5                 public tester() {}\r
6 \r
7                 public static int Main () {\r
8                         float a  = 1e20f;\r
9                         int i = 0;\r
10                         uint ui = 0;\r
11 \r
12                         bool exception = false;\r
13 \r
14                         try {\r
15                                 int b = (int) a;\r
16                                 checked {\r
17                                         i = (int)a;\r
18                                 }\r
19                         }\r
20                         catch (OverflowException) {\r
21                                 exception = true;\r
22                         }\r
23                         catch (Exception) {\r
24                         }                       \r
25 \r
26 \r
27                         if (!exception)\r
28                                 return 1;\r
29 \r
30                         exception = false;\r
31 \r
32                         a  = 1e5f;\r
33                         \r
34                         try {\r
35                                 int b = (int) a;\r
36                                 checked {\r
37                                         i = (int)a;\r
38                                 }\r
39                         } catch (Exception) {\r
40                                 return 2;\r
41                         }\r
42 \r
43 \r
44                         if (i != 100000)\r
45                                 return 3;\r
46                 \r
47                         exception = false;\r
48 \r
49                         a  = -1e30f;\r
50                         try {\r
51                                 int b = (int) a;\r
52                                 checked {\r
53                                         i = (int)a;\r
54                                 }\r
55                         } \r
56                         catch (OverflowException) {\r
57                                 exception = true;\r
58                         }\r
59                         catch (Exception) {\r
60                         }                       \r
61                         exception = false;\r
62 \r
63 \r
64                         a  = -1e30f;\r
65                         try {\r
66                                 uint b = (uint) a;\r
67                                 checked {\r
68                                         ui = (uint)a;\r
69                                 }\r
70 \r
71                                 Console.WriteLine("No Exception");\r
72                         } \r
73                         catch (OverflowException) {\r
74                                 exception = true;\r
75                         }\r
76                         catch (Exception) {\r
77                         }\r
78 \r
79 \r
80                         if (!exception)\r
81                                 return 4;\r
82 \r
83                         a  = 1e5f;\r
84                         try {\r
85                                 uint b = (uint) a;\r
86                                 checked {\r
87                                         ui = (uint)a;\r
88                                 }\r
89                         } \r
90                         catch (Exception) {\r
91                                 return 5;\r
92                         }\r
93 \r
94                         if (ui != 100000)\r
95                                 return 6;\r
96 \r
97                         // Check mul.ovf\r
98                         checked {\r
99                                 int l;\r
100                                 int m;\r
101 \r
102                                 int[][] cases = new int [][] { \r
103                                         new int [] {0, 0, 0},\r
104                                         new int [] {-5, 0, 0},\r
105                                         new int [] {3, -5, -15},\r
106                                         new int [] {3, 5, 15},\r
107                                         new int [] {-3, -5, 15},\r
108                                         new int [] {-3, 5, -15},\r
109                                         new int [] {-1, 32767, -32767},\r
110                                         new int [] {32767, -1, -32767}};\r
111 \r
112 \r
113                                 for (int j = 0; j < cases.Length; ++j)\r
114                                         if (cases [j][0] * cases [j][1] != cases [j][2])\r
115                                                 return 7 + j;\r
116                         }\r
117 \r
118                         checked {\r
119                                 int j;\r
120                                 int k;\r
121 \r
122                                 j = k = 0;\r
123                                 if (j * k != 0)\r
124                                         return 20;\r
125 \r
126                                 j = -5;\r
127                                 k = 0;\r
128                                 if (j * k != 0)\r
129                                         return 21;\r
130 \r
131                                 j = 0;\r
132                                 k = -5;\r
133                                 if (j * k != 0)\r
134                                         return 22;\r
135 \r
136                                 j = 3;\r
137                                 k = -5;\r
138                                 if (j * k != -15)\r
139                                         return 23;\r
140 \r
141                                 j = 3;\r
142                                 k = 5;\r
143                                 if (j * k != 15)\r
144                                         return 24;\r
145 \r
146                                 j = -3;\r
147                                 k = -5;\r
148                                 if (j * k != 15)\r
149                                         return 25;\r
150 \r
151                                 j = -3;\r
152                                 k = 5;\r
153                                 if (j * k != -15)\r
154                                         return 26;\r
155 \r
156                                 j = -1;\r
157                                 k = 32767;\r
158                                 if (j * k != -32767)\r
159                                         return 27;\r
160                                 \r
161                                 j = 32767;\r
162                                 k = -1;\r
163                                 if (j * k != -32767)\r
164                                         return 28;\r
165                         }\r
166 \r
167                         checked {\r
168                                 long l;\r
169                                 long m;\r
170 \r
171                                 long[][] cases = new long [][] { \r
172                                         new long [] {0, 0, 0},\r
173                                         new long [] {-5, 0, 0},\r
174                                         new long [] {3, -5, -15},\r
175                                         new long [] {3, 5, 15},\r
176                                         new long [] {-3, -5, 15},\r
177                                         new long [] {-3, 5, -15},\r
178                                         new long [] {-1, 2147483647, -2147483647},\r
179                                         new long [] {2147483647, -1, -2147483647}};\r
180 \r
181                                 for (int j = 0; j < cases.Length; ++j)\r
182                                         if (cases [j][0] * cases [j][1] != cases [j][2])\r
183                                                 return 29 + j;\r
184                         }\r
185                                 \r
186                         Console.WriteLine("test-ok");\r
187 \r
188                         return 0;\r
189                 }\r
190         }\r
191 }\r