X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Ftests%2Fdelegate.cs;h=fda09b6ccf12a0bd5e88a17fb60345e0c895bec2;hb=2ac3ad3afbc5d0c824eb59252835f751f1a27728;hp=7a3987a56c5cf21d2a2ceda41d76406d102a9758;hpb=e19e6f7b5572762f34f6fa536883523580be4a11;p=mono.git diff --git a/mono/tests/delegate.cs b/mono/tests/delegate.cs index 7a3987a56c5..fda09b6ccf1 100644 --- a/mono/tests/delegate.cs +++ b/mono/tests/delegate.cs @@ -16,13 +16,15 @@ class B { delegate void DoIt (); namespace Bah { -class Test { +class Tests { [DllImport("cygwin1.dll", EntryPoint="puts", CharSet=CharSet.Ansi)] public static extern int puts (string name); delegate void SimpleDelegate (); delegate string NotSimpleDelegate (int a); delegate int AnotherDelegate (string s); + + delegate string StringDelegate (); public int data; @@ -44,16 +46,21 @@ class Test { Console.WriteLine ("Test.VF from delegate"); } - public Test () { + public Tests () { data = 5; } - static int Main () { + + static int Main (String[] args) { + return TestDriver.RunTests (typeof (Tests), args); + } + + public static int test_0_tests () { // Check that creation of delegates do not runs the class cctor DoIt doit = new DoIt (B.method); if (A.b_cctor_run) return 1; - Test test = new Test (); + Tests test = new Tests (); SimpleDelegate d = new SimpleDelegate (F); SimpleDelegate d1 = new SimpleDelegate (test.VF); NotSimpleDelegate d2 = new NotSimpleDelegate (G); @@ -87,8 +94,120 @@ class Test { Console.WriteLine (d4.Method.DeclaringType); return 0; + } + + public static int test_0_unbox_this () { + int x = 10; + StringDelegate d5 = new StringDelegate (x.ToString); + return d5 () == "10" ? 0 : 1; + } + + delegate long LongDelegate (long l); + + static long long_delegate (long l) { + return l + 1; + } + + public static int test_56_long () { + LongDelegate l = new LongDelegate (long_delegate); + + return (int)l (55); + } + + delegate float FloatDelegate (float l); + + static float float_delegate (float l) { + return l + 1; + } + + public static int test_56_float () { + FloatDelegate l = new FloatDelegate (float_delegate); + + return (int)l (55); + } + + delegate double DoubleDelegate (double l); + + static double double_delegate (double l) { + return l + 1; + } + + public static int test_56_double () { + DoubleDelegate l = new DoubleDelegate (double_delegate); + + return (int)l (55); + } + + static int count = 0; + + public static void inc_count () { + count ++; + } + + public static int test_0_multicast () { + SimpleDelegate d = new SimpleDelegate (inc_count); + d += inc_count; + d (); + return count == 2 ? 0 : 1; + } + + public delegate int Delegate0 (); + + public delegate int Delegate1 (int i); + + public delegate int Delegate2 (int i, int j); + + public int int_field; + + public int adder0 () { + return int_field; + } + + public static int adder0_static () { + return 1; + } + + public int adder1 (int i) { + return int_field + i; + } + + public static int adder1_static (int i) { + return i; + } + + public int adder2 (int i, int j) { + return int_field + i + j; + } + + public static int adder2_static (int i, int j) { + return i + j; + } + + public static int test_0_delegate_opt () { + Tests d = new Tests (); + d.int_field = 1; + + if (new Delegate0 (d.adder0) () != 1) + return 1; + + if (new Delegate1 (d.adder1) (2) != 3) + return 2; + + if (new Delegate2 (d.adder2) (2, 3) != 6) + return 3; + + if (new Delegate0 (adder0_static) () != 1) + return 4; + + if (new Delegate1 (adder1_static) (2) != 2) + return 5; + + if (new Delegate2 (adder2_static) (2, 3) != 5) + return 6; + + return 0; } } }