Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarek Safar <marek.safar@gmail.com>2009-07-29 17:53:27 +0400
committerMarek Safar <marek.safar@gmail.com>2009-07-29 17:53:27 +0400
commit907bca6614f5f4bc245b75d4edda60e935d2ee3a (patch)
tree3260b6bdc6b39cb97edd5bedee94bec2838d30e8 /mcs/tests/gtest-lambda-06.cs
parente1198af4d6215699be97ff91c026eaf941d57bea (diff)
parenta73150931d8c1d2c5e46f2a2135fcf4026f59009 (diff)
Use correct naming, add 4.0 profile
svn path=/trunk/mcs/; revision=138957
Diffstat (limited to 'mcs/tests/gtest-lambda-06.cs')
-rw-r--r--mcs/tests/gtest-lambda-06.cs54
1 files changed, 54 insertions, 0 deletions
diff --git a/mcs/tests/gtest-lambda-06.cs b/mcs/tests/gtest-lambda-06.cs
new file mode 100644
index 00000000000..4cf18079c13
--- /dev/null
+++ b/mcs/tests/gtest-lambda-06.cs
@@ -0,0 +1,54 @@
+// Inspired by
+// http://blogs.msdn.com/ericlippert/archive/2007/03/28/lambda-expressions-vs-anonymous-methods-part-five.aspx
+
+using System;
+
+class TestClass
+{
+ delegate void DT (T t);
+ delegate void DF (F f);
+
+ struct T { }
+ struct F { }
+
+ static void P (DT dt)
+ {
+ Console.WriteLine ("True");
+ dt (new T ());
+ }
+
+ static void P (DF df)
+ {
+ System.Console.WriteLine ("False");
+ df (new F ());
+ }
+
+ static T And (T a1, T a2) { return new T (); }
+ static F And (T a1, F a2) { return new F (); }
+ static F And (F a1, T a2) { return new F (); }
+ static F And (F a1, F a2) { return new F (); }
+
+ static T Or (T a1, T a2) { return new T (); }
+ static T Or (T a1, F a2) { return new T (); }
+ static T Or (F a1, T a2) { return new T (); }
+ static F Or (F a1, F a2) { return new F (); }
+
+ static F Not (T a) { return new F (); }
+ static T Not (F a) { return new T (); }
+
+ static void StopTrue (T t) { }
+
+ static int Main ()
+ {
+ // Test that we encode (!v3) & ((!v1) & ((v1 | v2) & (v2 | v3)))
+ P (v1 => P (v2 => P (v3 => StopTrue (
+ And (Not (v3),
+ And (Not (v1),
+ And (Or (v1, v2), Or (v2, v3))
+ )
+ )
+ ))));
+
+ return 0;
+ }
+}