do not check order sequence if option /order was not used
[mono.git] / mcs / tests / gtest-lambda-06.cs
1 // Inspired by
2 // http://blogs.msdn.com/ericlippert/archive/2007/03/28/lambda-expressions-vs-anonymous-methods-part-five.aspx
3
4 using System;
5
6 class TestClass
7 {       
8         delegate void DT (T t);
9         delegate void DF (F f);
10
11         struct T { }
12         struct F { }
13         
14         static void P (DT dt)
15         {
16                 Console.WriteLine ("True");
17                 dt (new T ());
18         }
19
20         static void P (DF df)
21         {
22                 System.Console.WriteLine ("False");
23                 df (new F ());
24         }
25
26         static T And (T a1, T a2) { return new T (); }
27         static F And (T a1, F a2) { return new F (); }
28         static F And (F a1, T a2) { return new F (); }
29         static F And (F a1, F a2) { return new F (); }
30         
31         static T Or (T a1, T a2) { return new T (); }
32         static T Or (T a1, F a2) { return new T (); }
33         static T Or (F a1, T a2) { return new T (); }
34         static F Or (F a1, F a2) { return new F (); }
35         
36         static F Not (T a) { return new F (); }
37         static T Not (F a) { return new T (); }
38         
39         static void StopTrue (T t) { }
40
41         static int Main ()
42         {
43                 // Test that we encode (!v3) & ((!v1) & ((v1 | v2) & (v2 | v3)))
44                 P (v1 => P (v2 => P (v3 => StopTrue (
45                   And (Not (v3),
46                         And (Not (v1),
47                                 And (Or (v1, v2), Or (v2, v3))
48                                 )
49                         )
50                 ))));
51                 
52                 return 0;
53         }
54 }