2 using System
.Collections
;
3 using System
.Collections
.Generic
;
15 public static class CollectionTester
17 static int Test
<T
> (IList
<T
> list
)
22 ICollection
<T
> collection
= list
;
23 if (collection
.Count
!= 1)
26 IEnumerable
<T
> enumerable
= list
;
27 IEnumerator
<T
> enumerator
= enumerable
.GetEnumerator ();
28 if (!enumerator
.MoveNext ())
30 if (enumerator
.MoveNext ())
36 public static int Test ()
39 X
[] xarray
= new X
[] { new X () }
;
42 result
= Test
<X
> (xarray
);
46 result
= Test
<object> (xarray
);
50 result
= Test
<Y
> (xarray
);
56 int[] iarray
= new int [] { 5 }
;
57 result
= Test
<int> (iarray
);
61 result
= Test
<uint> ((IList
<uint>) (object) iarray
);
65 uint[] uiarray
= new uint [] { 5 }
;
66 result
= Test
<int> ((IList
<int>) (object) uiarray
);
70 result
= Test
<uint> (uiarray
);
76 long[] larray
= new long [] { 5 }
;
77 result
= Test
<long> (larray
);
81 result
= Test
<ulong> ((IList
<ulong>) (object) larray
);
85 ulong[] ularray
= new ulong [] { 5 }
;
86 result
= Test
<long> ((IList
<long>) (object) ularray
);
90 result
= Test
<ulong> (ularray
);
96 short[] sarray
= new short [] { 5 }
;
97 result
= Test
<short> (sarray
);
101 result
= Test
<ushort> ((IList
<ushort>) (object) sarray
);
105 ushort[] usarray
= new ushort [] { 5 }
;
106 result
= Test
<short> ((IList
<short>) (object) usarray
);
110 result
= Test
<ushort> (usarray
);
116 byte[] barray
= new byte [] { 5 }
;
117 result
= Test
<byte> (barray
);
121 result
= Test
<sbyte> ((IList
<sbyte>) (object) barray
);
125 sbyte[] sbarray
= new sbyte [] { 5 }
;
126 result
= Test
<byte> ((IList
<byte>) (object) sbarray
);
130 result
= Test
<sbyte> (sbarray
);
139 public static class InterfaceTester
141 public const bool Debug
= false;
143 static readonly Type ilist_type
;
144 static readonly Type icollection_type
;
145 static readonly Type ienumerable_type
;
146 static readonly Type generic_ilist_type
;
147 static readonly Type generic_icollection_type
;
148 static readonly Type generic_ienumerable_type
;
149 static readonly Type icloneable_type
;
151 static InterfaceTester ()
153 ilist_type
= typeof (IList
);
154 icollection_type
= typeof (ICollection
);
155 ienumerable_type
= typeof (IEnumerable
);
156 generic_ilist_type
= typeof (IList
<>);
157 generic_icollection_type
= typeof (ICollection
<>);
158 generic_ienumerable_type
= typeof (IEnumerable
<>);
159 icloneable_type
= typeof (ICloneable
);
168 static int Test (Type t
, params Type
[] iface_types
)
170 Hashtable ifaces
= new Hashtable ();
171 ifaces
.Add (ilist_type
, State
.Missing
);
172 ifaces
.Add (icollection_type
, State
.Missing
);
173 ifaces
.Add (ienumerable_type
, State
.Missing
);
174 ifaces
.Add (icloneable_type
, State
.Missing
);
176 Type array_type
= t
.MakeArrayType ();
179 Console
.WriteLine ("Checking {0}", t
);
180 foreach (Type iface
in t
.GetInterfaces ())
181 Console
.WriteLine (" {0}", iface
);
184 foreach (Type iface
in iface_types
) {
185 Type
[] gargs
= new Type
[] { iface }
;
186 ifaces
.Add (generic_ilist_type
.MakeGenericType (gargs
), State
.Missing
);
187 ifaces
.Add (generic_icollection_type
.MakeGenericType (gargs
), State
.Missing
);
188 ifaces
.Add (generic_ienumerable_type
.MakeGenericType (gargs
), State
.Missing
);
191 foreach (Type iface
in array_type
.GetInterfaces ()) {
192 if (ifaces
.Contains (iface
))
193 ifaces
[iface
] = State
.Found
;
195 ifaces
.Add (iface
, State
.Extra
);
200 foreach (Type iface
in ifaces
.Keys
) {
201 State state
= (State
) ifaces
[iface
];
202 if (state
== State
.Found
) {
204 Console
.WriteLine ("Found {0}", iface
);
208 Console
.WriteLine ("ERROR: {0} {1}", iface
, state
);
214 Console
.WriteLine ();
219 public static int Test ()
221 int result
= Test (typeof (X
), typeof (X
));
225 result
= Test (typeof (Y
), typeof (Y
));
229 result
= Test (typeof (DateTime
), typeof (DateTime
));
233 result
= Test (typeof (float), typeof (float));
237 result
= Test (typeof (int), typeof (int));
241 result
= Test (typeof (uint), typeof (uint));
245 result
= Test (typeof (long), typeof (long));
249 result
= Test (typeof (ulong), typeof (ulong));
253 result
= Test (typeof (short), typeof (short));
257 result
= Test (typeof (ushort), typeof (ushort));
261 result
= Test (typeof (Foo
), typeof (Foo
));
263 return 1000 + result
;
274 result
= CollectionTester
.Test ();
277 result
= InterfaceTester
.Test ();
279 return 10000 + result
;
285 int result
= Test ();
287 Console
.WriteLine ("OK");
289 Console
.WriteLine ("ERROR: {0}", result
);