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), typeof (Y), typeof (object));
225 result = Test (typeof (Y), typeof (Y), typeof (object));
229 result = Test (typeof (DateTime), typeof (DateTime));
233 result = Test (typeof (float), typeof (float));
237 result = Test (typeof (int), typeof (int), typeof (uint));
241 result = Test (typeof (uint), typeof (int), typeof (uint));
245 result = Test (typeof (long), typeof (long), typeof (ulong));
249 result = Test (typeof (ulong), typeof (long), typeof (ulong));
253 result = Test (typeof (short), typeof (short), typeof (ushort));
257 result = Test (typeof (ushort), typeof (short), 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);