Merge pull request #5714 from alexischr/update_bockbuild
[mono.git] / mono / tests / delegate7.cs
index 6e1fe94e17ae896af4f52d07276956143371704f..dd3a2a3ea27a4cbebd7ccb25cf428109d8afd7ea 100644 (file)
@@ -4,8 +4,6 @@ using System.Runtime.InteropServices;
 class Tests {
        delegate void SimpleDelegate ();
 
-       public static int v = 0;
-       
        static void F1 () {
                v += 1;
                Console.WriteLine ("Test.F1");
@@ -14,45 +12,148 @@ class Tests {
                v += 2;
                Console.WriteLine ("Test.F2");
        }
-       static void F3 () {
+       static void F4 () {
                v += 4;
-               Console.WriteLine ("Test.F3");
+               Console.WriteLine ("Test.F4");
+       }
+       static void F8 () {
+               v += 8;
+               Console.WriteLine ("Test.F8");
        }
 
        public static int Main () {
                return TestDriver.RunTests (typeof (Tests));
        }
 
+       static int v = 0;
+       static bool check_is_expected_v (SimpleDelegate d, int expected_v)
+       {
+               v = 0;
+               d ();
+               return v == expected_v;
+       }
+
        static public int test_0_test () {
-               SimpleDelegate t;
                SimpleDelegate d1 = new SimpleDelegate (F1);
                SimpleDelegate d2 = new SimpleDelegate (F2);
-               SimpleDelegate d3 = new SimpleDelegate (F3);
+               SimpleDelegate d4 = new SimpleDelegate (F4);
+               SimpleDelegate d8 = new SimpleDelegate (F8);
+
+               if (d1 - d1 != null)
+                       return 1;
+               if (!check_is_expected_v (d1 - d2, 1))
+                       return 2;
+               if (!check_is_expected_v (d1 - d4, 1))
+                       return 3;
+
+               if (!check_is_expected_v (d2 - d1, 2))
+                       return 4;
+               if (d2 - d2 != null)
+                       return 5;
+               if (!check_is_expected_v (d2 - d4, 2))
+                       return 6;
+
+               if (!check_is_expected_v (d4 - d1, 4))
+                       return 7;
+               if (!check_is_expected_v (d4 - d2, 4))
+                       return 8;
+               if (d4 - d4 != null)
+                       return 9;
 
                SimpleDelegate d12 = d1 + d2;
-               SimpleDelegate d13 = d1 + d3;
-               SimpleDelegate d23 = d2 + d3;
-               SimpleDelegate d123 = d1 + d2 + d3;
+               SimpleDelegate d14 = d1 + d4;
+               SimpleDelegate d24 = d2 + d4;
+
+               if (!check_is_expected_v (d12 - d1, 2))
+                       return 11;
+               if (!check_is_expected_v (d12 - d2, 1))
+                       return 12;
+               if (!check_is_expected_v (d12 - d4, 3))
+                       return 13;
+
+               if (!check_is_expected_v (d14 - d1, 4))
+                       return 14;
+               if (!check_is_expected_v (d14 - d2, 5))
+                       return 15;
+               if (!check_is_expected_v (d14 - d4, 1))
+                       return 16;
+
+               if (!check_is_expected_v (d14 - d1, 4))
+                       return 17;
+               if (!check_is_expected_v (d14 - d2, 5))
+                       return 18;
+               if (!check_is_expected_v (d14 - d4, 1))
+                       return 19;
+
+               if (d12 - d12 != null)
+                       return 21;
+               if (!check_is_expected_v (d12 - d14, 3))
+                       return 22;
+               if (!check_is_expected_v (d12 - d24, 3))
+                       return 23;
+
+               if (!check_is_expected_v (d14 - d12, 5))
+                       return 24;
+               if (d14 - d14 != null)
+                       return 25;
+               if (!check_is_expected_v (d14 - d24, 5))
+                       return 26;
+
+               if (!check_is_expected_v (d24 - d12, 6))
+                       return 27;
+               if (!check_is_expected_v (d24 - d14, 6))
+                       return 28;
+               if (d24 - d24 != null)
+                       return 29;
+
+               SimpleDelegate d124 = d1 + d2 + d4;
+
+               if (!check_is_expected_v (d124 - d1, 6))
+                       return 31;
+               if (!check_is_expected_v (d124 - d2, 5))
+                       return 32;
+               if (!check_is_expected_v (d124 - d4, 3))
+                       return 33;
+
+               if (!check_is_expected_v (d124 - d12, 4))
+                       return 34;
+               if (!check_is_expected_v (d124 - d14, 7))
+                       return 35;
+               if (!check_is_expected_v (d124 - d24, 1))
+                       return 36;
+
+               if (d124 - d124 != null)
+                       return 37;
+
+               SimpleDelegate d1248 = d1 + d2 + d4 + d8;
+
+               if (!check_is_expected_v (d1248 - (d1 + d2), 12))
+                       return 41;
+               if (!check_is_expected_v (d1248 - (d1 + d4), 15))
+                       return 42;
+               if (!check_is_expected_v (d1248 - (d1 + d8), 15))
+                       return 43;
+               if (!check_is_expected_v (d1248 - (d2 + d4), 9))
+                       return 44;
+               if (!check_is_expected_v (d1248 - (d2 + d8), 15))
+                       return 45;
+               if (!check_is_expected_v (d1248 - (d4 + d8), 3))
+                       return 46;
+
+               if (!check_is_expected_v (d1248 - (d1 + d2 + d4), 8))
+                       return 51;
+               if (!check_is_expected_v (d1248 - (d1 + d2 + d8), 15))
+                       return 52;
+               if (!check_is_expected_v (d1248 - (d1 + d4 + d8), 15))
+                       return 53;
+               if (!check_is_expected_v (d1248 - (d2 + d4 + d8), 1))
+                       return 54;
+               if (!check_is_expected_v (d1248 - (d2 + d4 + d8), 1))
+                       return 54;
+
+               if (d1248 - d1248 != null)
+                       return 55;
 
-               v = 0;
-               t = d123 - d13;
-               t ();
-               if (v != 7)
-                       return 1;
-               
-               v = 0;
-               t = d123 - d12;
-               t ();
-               if (v != 4)
-                       return 1;
-               
-               v = 0;
-               t = d123 - d23;
-               t ();
-               if (v != 1)
-                       return 1;
-               
-               
                return 0;
        }