--- /dev/null
--- /dev/null
++using System;
++
++public class X
++{
++ public delegate void TestDelegate ();
++
++ static long sum_i, sum_j, sum_k;
++ static ulong sum_p, sum_q;
++
++ public static int Test (int p)
++ {
++ TestDelegate d = null;
++ for (int i = 1; i <= 5; i++) {
++ for (int j = i; j <= 8; j++) {
++ int k = i;
++ TestDelegate temp = delegate {
++ Console.WriteLine ("i = {0}, j = {1}, k = {2}, p = {3}",
++ i, j, k, p);
++ sum_i += 1 << i;
++ sum_j += 1 << j;
++ sum_k += 1 << k;
++ sum_p += (ulong) (1 << p);
++ p += k;
++
++ ulong q = (ulong) (i * j);
++
++ d += delegate {
++ Console.WriteLine ("Nested i = {0}, j = {1}, " +
++ "k = {2}, p = {3}, q = {4}",
++ i, j, k, p, q);
++ sum_q += q;
++ };
++ };
++ temp ();
++ d += temp;
++ }
++ }
++ Console.WriteLine ("SUM i = {0}, j = {1}, k = {2}, p = {3}",
++ sum_i, sum_j, sum_k, sum_p);
++ Console.WriteLine ();
++ if (sum_i != 300)
++ return 1;
++ if (sum_j != 2498)
++ return 2;
++ if (sum_k != 300)
++ return 3;
++ if (sum_p != 1825434804)
++ return 4;
++ sum_i = sum_j = sum_k = 0;
++ sum_p = sum_q = 0;
++ d();
++ Console.WriteLine ("SUM i = {0}, j = {1}, k = {2}, p = {3}, q = {4}",
++ sum_i, sum_j, sum_k, sum_p, sum_q);
++ Console.WriteLine ();
++ if (sum_i != 1920)
++ return 5;
++ if (sum_j != 15360)
++ return 6;
++ if (sum_k != 300)
++ return 7;
++ if (sum_p != 18446744073385831629)
++ return 8;
++ if (sum_q != 455)
++ return 9;
++ return 0;
++ }
++
++ public static int Main ()
++ {
++ int result = Test (5);
++ if (result != 0)
++ Console.WriteLine ("ERROR: {0}", result);
++ else
++ Console.WriteLine ("OK");
++ return result;
++ }
++}