* test-587.cs: test for bug #328136.
[mono.git] / mcs / tests / gtest-linq-01.cs
1 // Compiler options: -langversion:linq
2
3 using System;
4 using System.Collections.Generic;
5 using System.Linq;
6
7 namespace from
8 {
9         interface ITest
10         {
11                 int Id { get; }
12         }
13
14         class C
15         {
16                 // This is pure grammar test
17                 public static void Main ()
18                 {
19                         int[] i2 = new int [] { 0, 1 };
20                         int[] i_b = new int [] { 0, 1 };
21                         ITest[] join_test = null;
22                         
23                         IEnumerable<int> e;
24                         IEnumerable<IGrouping<int,int>> g;
25
26                         // FROM
27                         e = from i in i2 select i;
28                         e = from int i in i2 select i;
29                         var e2 = from bool? i in i2 select i;
30                         e = from i in new int[0] select i;
31                         e = from x in i2 from y in i2 select y;
32
33                         // WHERE
34                         e = from i in i2 where i % 3 != 0 select i;
35
36                         // ORDER BY
37                         e = from i in i2 orderby i select i;
38                         e = from i in i2 orderby i, i, i, i select i;
39                         e = from i in i2 orderby i descending select i;
40                         e = from i in i2 orderby i ascending select i;
41                         
42                         // JOIN
43                         e = from i in i2 join j in join_test on i equals j.Id select i;
44                         e = from i in i2 join ITest j in join_test on i equals j.Id select i;
45                         e = from i in i2 join j in join_test on i equals j.Id
46                                 join j2 in join_test on i equals j2.Id select i;
47                         e = from i in i2 join j in i_b on i equals j into j select i;
48                         e = from i in i2 join int j in i_b on i equals j into j select i;
49
50                         // GROUP BY
51                         g = from i in i2 group i by 2;
52                         g = from i in i2 group i by 2 into i select i;
53
54                         // LET
55                         e = from i in i2 let l = i + 4 select i;
56                         e = from i in i2 let l = i + 4 let l2 = l + 2 select i;
57                         
58                         // INTO
59                         g = from i in i2 group i by 2 into i9
60                                 from i in i2 group i by 2 into i9
61                                 from i in i2 group i by 2 into i9
62                                 from i in i2 group i by 2 into i9
63                                 select i9;
64
65                         int from = 0;
66                         bool let = false;
67                         
68                         // TODO: Re-enable when we fix cast of query expression
69                         //object o = (object)from i in i2 select i;
70                 }
71                 
72                 int foo;
73                 void Do (string[] args)
74                 {
75                         int from = this.foo;
76                         Console.WriteLine (args [from]);
77                 }               
78         }
79 }