class Tests {
delegate void SimpleDelegate ();
- public static int v = 0;
-
static void F1 () {
v += 1;
Console.WriteLine ("Test.F1");
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;
}