2 Copyright (c) 2003-2006 Niels Kokholm and Peter Sestoft
3 Permission is hereby granted, free of charge, to any person obtaining a copy
4 of this software and associated documentation files (the "Software"), to deal
5 in the Software without restriction, including without limitation the rights
6 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 copies of the Software, and to permit persons to whom the Software is
8 furnished to do so, subject to the following conditions:
10 The above copyright notice and this permission notice shall be included in
11 all copies or substantial portions of the Software.
13 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
24 using NUnit.Framework;
25 using SCG = System.Collections.Generic;
28 namespace C5UnitTests.interfaces
31 public class ICollectionsTests
33 public void TryC5Coll(ICollection<double> coll)
35 Assert.AreEqual(0, coll.Count);
38 Assert.IsFalse(coll.IsReadOnly);
41 Assert.AreEqual(2, coll.Count);
42 Assert.IsTrue(coll.Contains(2.3));
43 Assert.IsFalse(coll.Contains(3.1));
44 Assert.IsFalse(coll.Remove(3.1));
45 Assert.IsTrue(coll.Remove(3.2));
46 Assert.IsFalse(coll.Contains(3.1));
47 Assert.AreEqual(1, coll.Count);
49 Assert.AreEqual(0, coll.Count);
50 Assert.IsFalse(coll.Remove(3.1));
53 public void TrySCGColl(SCG.ICollection<double> coll)
55 // All members of SCG.ICollection<T>
56 Assert.AreEqual(0, coll.Count);
59 Assert.IsFalse(coll.IsReadOnly);
62 Assert.AreEqual(2, coll.Count);
63 Assert.IsTrue(coll.Contains(2.3));
64 Assert.IsFalse(coll.Contains(3.1));
65 Assert.IsFalse(coll.Remove(3.1));
66 Assert.IsTrue(coll.Remove(3.2));
67 Assert.IsFalse(coll.Contains(3.1));
68 Assert.AreEqual(1, coll.Count);
70 Assert.AreEqual(0, coll.Count);
71 Assert.IsFalse(coll.Remove(3.1));
74 public void TryBothColl(ICollection<double> coll)
84 TryBothColl(new HashSet<double>());
85 TryBothColl(new HashBag<double>());
86 TryBothColl(new TreeSet<double>());
87 TryBothColl(new TreeBag<double>());
88 TryBothColl(new ArrayList<double>());
89 TryBothColl(new LinkedList<double>());
90 TryBothColl(new HashedArrayList<double>());
91 TryBothColl(new HashedLinkedList<double>());
92 TryBothColl(new SortedArray<double>());
97 public class SCIListTests
103 public void TrySCIList(System.Collections.IList list)
105 // Should be called with a C5.IList<B> which is not a WrappedArray
106 Assert.AreEqual(0, list.Count);
107 list.CopyTo(new A[0], 0);
108 list.CopyTo(new B[0], 0);
109 list.CopyTo(new C[0], 0);
110 Assert.IsTrue(!list.IsFixedSize);
111 Assert.IsFalse(list.IsReadOnly);
112 Assert.IsFalse(list.IsSynchronized);
113 Assert.AreNotEqual(null, list.SyncRoot);
114 Object b1 = new B(), b2 = new B(), c1 = new C(), c2 = new C();
115 Assert.AreEqual(0, list.Add(b1));
116 Assert.AreEqual(1, list.Add(c1));
117 Assert.AreEqual(2, list.Count);
118 Assert.IsTrue(list.Contains(c1));
119 Assert.IsFalse(list.Contains(b2));
121 Assert.AreEqual(b2, list[0]);
123 Assert.AreEqual(c2, list[1]);
124 Assert.IsTrue(list.Contains(b2));
125 Assert.IsTrue(list.Contains(c2));
126 Array arrA = new A[2], arrB = new B[2];
127 list.CopyTo(arrA, 0);
128 list.CopyTo(arrB, 0);
129 Assert.AreEqual(b2, arrA.GetValue(0));
130 Assert.AreEqual(b2, arrB.GetValue(0));
131 Assert.AreEqual(c2, arrA.GetValue(1));
132 Assert.AreEqual(c2, arrB.GetValue(1));
133 Assert.AreEqual(0, list.IndexOf(b2));
134 Assert.AreEqual(-1, list.IndexOf(b1));
137 Assert.IsFalse(list.Contains(b2));
138 Assert.AreEqual(1, list.Count); // Contains c2 only
141 Assert.AreEqual(b2, list[0]);
142 Assert.AreEqual(c2, list[1]);
143 Assert.AreEqual(b1, list[2]);
145 Assert.AreEqual(b2, list[0]);
146 Assert.AreEqual(b1, list[1]);
148 Assert.AreEqual(b2, list[0]);
150 Assert.AreEqual(0, list.Count);
157 TrySCIList(new ArrayList<B>());
158 TrySCIList(new HashedArrayList<B>());
159 TrySCIList(new LinkedList<B>());
160 TrySCIList(new HashedLinkedList<B>());
164 public void TryWrappedArrayAsSCIList1()
166 B[] myarray = new B[] { new B(), new B(), new C() };
167 System.Collections.IList list = new WrappedArray<B>(myarray);
168 // Should be called with a three-element WrappedArray<B>
169 Assert.AreEqual(3, list.Count);
170 Assert.IsTrue(list.IsFixedSize);
171 Assert.IsFalse(list.IsSynchronized);
172 Assert.AreNotEqual(null, list.SyncRoot);
173 Assert.AreEqual(myarray.SyncRoot, list.SyncRoot);
174 Object b1 = new B(), b2 = new B(), c1 = new C(), c2 = new C();
176 Assert.AreEqual(b2, list[0]);
178 Assert.AreEqual(c2, list[1]);
179 Assert.IsTrue(list.Contains(b2));
180 Assert.IsTrue(list.Contains(c2));
181 Array arrA = new A[3], arrB = new B[3];
182 list.CopyTo(arrA, 0);
183 list.CopyTo(arrB, 0);
184 Assert.AreEqual(b2, arrA.GetValue(0));
185 Assert.AreEqual(b2, arrB.GetValue(0));
186 Assert.AreEqual(c2, arrA.GetValue(1));
187 Assert.AreEqual(c2, arrB.GetValue(1));
188 Assert.AreEqual(0, list.IndexOf(b2));
189 Assert.AreEqual(-1, list.IndexOf(b1));
190 Assert.AreEqual(-1, list.IndexOf(c1));
191 Assert.IsFalse(list.Contains(b1));
192 Assert.IsFalse(list.Contains(c1));
196 public void TryWrappedArrayAsSCIList2()
198 B[] myarray = new B[] { };
199 System.Collections.IList list = new WrappedArray<B>(myarray);
200 // Should be called with an empty WrappedArray<B>
201 Assert.AreEqual(0, list.Count);
202 list.CopyTo(new A[0], 0);
203 list.CopyTo(new B[0], 0);
204 list.CopyTo(new C[0], 0);
205 Assert.IsFalse(list.IsSynchronized);
206 Assert.AreNotEqual(null, list.SyncRoot);
207 Object b1 = new B(), b2 = new B(), c1 = new C(), c2 = new C();
208 Assert.IsFalse(list.Contains(b2));
209 Assert.IsFalse(list.Contains(c2));
210 Assert.AreEqual(-1, list.IndexOf(b1));
211 Assert.AreEqual(-1, list.IndexOf(c1));
215 public void TryGuardedListAsSCIList1()
217 B b1_ = new B(), b2_ = new B();
218 C c1_ = new C(), c2_ = new C();
219 ArrayList<B> mylist = new ArrayList<B>();
220 mylist.AddAll(new B[] { b1_, b2_, c1_ });
221 System.Collections.IList list = new GuardedList<B>(mylist);
222 Object b1 = b1_, b2 = b2_, c1 = c1_, c2 = c2_;
223 // Should be called with a three-element GuardedList<B>
224 Assert.AreEqual(3, list.Count);
225 Assert.IsTrue(list.IsFixedSize);
226 Assert.IsTrue(list.IsReadOnly);
227 Assert.IsFalse(list.IsSynchronized);
228 Assert.AreNotEqual(null, list.SyncRoot);
229 Assert.AreEqual(list.SyncRoot, ((System.Collections.IList)mylist).SyncRoot);
230 Assert.IsTrue(list.Contains(b1));
231 Assert.IsTrue(list.Contains(b2));
232 Assert.IsTrue(list.Contains(c1));
233 Assert.IsFalse(list.Contains(c2));
234 Array arrA = new A[3], arrB = new B[3];
235 list.CopyTo(arrA, 0);
236 list.CopyTo(arrB, 0);
237 Assert.AreEqual(b1, arrA.GetValue(0));
238 Assert.AreEqual(b1, arrB.GetValue(0));
239 Assert.AreEqual(b2, arrA.GetValue(1));
240 Assert.AreEqual(b2, arrB.GetValue(1));
241 Assert.AreEqual(0, list.IndexOf(b1));
242 Assert.AreEqual(-1, list.IndexOf(c2));
246 public void TryGuardedListAsSCIList2()
248 System.Collections.IList list = new GuardedList<B>(new ArrayList<B>());
249 // Should be called with an empty GuardedList<B>
250 Assert.AreEqual(0, list.Count);
251 list.CopyTo(new A[0], 0);
252 list.CopyTo(new B[0], 0);
253 list.CopyTo(new C[0], 0);
254 Assert.IsFalse(list.IsSynchronized);
255 Assert.AreNotEqual(null, list.SyncRoot);
256 Object b1 = new B(), b2 = new B(), c1 = new C(), c2 = new C();
257 Assert.IsFalse(list.Contains(b2));
258 Assert.IsFalse(list.Contains(c2));
259 Assert.AreEqual(-1, list.IndexOf(b1));
260 Assert.AreEqual(-1, list.IndexOf(c1));
264 public void TryViewOfGuardedListAsSCIList1()
266 B b1_ = new B(), b2_ = new B();
267 C c1_ = new C(), c2_ = new C();
268 ArrayList<B> mylist = new ArrayList<B>();
269 mylist.AddAll(new B[] { new B(), b1_, b2_, c1_, new B()});
270 System.Collections.IList list = new GuardedList<B>(mylist).View(1, 3);
271 Object b1 = b1_, b2 = b2_, c1 = c1_, c2 = c2_;
272 // Should be called with a three-element view of a GuardedList<B>
273 Assert.AreEqual(3, list.Count);
274 Assert.IsTrue(list.IsFixedSize);
275 Assert.IsTrue(list.IsReadOnly);
276 Assert.IsFalse(list.IsSynchronized);
277 Assert.AreNotEqual(null, list.SyncRoot);
278 Assert.AreEqual(list.SyncRoot, ((System.Collections.IList)mylist).SyncRoot);
279 Assert.IsTrue(list.Contains(b1));
280 Assert.IsTrue(list.Contains(b2));
281 Assert.IsTrue(list.Contains(c1));
282 Assert.IsFalse(list.Contains(c2));
283 Array arrA = new A[3], arrB = new B[3];
284 list.CopyTo(arrA, 0);
285 list.CopyTo(arrB, 0);
286 Assert.AreEqual(b1, arrA.GetValue(0));
287 Assert.AreEqual(b1, arrB.GetValue(0));
288 Assert.AreEqual(b2, arrA.GetValue(1));
289 Assert.AreEqual(b2, arrB.GetValue(1));
290 Assert.AreEqual(0, list.IndexOf(b1));
291 Assert.AreEqual(-1, list.IndexOf(c2));
295 public void TryViewOfGuardedListAsSCIList2()
297 System.Collections.IList list = new GuardedList<B>(new ArrayList<B>()).View(0, 0);
298 Assert.AreEqual(0, list.Count);
299 list.CopyTo(new A[0], 0);
300 list.CopyTo(new B[0], 0);
301 list.CopyTo(new C[0], 0);
302 Assert.IsFalse(list.IsSynchronized);
303 Assert.AreNotEqual(null, list.SyncRoot);
304 Object b1 = new B(), b2 = new B(), c1 = new C(), c2 = new C();
305 Assert.IsFalse(list.Contains(b2));
306 Assert.IsFalse(list.Contains(c2));
307 Assert.AreEqual(-1, list.IndexOf(b1));
308 Assert.AreEqual(-1, list.IndexOf(c1));
311 void TryListViewAsSCIList1(IList<B> mylist)
313 B b1_ = new B(), b2_ = new B();
314 C c1_ = new C(), c2_ = new C();
315 mylist.AddAll(new B[] { new B(), b1_, b2_, c1_, new B() });
316 System.Collections.IList list = mylist.View(1, 3);
317 Object b1 = b1_, b2 = b2_, c1 = c1_, c2 = c2_;
318 // Should be called with a three-element view on ArrayList<B>
319 Assert.AreEqual(3, list.Count);
320 Assert.IsFalse(list.IsSynchronized);
321 Assert.AreNotEqual(null, list.SyncRoot);
322 Assert.AreEqual(list.SyncRoot, mylist.SyncRoot);
323 Assert.IsTrue(list.Contains(b1));
324 Assert.IsTrue(list.Contains(b2));
325 Assert.IsTrue(list.Contains(c1));
326 Assert.IsFalse(list.Contains(c2));
327 Array arrA = new A[3], arrB = new B[3];
328 list.CopyTo(arrA, 0);
329 list.CopyTo(arrB, 0);
330 Assert.AreEqual(b1, arrA.GetValue(0));
331 Assert.AreEqual(b1, arrB.GetValue(0));
332 Assert.AreEqual(b2, arrA.GetValue(1));
333 Assert.AreEqual(b2, arrB.GetValue(1));
334 Assert.AreEqual(0, list.IndexOf(b1));
335 Assert.AreEqual(-1, list.IndexOf(c2));
338 void TryListViewAsSCIList2(IList<B> mylist)
340 System.Collections.IList list = mylist.View(0, 0);
341 Assert.AreEqual(0, list.Count);
342 list.CopyTo(new A[0], 0);
343 list.CopyTo(new B[0], 0);
344 list.CopyTo(new C[0], 0);
345 Assert.IsFalse(list.IsSynchronized);
346 Assert.AreNotEqual(null, list.SyncRoot);
347 Assert.AreEqual(list.SyncRoot, mylist.SyncRoot);
348 Object b1 = new B(), b2 = new B(), c1 = new C(), c2 = new C();
349 Assert.IsFalse(list.Contains(b2));
350 Assert.IsFalse(list.Contains(c2));
351 Assert.AreEqual(-1, list.IndexOf(b1));
352 Assert.AreEqual(-1, list.IndexOf(c1));
356 public void TryArrayListViewAsSCIList()
358 TryListViewAsSCIList1(new ArrayList<B>());
359 TryListViewAsSCIList2(new ArrayList<B>());
363 public void TryLinkedListViewAsSCIList()
365 TryListViewAsSCIList1(new LinkedList<B>());
366 TryListViewAsSCIList2(new LinkedList<B>());
370 public void TryHashedArrayListViewAsSCIList()
372 TryListViewAsSCIList1(new HashedArrayList<B>());
373 TryListViewAsSCIList2(new HashedArrayList<B>());
377 public void TryHashedLinkedListViewAsSCIList()
379 TryListViewAsSCIList1(new HashedLinkedList<B>());
380 TryListViewAsSCIList2(new HashedLinkedList<B>());
384 public void TryGuardedViewAsSCIList()
386 ArrayList<B> mylist = new ArrayList<B>();
387 TryListViewAsSCIList2(new GuardedList<B>(mylist));
392 public class IDictionaryTests
394 public void TryDictionary(IDictionary<string,string> dict)
396 Assert.AreEqual(0, dict.Count);
397 Assert.IsTrue(dict.IsEmpty);
398 Assert.IsFalse(dict.IsReadOnly);
399 KeyValuePair<string,string>[] arr = { };
405 Assert.IsTrue(dict.Update("R", "A1"));
406 Assert.AreEqual("A1", dict["R"]);
408 Assert.IsFalse(dict.Update("U", "D1"));
409 Assert.IsFalse(dict.Contains("U"));
411 Assert.IsTrue(dict.Update("R", "A2", out old));
412 Assert.AreEqual("A2", dict["R"]);
413 Assert.AreEqual("A1", old);
415 Assert.IsFalse(dict.Update("U", "D2", out old));
416 Assert.AreEqual(null, old);
417 Assert.IsFalse(dict.Contains("U"));
419 Assert.IsTrue(dict.UpdateOrAdd("R", "A3"));
420 Assert.AreEqual("A3", dict["R"]);
422 Assert.IsFalse(dict.UpdateOrAdd("U", "D3"));
423 Assert.IsTrue(dict.Contains("U"));
424 Assert.AreEqual("D3", dict["U"]);
426 Assert.IsTrue(dict.UpdateOrAdd("R", "A4", out old));
427 Assert.AreEqual("A4", dict["R"]);
428 Assert.AreEqual("A3", old);
430 Assert.IsTrue(dict.UpdateOrAdd("U", "D4", out old));
431 Assert.IsTrue(dict.Contains("U"));
432 Assert.AreEqual("D4", dict["U"]);
433 Assert.AreEqual("D3", old);
435 Assert.IsFalse(dict.UpdateOrAdd("V", "E1", out old));
436 Assert.IsTrue(dict.Contains("V"));
437 Assert.AreEqual("E1", dict["V"]);
438 Assert.AreEqual(null, old);
442 public void TestHashDictionary()
444 TryDictionary(new HashDictionary<string,string>());
448 public void TestTreeDictionary()
450 TryDictionary(new TreeDictionary<string, string>());