Merge pull request #4928 from kumpera/ptr_to_struct_intrinsic
[mono.git] / mcs / tests / gtest-574.cs
1 using System;
2 using System.Collections.Generic;
3
4 public class TestClass<T1> : SequencedBase<T1>, IIndexedSorted<T1>
5 {
6         void Test ()
7         {
8                 TestClass<T1> tt = null;
9                 tt.Foo (this);
10         }
11
12         public void Foo<U> (IEnumerable<U> items)
13         {
14         }
15
16         public class Nested : ICloneable
17         {
18                 public object Clone ()
19                 {
20                         return null;
21                 }
22         }
23 }
24
25 public abstract class SequencedBase<T2> : DirectedCollectionBase<T2>, IDirectedCollectionValue<T2>
26 {
27         public T2 Field;
28 }
29
30 public abstract class DirectedCollectionBase<T3> : CollectionBase<T3>, IDirectedCollectionValue<T3>
31 {
32         IEnumerator<T3> IEnumerable<T3>.GetEnumerator ()
33         {
34                 return null;
35         }
36
37         System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator ()
38         {
39                 return null;
40         }
41 }
42
43 public abstract class CollectionBase<T4> : CollectionValueBase<T4>
44 {
45 }
46
47 public abstract class CollectionValueBase<T5> : EnumerableBase<T5>, ICollectionValue<T5>
48 {
49 }
50
51 public abstract class EnumerableBase<T6> : IEnumerable<T6>
52 {
53         IEnumerator<T6> IEnumerable<T6>.GetEnumerator ()
54         {
55                 return null;
56         }
57
58         System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator ()
59         {
60                 return null;
61         }
62 }
63
64 public interface IDirectedCollectionValue<T7> : ICollectionValue<T7>, IDirectedEnumerable<T7>
65 {
66 }
67
68 public interface ICollectionValue<T8> : IEnumerable<T8>
69 {
70 }
71
72 public interface IIndexedSorted<T9> : ISorted<T9>, IIndexed<T9>
73 {
74 }
75
76 public interface ISorted<T10> : ISequenced<T10>
77 {
78 }
79
80 public interface ISequenced<T11> : IDirectedCollectionValue<T11>
81 {
82 }
83
84 public interface IDirectedEnumerable<T12> : IEnumerable<T12>
85 {
86 }
87
88 public interface IIndexed<T13> : ISequenced<T13>
89 {
90 }
91
92 class C
93 {
94         public static void Main ()
95         {
96                 var c = new TestClass<string> ();
97         }
98 }