Merge pull request #5714 from alexischr/update_bockbuild
[mono.git] / mcs / tests / dtest-061.cs
1 using System;
2
3 namespace Test
4 {
5         public class Program
6         {
7                 static int[] testValues = {0, -1, 200, -200, 32, -32, 64, -128, 333, 5};
8
9                 dynamic dynBase;
10                 dynamic dynAmt;
11
12                 int? optBase;
13                 int? optAmt;
14
15                 int normBase;
16                 int normAmt;
17
18                 dynamic uDynBase;
19
20                 public static void Main ()
21                 {
22                         var tester = new Program ();
23
24                         foreach (int baseVal in testValues)
25                                 foreach (int amt in testValues)
26                                         tester.ShiftTest (baseVal, amt);
27                 }
28
29                 public static void AreEqual<A, B> (A a, B b)
30                 {
31                         if (!a.Equals (b))
32                                 throw new Exception (
33                                         String.Format (
34                                                 "Shift Equality Assertion Failed: Had {0} and expected {1}", a, b));
35                 }
36
37                 public void ShiftTest (int shiftBase, int shiftAmt)
38                 {
39                         optBase = dynBase = normBase = shiftBase;
40                         optAmt = dynAmt = normAmt = shiftAmt;
41                         int immediate = shiftBase << shiftAmt;
42
43                         AreEqual<int?, int?> (dynBase << dynAmt, immediate);
44                         AreEqual<int?, int?> (dynBase << optAmt, immediate);
45                         AreEqual<int?, int?> (dynBase << normAmt, immediate);
46
47                         AreEqual<int?, int?> (optBase << dynAmt, immediate);
48                         AreEqual<int?, int?> (optBase << optAmt, immediate);
49                         AreEqual<int?, int?> (optBase << normAmt, immediate);
50
51                         AreEqual<int?, int?> (normBase << dynAmt, immediate);
52                         AreEqual<int?, int?> (normBase << optAmt, immediate);
53                         AreEqual<int?, int?> (normBase << normAmt, immediate);
54
55                         uint uShiftBase = (uint)shiftBase;
56                         uDynBase = uShiftBase;
57
58                         AreEqual<uint?, uint?> (uShiftBase << dynAmt, uDynBase << dynAmt);
59                         AreEqual<uint?, uint?> (uShiftBase << optAmt, uDynBase << optAmt);
60                         AreEqual<uint?, uint?> (uShiftBase << normAmt, uDynBase << normAmt);
61                 }
62         }
63 }