2 Copyright (c) 2003-2004 Niels Kokholm <kokholm@itu.dk> and Peter Sestoft <sestoft@dina.kvl.dk>
\r
3 Permission is hereby granted, free of charge, to any person obtaining a copy
\r
4 of this software and associated documentation files (the "Software"), to deal
\r
5 in the Software without restriction, including without limitation the rights
\r
6 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
\r
7 copies of the Software, and to permit persons to whom the Software is
\r
8 furnished to do so, subject to the following conditions:
\r
10 The above copyright notice and this permission notice shall be included in
\r
11 all copies or substantial portions of the Software.
\r
13 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
\r
14 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
\r
15 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
\r
16 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
\r
17 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
\r
18 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
\r
24 using NUnit.Framework;
\r
25 using MSG = System.Collections.Generic;
\r
28 namespace nunit.linkedlists.plain
\r
30 namespace Enumerable
\r
33 public class Multiops
\r
35 private LinkedList<int> list;
\r
37 private Filter<int> always, never, even;
\r
43 list = new LinkedList<int>();
\r
44 always = delegate{return true;};
\r
45 never = delegate{return false;};
\r
46 even = delegate(int i){return i%2==0;};
\r
53 Assert.IsTrue(list.All(always));
\r
54 Assert.IsTrue(list.All(never));
\r
55 Assert.IsTrue(list.All(even));
\r
57 Assert.IsTrue(list.All(always));
\r
58 Assert.IsFalse(list.All(never));
\r
59 Assert.IsTrue(list.All(even));
\r
61 Assert.IsTrue(list.All(always));
\r
62 Assert.IsFalse(list.All(never));
\r
63 Assert.IsFalse(list.All(even));
\r
68 public void Exists()
\r
70 Assert.IsFalse(list.Exists(always));
\r
71 Assert.IsFalse(list.Exists(never));
\r
72 Assert.IsFalse(list.Exists(even));
\r
74 Assert.IsTrue(list.Exists(always));
\r
75 Assert.IsFalse(list.Exists(never));
\r
76 Assert.IsFalse(list.Exists(even));
\r
78 Assert.IsTrue(list.Exists(always));
\r
79 Assert.IsFalse(list.Exists(never));
\r
80 Assert.IsTrue(list.Exists(even));
\r
88 Applier<int> a = delegate(int i){sum=i+10*sum;};
\r
91 Assert.AreEqual(0, sum);
\r
93 list.Add(5);list.Add(8);list.Add(7);list.Add(5);
\r
95 Assert.AreEqual(5875, sum);
\r
100 public void Dispose() { list = null; }
\r
106 public class GetEnumerator
\r
108 private LinkedList<int> list;
\r
112 public void Init() { list = new LinkedList<int>(); }
\r
116 public void Empty()
\r
118 MSG.IEnumerator<int> e = list.GetEnumerator();
\r
120 Assert.IsFalse(e.MoveNext());
\r
125 public void Normal()
\r
134 MSG.IEnumerator<int> e = list.GetEnumerator();
\r
136 Assert.IsTrue(e.MoveNext());
\r
137 Assert.AreEqual(5, e.Current);
\r
138 Assert.IsTrue(e.MoveNext());
\r
139 Assert.AreEqual(8, e.Current);
\r
140 Assert.IsTrue(e.MoveNext());
\r
141 Assert.AreEqual(5, e.Current);
\r
142 Assert.IsTrue(e.MoveNext());
\r
143 Assert.AreEqual(5, e.Current);
\r
144 Assert.IsTrue(e.MoveNext());
\r
145 Assert.AreEqual(10, e.Current);
\r
146 Assert.IsTrue(e.MoveNext());
\r
147 Assert.AreEqual(1, e.Current);
\r
148 Assert.IsFalse(e.MoveNext());
\r
153 public void DoDispose()
\r
159 MSG.IEnumerator<int> e = list.GetEnumerator();
\r
168 [ExpectedException(typeof(InvalidOperationException))]
\r
169 public void MoveNextAfterUpdate()
\r
175 MSG.IEnumerator<int> e = list.GetEnumerator();
\r
184 public void Dispose() { list = null; }
\r
191 namespace CollectionOrExtensible
\r
194 public class CollectionOrSink
\r
196 private LinkedList<int> list;
\r
200 public void Init() { list = new LinkedList<int>(); }
\r
204 public void CountEtAl()
\r
206 Assert.AreEqual(0, list.Count);
\r
207 Assert.IsTrue(list.IsEmpty);
\r
208 Assert.IsTrue(list.AllowsDuplicates);
\r
210 Assert.AreEqual(1, list.Count);
\r
211 Assert.IsFalse(list.IsEmpty);
\r
213 Assert.AreEqual(2, list.Count);
\r
214 Assert.IsFalse(list.IsEmpty);
\r
216 Assert.AreEqual(3, list.Count);
\r
221 public void AddAll()
\r
223 list.Add(3);list.Add(4);list.Add(5);
\r
225 LinkedList<int> list2 = new LinkedList<int>();
\r
227 list2.AddAll(list);
\r
228 Assert.IsTrue(IC.eq(list2, 3, 4, 5));
\r
229 list.AddAll(list2);
\r
230 Assert.IsTrue(IC.eq(list2, 3, 4, 5));
\r
231 Assert.IsTrue(IC.eq(list, 3, 4, 5, 3, 4, 5));
\r
236 public void Dispose() { list = null; }
\r
242 public class ArrayTest
\r
244 private LinkedList<int> list;
\r
252 list = new LinkedList<int>();
\r
254 for (int i = 0; i < 10; i++)
\r
260 public void Dispose() { list = null; }
\r
263 private string aeq(int[] a, params int[] b)
\r
265 if (a.Length != b.Length)
\r
266 return "Lengths differ: " + a.Length + " != " + b.Length;
\r
268 for (int i = 0; i < a.Length; i++)
\r
270 return String.Format("{0}'th elements differ: {1} != {2}", i, a[i], b[i]);
\r
272 return "Alles klar";
\r
277 public void ToArray()
\r
279 Assert.AreEqual("Alles klar", aeq(list.ToArray()));
\r
282 Assert.AreEqual("Alles klar", aeq(list.ToArray(), 7, 7));
\r
287 public void CopyTo()
\r
290 Assert.AreEqual("Alles klar", aeq(a, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009));
\r
293 Assert.AreEqual("Alles klar", aeq(a, 1000, 1001, 6, 1003, 1004, 1005, 1006, 1007, 1008, 1009));
\r
298 Assert.AreEqual("Alles klar", aeq(a, 1000, 1001, 6, 1003, 6, 4, 4, 9, 1008, 1009));
\r
302 Assert.AreEqual("Alles klar", aeq(a, 1000, 1001, 6, 1003, 6, 4, 4, 9, 1008, 7));
\r
307 [ExpectedException(typeof(ArgumentException))]
\r
308 public void CopyToBad()
\r
311 list.CopyTo(a, 10);
\r
316 [ExpectedException(typeof(ArgumentOutOfRangeException))]
\r
317 public void CopyToBad2()
\r
319 list.CopyTo(a, -1);
\r
324 [ExpectedException(typeof(ArgumentException))]
\r
325 public void CopyToTooFar()
\r
338 private LinkedList<int> list;
\r
344 list = new LinkedList<int>();
\r
349 public void Dispose() { list = null; }
\r
355 Assert.IsNotNull(list.SyncRoot);
\r
363 namespace EditableCollection
\r
366 public class Searching
\r
368 private LinkedList<int> list;
\r
372 public void Init() { list = new LinkedList<int>(); }
\r
376 public void Contains()
\r
378 Assert.IsFalse(list.Contains(5));
\r
380 Assert.IsTrue(list.Contains(5));
\r
381 Assert.IsFalse(list.Contains(7));
\r
384 Assert.IsTrue(list.Contains(5));
\r
385 Assert.IsFalse(list.Contains(7));
\r
386 Assert.IsTrue(list.Contains(8));
\r
387 Assert.IsTrue(list.Contains(10));
\r
389 Assert.IsTrue(list.Contains(5));
\r
390 Assert.IsFalse(list.Contains(7));
\r
391 Assert.IsFalse(list.Contains(8));
\r
392 Assert.IsTrue(list.Contains(10));
\r
397 public void ContainsCount()
\r
399 Assert.AreEqual(0, list.ContainsCount(5));
\r
401 Assert.AreEqual(1, list.ContainsCount(5));
\r
402 Assert.AreEqual(0, list.ContainsCount(7));
\r
404 Assert.AreEqual(1, list.ContainsCount(5));
\r
405 Assert.AreEqual(0, list.ContainsCount(7));
\r
406 Assert.AreEqual(1, list.ContainsCount(8));
\r
408 Assert.AreEqual(2, list.ContainsCount(5));
\r
409 Assert.AreEqual(0, list.ContainsCount(7));
\r
410 Assert.AreEqual(1, list.ContainsCount(8));
\r
415 public void RemoveAllCopies()
\r
417 list.Add(5);list.Add(7);list.Add(5);
\r
418 Assert.AreEqual(2, list.ContainsCount(5));
\r
419 Assert.AreEqual(1, list.ContainsCount(7));
\r
420 list.RemoveAllCopies(5);
\r
421 Assert.AreEqual(0, list.ContainsCount(5));
\r
422 Assert.AreEqual(1, list.ContainsCount(7));
\r
423 list.Add(5);list.Add(8);list.Add(5);
\r
424 list.RemoveAllCopies(8);
\r
425 Assert.IsTrue(IC.eq(list, 7, 5, 5));
\r
430 public void FindAll()
\r
432 Filter<int> f = delegate(int i){return i%2==0;};
\r
434 Assert.IsTrue(list.FindAll(f).IsEmpty);
\r
435 list.Add(5);list.Add(8);list.Add(5);list.Add(10);list.Add(8);
\r
436 Assert.IsTrue(((LinkedList<int>)list.FindAll(f)).Check());
\r
437 Assert.IsTrue(IC.eq(list.FindAll(f), 8, 10, 8));
\r
442 public void ContainsAll()
\r
444 LinkedList<int> list2 = new LinkedList<int>();
\r
446 Assert.IsTrue(list.ContainsAll(list2));
\r
448 Assert.IsFalse(list.ContainsAll(list2));
\r
450 Assert.IsTrue(list.ContainsAll(list2));
\r
452 Assert.IsTrue(list.ContainsAll(list2));
\r
454 Assert.IsFalse(list.ContainsAll(list2));
\r
456 Assert.IsTrue(list.ContainsAll(list2));
\r
461 public void RetainAll()
\r
463 LinkedList<int> list2 = new LinkedList<int>();
\r
465 list.Add(4);list.Add(4);list.Add(5);list.Add(4);list.Add(6);
\r
466 list2.Add(5);list2.Add(4);list2.Add(7);list2.Add(7);list2.Add(4);
\r
467 list.RetainAll(list2);
\r
468 Assert.IsTrue(list.Check());
\r
469 Assert.IsTrue(IC.eq(list, 4, 4, 5));
\r
470 list.Add(5);list.Add(4);list.Add(6);
\r
472 list2.Add(5);list2.Add(5);list2.Add(6);
\r
473 list.RetainAll(list2);
\r
474 Assert.IsTrue(list.Check());
\r
475 Assert.IsTrue(IC.eq(list, 5, 5, 6));
\r
477 list2.Add(7);list2.Add(8);list2.Add(9);
\r
478 list.RetainAll(list2);
\r
479 Assert.IsTrue(list.Check());
\r
480 Assert.IsTrue(IC.eq(list));
\r
485 public void RemoveAll()
\r
487 LinkedList<int> list2 = new LinkedList<int>();
\r
489 list.Add(4);list.Add(4);list.Add(5);list.Add(4);list.Add(6);
\r
490 list2.Add(5);list2.Add(4);list2.Add(7);list2.Add(7);list2.Add(4);
\r
491 list.RemoveAll(list2);
\r
492 Assert.IsTrue(list.Check());
\r
493 Assert.IsTrue(IC.eq(list, 4, 6));
\r
494 list.Add(5);list.Add(4);list.Add(6);
\r
496 list2.Add(6);list2.Add(5);list2.Add(5);list2.Add(6);
\r
497 list.RemoveAll(list2);
\r
498 Assert.IsTrue(list.Check());
\r
499 Assert.IsTrue(IC.eq(list, 4, 4));
\r
501 list2.Add(7);list2.Add(8);list2.Add(9);
\r
502 list.RemoveAll(list2);
\r
503 Assert.IsTrue(list.Check());
\r
504 Assert.IsTrue(IC.eq(list, 4, 4));
\r
509 public void Remove()
\r
511 list.Add(4);list.Add(4);list.Add(5);list.Add(4);list.Add(6);
\r
512 Assert.IsFalse(list.Remove(2));
\r
513 Assert.IsTrue(list.Check());
\r
514 Assert.IsTrue(list.Remove(4));
\r
515 Assert.IsTrue(list.Check());
\r
516 Assert.IsTrue(IC.eq(list, 4, 5, 4, 6));
\r
517 Assert.AreEqual(6, list.RemoveLast());
\r
518 Assert.IsTrue(list.Check());
\r
519 Assert.IsTrue(IC.eq(list, 4, 5, 4));
\r
521 Assert.AreEqual(4, list.RemoveFirst());
\r
522 Assert.IsTrue(list.Check());
\r
523 Assert.IsTrue(IC.eq(list, 5, 4, 7));
\r
528 public void Clear()
\r
530 list.Add(7);list.Add(7);
\r
532 Assert.IsTrue(list.IsEmpty);
\r
537 public void Dispose() { list = null; }
\r
547 public class Searching
\r
549 private IIndexed<int> dit;
\r
555 dit = new LinkedList<int>();
\r
560 public void IndexOf()
\r
562 Assert.AreEqual(-1, dit.IndexOf(6));
\r
564 Assert.AreEqual(-1, dit.IndexOf(6));
\r
565 Assert.AreEqual(-1, dit.LastIndexOf(6));
\r
566 Assert.AreEqual(0, dit.IndexOf(7));
\r
567 dit.Add(5);dit.Add(7);dit.Add(8);dit.Add(7);
\r
568 Assert.AreEqual(-1, dit.IndexOf(6));
\r
569 Assert.AreEqual(0, dit.IndexOf(7));
\r
570 Assert.AreEqual(4, dit.LastIndexOf(7));
\r
571 Assert.AreEqual(3, dit.IndexOf(8));
\r
572 Assert.AreEqual(1, dit.LastIndexOf(5));
\r
577 public void Dispose()
\r
586 public class Removing
\r
588 private IIndexed<int> dit;
\r
594 dit = new LinkedList<int>();
\r
599 public void RemoveAt()
\r
601 dit.Add(5);dit.Add(7);dit.Add(9);dit.Add(1);dit.Add(2);
\r
602 Assert.AreEqual(7, dit.RemoveAt(1));
\r
603 Assert.IsTrue(((LinkedList<int>)dit).Check());
\r
604 Assert.IsTrue(IC.eq(dit, 5, 9, 1, 2));
\r
605 Assert.AreEqual(5, dit.RemoveAt(0));
\r
606 Assert.IsTrue(((LinkedList<int>)dit).Check());
\r
607 Assert.IsTrue(IC.eq(dit, 9, 1, 2));
\r
608 Assert.AreEqual(2, dit.RemoveAt(2));
\r
609 Assert.IsTrue(((LinkedList<int>)dit).Check());
\r
610 Assert.IsTrue(IC.eq(dit, 9, 1));
\r
615 [ExpectedException(typeof(IndexOutOfRangeException))]
\r
616 public void RemoveAtBad0()
\r
623 [ExpectedException(typeof(IndexOutOfRangeException))]
\r
624 public void RemoveAtBadM1()
\r
631 [ExpectedException(typeof(IndexOutOfRangeException))]
\r
632 public void RemoveAtBad1()
\r
640 public void RemoveInterval()
\r
642 dit.RemoveInterval(0, 0);
\r
643 dit.Add(10);dit.Add(20);dit.Add(30);dit.Add(40);dit.Add(50);dit.Add(60);
\r
644 dit.RemoveInterval(3, 0);
\r
645 Assert.IsTrue(((LinkedList<int>)dit).Check());
\r
646 Assert.IsTrue(IC.eq(dit, 10, 20, 30, 40, 50, 60));
\r
647 dit.RemoveInterval(3, 1);
\r
648 Assert.IsTrue(((LinkedList<int>)dit).Check());
\r
649 Assert.IsTrue(IC.eq(dit, 10, 20, 30, 50, 60));
\r
650 dit.RemoveInterval(1, 3);
\r
651 Assert.IsTrue(((LinkedList<int>)dit).Check());
\r
652 Assert.IsTrue(IC.eq(dit, 10, 60));
\r
653 dit.RemoveInterval(0, 2);
\r
654 Assert.IsTrue(((LinkedList<int>)dit).Check());
\r
655 Assert.IsTrue(IC.eq(dit));
\r
656 dit.Add(10);dit.Add(20);dit.Add(30);dit.Add(40);dit.Add(50);dit.Add(60);
\r
657 dit.RemoveInterval(0, 2);
\r
658 Assert.IsTrue(((LinkedList<int>)dit).Check());
\r
659 Assert.IsTrue(IC.eq(dit, 30, 40, 50, 60));
\r
660 dit.RemoveInterval(2, 2);
\r
661 Assert.IsTrue(((LinkedList<int>)dit).Check());
\r
662 Assert.IsTrue(IC.eq(dit, 30, 40));
\r
667 public void Dispose()
\r
680 public class Searching
\r
682 private IList<int> lst;
\r
686 public void Init() { lst = new LinkedList<int>(); }
\r
690 public void Dispose() { lst = null; }
\r
694 [ExpectedException(typeof(InvalidOperationException), "List is empty")]
\r
695 public void FirstBad()
\r
702 [ExpectedException(typeof(InvalidOperationException), "List is empty")]
\r
703 public void LastBad()
\r
710 public void FirstLast()
\r
713 Assert.AreEqual(19, lst.First);
\r
714 Assert.AreEqual(19, lst.Last);
\r
715 lst.Add(34);lst.InsertFirst(12);
\r
716 Assert.AreEqual(12, lst.First);
\r
717 Assert.AreEqual(34, lst.Last);
\r
725 Assert.AreEqual(34, lst[0]);
\r
727 Assert.AreEqual(56, lst.First);
\r
728 lst.Add(7);lst.Add(7);lst.Add(7);lst.Add(7);
\r
729 lst[0] = 45;lst[2] = 78;lst[4] = 101;
\r
730 Assert.IsTrue(IC.eq(lst, 45, 7, 78, 7, 101));
\r
735 [ExpectedException(typeof(IndexOutOfRangeException))]
\r
736 public void ThisBadEmptyGet()
\r
743 [ExpectedException(typeof(IndexOutOfRangeException))]
\r
744 public void ThisBadLowGet()
\r
753 [ExpectedException(typeof(IndexOutOfRangeException))]
\r
754 public void ThisBadHiGet()
\r
763 [ExpectedException(typeof(IndexOutOfRangeException))]
\r
764 public void ThisBadEmptySet()
\r
771 [ExpectedException(typeof(IndexOutOfRangeException))]
\r
772 public void ThisBadLowSet()
\r
780 [ExpectedException(typeof(IndexOutOfRangeException))]
\r
781 public void ThisBadHiSet()
\r
790 public class Combined
\r
792 private IList<KeyValuePair<int,int>> lst;
\r
798 lst = new LinkedList<KeyValuePair<int,int>>();
\r
799 for (int i = 0; i < 10; i++)
\r
800 lst.Add(new KeyValuePair<int,int>(i, i + 30));
\r
805 public void Dispose() { lst = null; }
\r
811 KeyValuePair<int,int> p = new KeyValuePair<int,int>(3, 78);
\r
813 Assert.IsTrue(lst.Find(ref p));
\r
814 Assert.AreEqual(3, p.key);
\r
815 Assert.AreEqual(33, p.value);
\r
816 p = new KeyValuePair<int,int>(13, 78);
\r
817 Assert.IsFalse(lst.Find(ref p));
\r
822 public void FindOrAdd()
\r
824 KeyValuePair<int,int> p = new KeyValuePair<int,int>(3, 78);
\r
826 Assert.IsTrue(lst.FindOrAdd(ref p));
\r
827 Assert.AreEqual(3, p.key);
\r
828 Assert.AreEqual(33, p.value);
\r
829 p = new KeyValuePair<int,int>(13, 79);
\r
830 Assert.IsFalse(lst.FindOrAdd(ref p));
\r
831 Assert.AreEqual(13, lst[10].key);
\r
832 Assert.AreEqual(79, lst[10].value);
\r
837 public void Update()
\r
839 KeyValuePair<int,int> p = new KeyValuePair<int,int>(3, 78);
\r
841 Assert.IsTrue(lst.Update(p));
\r
842 Assert.AreEqual(3, lst[3].key);
\r
843 Assert.AreEqual(78, lst[3].value);
\r
844 p = new KeyValuePair<int,int>(13, 78);
\r
845 Assert.IsFalse(lst.Update(p));
\r
850 public void UpdateOrAdd()
\r
852 KeyValuePair<int,int> p = new KeyValuePair<int,int>(3, 78);
\r
854 Assert.IsTrue(lst.UpdateOrAdd(p));
\r
855 Assert.AreEqual(3, lst[3].key);
\r
856 Assert.AreEqual(78, lst[3].value);
\r
857 p = new KeyValuePair<int,int>(13, 79);
\r
858 Assert.IsFalse(lst.UpdateOrAdd(p));
\r
859 Assert.AreEqual(13, lst[10].key);
\r
860 Assert.AreEqual(79, lst[10].value);
\r
865 public void RemoveWithReturn()
\r
867 KeyValuePair<int,int> p = new KeyValuePair<int,int>(3, 78);
\r
869 Assert.IsTrue(lst.RemoveWithReturn(ref p));
\r
870 Assert.AreEqual(3, p.key);
\r
871 Assert.AreEqual(33, p.value);
\r
872 Assert.AreEqual(4, lst[3].key);
\r
873 Assert.AreEqual(34, lst[3].value);
\r
874 p = new KeyValuePair<int,int>(13, 78);
\r
875 Assert.IsFalse(lst.RemoveWithReturn(ref p));
\r
881 public class Inserting
\r
883 private IList<int> lst;
\r
887 public void Init() { lst = new LinkedList<int>(); }
\r
891 public void Dispose() { lst = null; }
\r
895 public void Insert()
\r
898 Assert.IsTrue(IC.eq(lst, 5));
\r
900 Assert.IsTrue(IC.eq(lst, 7, 5));
\r
902 Assert.IsTrue(IC.eq(lst, 7, 4, 5));
\r
904 Assert.IsTrue(IC.eq(lst, 7, 4, 5, 2));
\r
909 [ExpectedException(typeof(IndexOutOfRangeException))]
\r
910 public void BadInsertLow()
\r
918 [ExpectedException(typeof(IndexOutOfRangeException))]
\r
919 public void BadInsertHi()
\r
929 for (int i = 0; i < 7; i++)
\r
932 Assert.IsTrue(lst.FIFO);
\r
933 Assert.AreEqual(0, lst.Remove());
\r
934 Assert.AreEqual(2, lst.Remove());
\r
936 Assert.AreEqual(12, lst.Remove());
\r
937 Assert.AreEqual(10, lst.Remove());
\r
939 Assert.AreEqual(4, lst.Remove());
\r
940 Assert.AreEqual(6, lst.Remove());
\r
945 public void InsertFirstLast()
\r
947 lst.InsertFirst(4);
\r
949 lst.InsertFirst(14);
\r
950 lst.InsertLast(15);
\r
951 lst.InsertFirst(24);
\r
952 lst.InsertLast(25);
\r
953 lst.InsertFirst(34);
\r
954 lst.InsertLast(55);
\r
955 Assert.IsTrue(IC.eq(lst, 34, 24, 14, 4, 5, 15, 25, 55));
\r
960 public void InsertBefore()
\r
966 lst.InsertBefore(7, 2);
\r
967 Assert.IsTrue(lst.Check());
\r
968 Assert.IsTrue(IC.eq(lst, 7, 2, 3, 2, 5));
\r
969 lst.InsertBefore(8, 3);
\r
970 Assert.IsTrue(lst.Check());
\r
971 Assert.IsTrue(IC.eq(lst, 7, 2, 8, 3, 2, 5));
\r
972 lst.InsertBefore(9, 5);
\r
973 Assert.IsTrue(lst.Check());
\r
974 Assert.IsTrue(IC.eq(lst, 7, 2, 8, 3, 2, 9, 5));
\r
979 [ExpectedException(typeof(ArgumentException), "Target item not found")]
\r
980 public void BadInsertBefore()
\r
986 lst.InsertBefore(7, 4);
\r
991 public void InsertAfter()
\r
998 lst.InsertAfter(7, 2);
\r
999 Assert.IsTrue(lst.Check());
\r
1000 Assert.IsTrue(IC.eq(lst, 1, 2, 3, 2, 7, 5));
\r
1001 lst.InsertAfter(8, 1);
\r
1002 Assert.IsTrue(lst.Check());
\r
1003 Assert.IsTrue(IC.eq(lst, 1, 8, 2, 3, 2, 7, 5));
\r
1004 lst.InsertAfter(9, 5);
\r
1005 Assert.IsTrue(lst.Check());
\r
1006 Assert.IsTrue(IC.eq(lst, 1, 8, 2, 3, 2, 7, 5, 9));
\r
1011 [ExpectedException(typeof(ArgumentException), "Target item not found")]
\r
1012 public void BadInsertAfter()
\r
1018 lst.InsertAfter(7, 4);
\r
1023 public void InsertAll()
\r
1030 IList<int> lst2 = new LinkedList<int>();
\r
1032 lst2.Add(7);lst2.Add(8);lst2.Add(9);
\r
1033 lst.InsertAll(0, lst2);
\r
1034 Assert.IsTrue(lst.Check());
\r
1035 Assert.IsTrue(IC.eq(lst, 7, 8, 9, 1, 2, 3, 4));
\r
1036 lst.InsertAll(7, lst2);
\r
1037 Assert.IsTrue(lst.Check());
\r
1038 Assert.IsTrue(IC.eq(lst, 7, 8, 9, 1, 2, 3, 4, 7, 8, 9));
\r
1039 lst.InsertAll(5, lst2);
\r
1040 Assert.IsTrue(lst.Check());
\r
1041 Assert.IsTrue(IC.eq(lst, 7, 8, 9, 1, 2, 7, 8, 9, 3, 4, 7, 8, 9));
\r
1048 Mapper<int,string> m = delegate(int i){return "<<"+i+">>";};
\r
1049 IList<string> r = lst.Map(m);
\r
1051 Assert.IsTrue(r.Check());
\r
1052 Assert.IsTrue(r.IsEmpty);
\r
1058 Assert.IsTrue(r.Check());
\r
1059 Assert.AreEqual(4, r.Count);
\r
1060 for (int i = 0; i < 4; i++)
\r
1061 Assert.AreEqual("<<" + (i + 1) + ">>", r[i]);
\r
1066 public void RemoveFirstLast()
\r
1072 Assert.AreEqual(1, lst.RemoveFirst());
\r
1073 Assert.AreEqual(4, lst.RemoveLast());
\r
1074 Assert.AreEqual(2, lst.RemoveFirst());
\r
1075 Assert.AreEqual(3, lst.RemoveLast());
\r
1076 Assert.IsTrue(lst.IsEmpty);
\r
1080 [ExpectedException(typeof(InvalidOperationException))]
\r
1081 public void RemoveFirstEmpty()
\r
1083 lst.RemoveFirst();
\r
1087 [ExpectedException(typeof(InvalidOperationException))]
\r
1088 public void RemoveLastEmpty()
\r
1094 public void Reverse()
\r
1096 for (int i = 0; i < 10; i++)
\r
1100 Assert.IsTrue(lst.Check());
\r
1101 Assert.IsTrue(IC.eq(lst, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0));
\r
1102 lst.Reverse(0, 3);
\r
1103 Assert.IsTrue(lst.Check());
\r
1104 Assert.IsTrue(IC.eq(lst, 7, 8, 9, 6, 5, 4, 3, 2, 1, 0));
\r
1105 lst.Reverse(7, 0);
\r
1106 Assert.IsTrue(lst.Check());
\r
1107 Assert.IsTrue(IC.eq(lst, 7, 8, 9, 6, 5, 4, 3, 2, 1, 0));
\r
1108 lst.Reverse(7, 3);
\r
1109 Assert.IsTrue(lst.Check());
\r
1110 Assert.IsTrue(IC.eq(lst, 7, 8, 9, 6, 5, 4, 3, 0, 1, 2));
\r
1111 lst.Reverse(5, 1);
\r
1112 Assert.IsTrue(lst.Check());
\r
1113 Assert.IsTrue(IC.eq(lst, 7, 8, 9, 6, 5, 4, 3, 0, 1, 2));
\r
1118 [ExpectedException(typeof(ArgumentException))]
\r
1119 public void BadReverse()
\r
1121 for (int i = 0; i < 10; i++)
\r
1124 lst.Reverse(8, 3);
\r
1131 public class Sorting
\r
1133 private IList<int> lst;
\r
1137 public void Init() { lst = new LinkedList<int>(); }
\r
1141 public void Dispose() { lst = null; }
\r
1145 public void Sort()
\r
1147 lst.Add(5);lst.Add(6);lst.Add(5);lst.Add(7);lst.Add(3);
\r
1148 Assert.IsFalse(lst.IsSorted(new IC()));
\r
1149 lst.Sort(new IC());
\r
1150 Assert.IsTrue(lst.Check());
\r
1151 Assert.IsTrue(lst.IsSorted(new IC()));
\r
1152 Assert.IsTrue(IC.eq(lst, 3, 5, 5, 6, 7));
\r
1157 public void Stability()
\r
1159 IList<KeyValuePair<int,string>> lst2 = new LinkedList<KeyValuePair<int,string>>();
\r
1160 IComparer<KeyValuePair<int,string>> c = new KeyValuePairComparer<int,string>(new IC());
\r
1162 lst2.Add(new KeyValuePair<int,string>(5, "a"));
\r
1163 lst2.Add(new KeyValuePair<int,string>(5, "b"));
\r
1164 lst2.Add(new KeyValuePair<int,string>(6, "c"));
\r
1165 lst2.Add(new KeyValuePair<int,string>(4, "d"));
\r
1166 lst2.Add(new KeyValuePair<int,string>(3, "e"));
\r
1167 lst2.Add(new KeyValuePair<int,string>(4, "f"));
\r
1168 lst2.Add(new KeyValuePair<int,string>(5, "h"));
\r
1169 Assert.IsFalse(lst2.IsSorted(c));
\r
1171 Assert.IsTrue(lst2.IsSorted(c));
\r
1173 KeyValuePair<int,string> p = lst2.RemoveFirst();
\r
1175 Assert.AreEqual(3, p.key);
\r
1176 Assert.AreEqual("e", p.value);
\r
1177 p = lst2.RemoveFirst();
\r
1178 Assert.AreEqual(4, p.key);
\r
1179 Assert.AreEqual("d", p.value);
\r
1180 p = lst2.RemoveFirst();
\r
1181 Assert.AreEqual(4, p.key);
\r
1182 Assert.AreEqual("f", p.value);
\r
1183 p = lst2.RemoveFirst();
\r
1184 Assert.AreEqual(5, p.key);
\r
1185 Assert.AreEqual("a", p.value);
\r
1186 p = lst2.RemoveFirst();
\r
1187 Assert.AreEqual(5, p.key);
\r
1188 Assert.AreEqual("b", p.value);
\r
1189 p = lst2.RemoveFirst();
\r
1190 Assert.AreEqual(5, p.key);
\r
1191 Assert.AreEqual("h", p.value);
\r
1192 p = lst2.RemoveFirst();
\r
1193 Assert.AreEqual(6, p.key);
\r
1194 Assert.AreEqual("c", p.value);
\r
1195 Assert.IsTrue(lst2.IsEmpty);
\r
1201 namespace IStackQueue
\r
1204 public class Stack
\r
1206 private IStack<int> list;
\r
1210 public void Init() { list = new LinkedList<int>(); }
\r
1214 public void Normal()
\r
1221 Assert.AreEqual(9, list.Pop());
\r
1222 Assert.AreEqual(8, list.Pop());
\r
1223 Assert.AreEqual(7, list.Pop());
\r
1224 Assert.AreEqual(5, list.Pop());
\r
1225 Assert.AreEqual(7, list.Pop());
\r
1230 [ExpectedException(typeof(InvalidOperationException))]
\r
1231 public void PopEmpty()
\r
1234 Assert.AreEqual(5, list.Pop());
\r
1240 public void Dispose() { list = null; }
\r
1243 public class Queue
\r
1245 private IQueue<int> list;
\r
1249 public void Init() { list = new LinkedList<int>(); }
\r
1253 public void Normal()
\r
1260 Assert.AreEqual(7, list.DeQueue());
\r
1261 Assert.AreEqual(5, list.DeQueue());
\r
1262 Assert.AreEqual(7, list.DeQueue());
\r
1263 Assert.AreEqual(8, list.DeQueue());
\r
1264 Assert.AreEqual(9, list.DeQueue());
\r
1269 [ExpectedException(typeof(InvalidOperationException))]
\r
1270 public void DeQueueEmpty()
\r
1273 Assert.AreEqual(5, list.DeQueue());
\r
1279 public void Dispose() { list = null; }
\r
1287 public class Range
\r
1289 private IList<int> lst;
\r
1293 public void Init() { lst = new LinkedList<int>(); }
\r
1297 public void Dispose() { lst = null; }
\r
1301 public void GetRange()
\r
1303 //Assert.IsTrue(IC.eq(lst[0, 0)));
\r
1304 for (int i = 0; i < 10; i++) lst.Add(i);
\r
1306 Assert.IsTrue(IC.eq(lst[0, 3], 0, 1, 2));
\r
1307 Assert.IsTrue(IC.eq(lst[3, 4], 3, 4, 5, 6));
\r
1308 Assert.IsTrue(IC.eq(lst[6, 4], 6, 7, 8, 9));
\r
1313 [ExpectedException(typeof(ArgumentException))]
\r
1314 public void BadGetRange()
\r
1316 object foo= lst[0, 11];
\r
1321 public void Backwards()
\r
1323 for (int i = 0; i < 10; i++) lst.Add(i);
\r
1325 Assert.IsTrue(IC.eq(lst.Backwards(), 9, 8, 7, 6, 5, 4, 3, 2, 1, 0));
\r
1326 Assert.IsTrue(IC.eq(lst[0, 4].Backwards(), 3, 2, 1, 0));
\r
1327 Assert.IsTrue(IC.eq(lst[3, 4].Backwards(), 6, 5, 4, 3));
\r
1328 Assert.IsTrue(IC.eq(lst[6, 4].Backwards(), 9, 8, 7, 6));
\r
1333 public void DirectionAndCount()
\r
1335 for (int i = 0; i < 10; i++) lst.Add(i);
\r
1337 Assert.AreEqual(EnumerationDirection.Forwards, lst.Direction);
\r
1338 Assert.AreEqual(EnumerationDirection.Forwards, lst[3, 7].Direction);
\r
1339 Assert.AreEqual(EnumerationDirection.Backwards, lst[3, 7].Backwards().Direction);
\r
1340 Assert.AreEqual(EnumerationDirection.Backwards, lst.Backwards().Direction);
\r
1341 Assert.AreEqual(4, lst[3, 4].Count);
\r
1342 Assert.AreEqual(4, lst[3, 4].Backwards().Count);
\r
1343 Assert.AreEqual(10, lst.Backwards().Count);
\r
1348 [ExpectedException(typeof(InvalidOperationException))]
\r
1349 public void MoveNextAfterUpdate()
\r
1351 for (int i = 0; i < 10; i++) lst.Add(i);
\r
1353 foreach (int i in lst)
\r
1367 public class Simple
\r
1369 LinkedList<int> list, view;
\r
1373 public void Init()
\r
1375 list = new LinkedList<int>();
\r
1376 list.Add(0);list.Add(1);list.Add(2);list.Add(3);
\r
1377 view = (LinkedList<int>)list.View(1, 2);
\r
1382 public void Dispose()
\r
1384 list = view = null;
\r
1390 Assert.IsTrue(list.Check());
\r
1391 Assert.IsTrue(view.Check());
\r
1395 [ExpectedException(typeof(ArgumentException), "Target item not found")]
\r
1396 public void BadInsertAfterLow()
\r
1398 view.InsertAfter(876, 0);
\r
1403 [ExpectedException(typeof(ArgumentException), "Target item not found")]
\r
1404 public void BadInsertAfterHigh()
\r
1406 view.InsertAfter(876, 0);
\r
1411 [ExpectedException(typeof(ArgumentException), "Target item not found")]
\r
1412 public void BadInsertBeforeLow()
\r
1414 view.InsertBefore(876, 0);
\r
1419 [ExpectedException(typeof(ArgumentException), "Target item not found")]
\r
1420 public void BadInsertBeforeHigh()
\r
1422 view.InsertBefore(876, 0);
\r
1431 Assert.IsTrue(IC.eq(list, 0, 1, 2, 3));
\r
1432 Assert.IsTrue(IC.eq(view, 1, 2));
\r
1433 view.InsertFirst(10);
\r
1435 Assert.IsTrue(IC.eq(list, 0, 10, 1, 2, 3));
\r
1436 Assert.IsTrue(IC.eq(view, 10, 1, 2));
\r
1438 Assert.IsFalse(view.IsReadOnly);
\r
1439 Assert.IsTrue(view.AllowsDuplicates);
\r
1440 Assert.IsTrue(view.IsEmpty);
\r
1442 Assert.IsTrue(IC.eq(list, 0, 3));
\r
1443 Assert.IsTrue(IC.eq(view));
\r
1445 Assert.IsFalse(view.IsEmpty);
\r
1446 Assert.IsTrue(view.AllowsDuplicates);
\r
1447 Assert.IsFalse(view.IsReadOnly);
\r
1449 Assert.IsTrue(IC.eq(list, 0, 8, 3));
\r
1450 Assert.IsTrue(IC.eq(view, 8));
\r
1453 Assert.IsTrue(IC.eq(list, 0, 8, 12, 3));
\r
1454 Assert.IsTrue(IC.eq(view, 8, 12));
\r
1455 view.InsertAfter(15, 12);
\r
1457 Assert.IsTrue(IC.eq(list, 0, 8, 12, 15, 3));
\r
1458 Assert.IsTrue(IC.eq(view, 8, 12, 15));
\r
1459 view.InsertBefore(18, 12);
\r
1461 Assert.IsTrue(IC.eq(list, 0, 8, 18, 12, 15, 3));
\r
1462 Assert.IsTrue(IC.eq(view, 8, 18, 12, 15));
\r
1464 LinkedList<int> lst2 = new LinkedList<int>();
\r
1466 lst2.Add(90);lst2.Add(92);
\r
1467 view.AddAll(lst2);
\r
1469 Assert.IsTrue(IC.eq(list, 0, 8, 18, 12, 15, 90, 92, 3));
\r
1470 Assert.IsTrue(IC.eq(view, 8, 18, 12, 15, 90, 92));
\r
1471 view.InsertLast(66);
\r
1473 Assert.IsTrue(IC.eq(list, 0, 8, 18, 12, 15, 90, 92, 66, 3));
\r
1474 Assert.IsTrue(IC.eq(view, 8, 18, 12, 15, 90, 92, 66));
\r
1479 public void Bxxx()
\r
1481 Assert.IsTrue(IC.eq(view.Backwards(), 2, 1));
\r
1482 Assert.AreSame(list, view.Underlying);
\r
1483 Assert.IsNull(list.Underlying);
\r
1484 Assert.AreEqual(EnumerationDirection.Forwards, view.Direction);
\r
1485 Assert.AreEqual(EnumerationDirection.Backwards, view.Backwards().Direction);
\r
1486 Assert.AreEqual(0,list.Offset);
\r
1487 Assert.AreEqual(1,view.Offset);
\r
1492 public void Contains()
\r
1494 Assert.IsTrue(view.Contains(1));
\r
1495 Assert.IsFalse(view.Contains(0));
\r
1497 LinkedList<int> lst2 = new LinkedList<int>();
\r
1500 Assert.IsTrue(view.ContainsAll(lst2));
\r
1502 Assert.IsFalse(view.ContainsAll(lst2));
\r
1503 Assert.AreEqual(Speed.Linear, view.ContainsSpeed);
\r
1504 Assert.AreEqual(2, view.Count);
\r
1506 Assert.AreEqual(1, view.ContainsCount(2));
\r
1507 Assert.AreEqual(2, view.ContainsCount(1));
\r
1508 Assert.AreEqual(3, view.Count);
\r
1513 public void CreateView()
\r
1515 LinkedList<int> view2 = (LinkedList<int>)view.View(1, 0);
\r
1517 Assert.AreSame(list, view2.Underlying);
\r
1522 public void FIFO()
\r
1524 Assert.IsTrue(view.FIFO);
\r
1525 view.Add(23);view.Add(24);view.Add(25);
\r
1527 Assert.IsTrue(IC.eq(view, 1, 2, 23, 24, 25));
\r
1528 Assert.AreEqual(1, view.Remove());
\r
1530 Assert.IsTrue(IC.eq(view, 2, 23, 24, 25));
\r
1531 view.FIFO = false;
\r
1532 Assert.IsFalse(view.FIFO);
\r
1533 Assert.AreEqual(25, view.Remove());
\r
1535 Assert.IsTrue(IC.eq(view, 2, 23, 24));
\r
1540 public void MapEtc()
\r
1543 LinkedList<double> dbl = (LinkedList<double>)view.Map(new Mapper<int,double>(delegate(int i){return i/10.0;}));
\r
1545 Assert.IsTrue(dbl.Check());
\r
1546 Assert.AreEqual(0.1, dbl[0]);
\r
1547 Assert.AreEqual(0.2, dbl[1]);
\r
1548 for (int i = 0; i < 10; i++) view.Add(i);
\r
1550 list = (LinkedList<int>)view.FindAll(new Filter<int>(delegate(int i){return i%4==1;}));
\r
1551 Assert.IsTrue(list.Check());
\r
1552 Assert.IsTrue(IC.eq(list, 1, 1, 5, 9));
\r
1560 Assert.AreEqual(1, view.First);
\r
1561 Assert.AreEqual(2, view.Last);
\r
1566 public void Indexing()
\r
1569 for (int i = 0; i < 20; i++) list.Add(i);
\r
1571 view = (LinkedList<int>)list.View(5, 7);
\r
1572 for (int i = 0; i < 7; i++) Assert.AreEqual(i + 5, view[i]);
\r
1574 for (int i = 0; i < 7; i++) Assert.AreEqual(i, view.IndexOf(i + 5));
\r
1576 for (int i = 0; i < 7; i++) Assert.AreEqual(i, view.LastIndexOf(i + 5));
\r
1581 public void INsert()
\r
1583 view.Insert(0, 34);
\r
1584 view.Insert(1, 35);
\r
1585 view.Insert(4, 36);
\r
1586 Assert.IsTrue(view.Check());
\r
1587 Assert.IsTrue(IC.eq(view, 34, 35, 1, 2, 36));
\r
1589 IList<int> list2 = new LinkedList<int>();
\r
1591 list2.AddAll(view);
\r
1592 view.InsertAll(3, list2);
\r
1593 Assert.IsTrue(view.Check());
\r
1594 Assert.IsTrue(IC.eq(view, 34, 35, 1, 34, 35, 1, 2, 36, 2, 36));
\r
1599 public void Sort()
\r
1601 view.Add(45);view.Add(47);view.Add(46);view.Add(48);
\r
1602 Assert.IsFalse(view.IsSorted(new IC()));
\r
1603 view.Sort(new IC());
\r
1605 Assert.IsTrue(IC.eq(list, 0, 1, 2, 45, 46, 47, 48, 3));
\r
1606 Assert.IsTrue(IC.eq(view, 1, 2, 45, 46, 47, 48));
\r
1611 public void Remove()
\r
1613 view.Add(1);view.Add(5);view.Add(3);view.Add(1);view.Add(3);view.Add(0);
\r
1614 Assert.IsTrue(IC.eq(view, 1, 2, 1, 5, 3, 1, 3, 0));
\r
1615 Assert.IsTrue(view.Remove(1));
\r
1617 Assert.IsTrue(IC.eq(view, 2, 1, 5, 3, 1, 3, 0));
\r
1618 Assert.IsTrue(view.Remove(1));
\r
1620 Assert.IsTrue(IC.eq(view, 2, 5, 3, 1, 3, 0));
\r
1621 Assert.IsTrue(view.Remove(0));
\r
1623 Assert.IsTrue(IC.eq(view, 2, 5, 3, 1, 3));
\r
1624 view.RemoveAllCopies(3);
\r
1626 Assert.IsTrue(IC.eq(view, 2, 5, 1));
\r
1627 Assert.IsTrue(IC.eq(list, 0, 2, 5, 1, 3));
\r
1628 view.Add(1);view.Add(5);view.Add(3);view.Add(1);view.Add(3);view.Add(0);
\r
1629 Assert.IsTrue(IC.eq(view, 2, 5, 1, 1, 5, 3, 1, 3, 0));
\r
1631 LinkedList<int> l2 = new LinkedList<int>();
\r
1633 l2.Add(1);l2.Add(2);l2.Add(2);l2.Add(3);l2.Add(1);
\r
1634 view.RemoveAll(l2);
\r
1636 Assert.IsTrue(IC.eq(view, 5, 5, 1, 3, 0));
\r
1637 view.RetainAll(l2);
\r
1639 Assert.IsTrue(IC.eq(view, 1, 3));
\r
1640 view.Add(2);view.Add(4);view.Add(5);
\r
1641 Assert.AreEqual(1, view.RemoveAt(0));
\r
1642 Assert.AreEqual(5, view.RemoveAt(3));
\r
1643 Assert.AreEqual(2, view.RemoveAt(1));
\r
1645 Assert.IsTrue(IC.eq(view, 3, 4));
\r
1647 Assert.AreEqual(3, view.RemoveFirst());
\r
1648 Assert.AreEqual(8, view.RemoveLast());
\r
1649 view.Add(2);view.Add(5);view.Add(3);view.Add(1);
\r
1650 view.RemoveInterval(1, 2);
\r
1652 Assert.IsTrue(IC.eq(view, 4, 3, 1));
\r
1657 public void Reverse()
\r
1660 for (int i = 0; i < 10; i++) view.Add(10 + i);
\r
1662 view.Reverse(3, 4);
\r
1664 Assert.IsTrue(IC.eq(view, 10, 11, 12, 16, 15, 14, 13, 17, 18, 19));
\r
1666 Assert.IsTrue(IC.eq(view, 19, 18, 17, 13, 14, 15, 16, 12, 11, 10));
\r
1667 Assert.IsTrue(IC.eq(list, 0, 19, 18, 17, 13, 14, 15, 16, 12, 11, 10, 3));
\r
1672 public void Slide()
\r
1676 Assert.IsTrue(IC.eq(view, 2, 3));
\r
1679 Assert.IsTrue(IC.eq(view, 0, 1));
\r
1682 Assert.IsTrue(IC.eq(view, 0, 1, 2));
\r
1685 Assert.IsTrue(IC.eq(view, 2));
\r
1686 view.Slide(-1, 0);
\r
1688 Assert.IsTrue(IC.eq(view));
\r
1690 Assert.IsTrue(IC.eq(list, 0, 28, 1, 2, 3));
\r
1693 public void Iterate()
\r
1697 foreach (int i in new int[] { 2, 4, 8, 13, 6, 1, 2, 7 }) list.Add(i);
\r
1699 view = (LinkedList<int>)list.View(list.Count - 2, 2);
\r
1702 //Console.WriteLine("View: {0}: {1} --> {2}", view.Count, view.First, view.Last);
\r
1703 if ((view.Last - view.First) % 2 == 1)
\r
1704 view.Insert(1, 666);
\r
1706 if (view.Offset == 0)
\r
1711 //foreach (int i in list) Console.Write(" " + i);
\r
1712 //Assert.IsTrue(list.Check());
\r
1713 Assert.IsTrue(IC.eq(list, 2, 4, 8, 666, 13, 6, 1, 666, 2, 666, 7));
\r
1718 public void SyncRoot()
\r
1720 Assert.AreSame(view.SyncRoot, list.SyncRoot);
\r
1728 namespace LinkedListOfTreesORLists
\r
1731 public class MultiLevelUnorderedOfUnOrdered
\r
1733 private ICollection<int> dit, dat, dut;
\r
1735 private ICollection<ICollection<int>> Dit, Dat, Dut;
\r
1739 public void Init()
\r
1741 dit = new LinkedList<int>();
\r
1742 dat = new TreeSet<int>(new IC());
\r
1743 dut = new LinkedList<int>();
\r
1744 dit.Add(2);dit.Add(1);
\r
1745 dat.Add(1);dat.Add(2);
\r
1747 Dit = new LinkedList<ICollection<int>>();
\r
1748 Dat = new LinkedList<ICollection<int>>();
\r
1749 Dut = new LinkedList<ICollection<int>>();
\r
1754 public void Check()
\r
1756 Assert.IsTrue(dit.Equals(dat));
\r
1757 Assert.IsFalse(dit.Equals(dut));
\r
1762 public void Multi()
\r
1764 Dit.Add(dit);Dit.Add(dut);Dit.Add(dit);
\r
1765 Dat.Add(dut);Dat.Add(dit);Dat.Add(dat);
\r
1766 Assert.IsTrue(Dit.Equals(Dat));
\r
1767 Assert.IsFalse(Dit.Equals(Dut));
\r
1772 public void Dispose()
\r
1774 dit = dat = dut = null;
\r
1775 Dit = Dat = Dut = null;
\r
1782 public class MultiLevelOrderedOfUnOrdered
\r
1784 private ICollection<int> dit, dat, dut;
\r
1786 private ISequenced<ICollection<int>> Dit, Dat, Dut;
\r
1790 public void Init()
\r
1792 dit = new LinkedList<int>();
\r
1793 dat = new TreeSet<int>(new IC());
\r
1794 dut = new LinkedList<int>();
\r
1795 dit.Add(2);dit.Add(1);
\r
1796 dat.Add(1);dat.Add(2);
\r
1798 Dit = new LinkedList<ICollection<int>>();
\r
1799 Dat = new LinkedList<ICollection<int>>();
\r
1800 Dut = new LinkedList<ICollection<int>>();
\r
1805 public void Check()
\r
1807 Assert.IsTrue(dit.Equals(dat));
\r
1808 Assert.IsFalse(dit.Equals(dut));
\r
1813 public void Multi()
\r
1815 Dit.Add(dit);Dit.Add(dut);Dit.Add(dit);
\r
1816 Dat.Add(dut);Dat.Add(dit);Dat.Add(dat);
\r
1817 Dut.Add(dit);Dut.Add(dut);Dut.Add(dat);
\r
1818 Assert.IsFalse(Dit.Equals(Dat));
\r
1819 Assert.IsTrue(Dit.Equals(Dut));
\r
1824 public void Dispose()
\r
1826 dit = dat = dut = null;
\r
1827 Dit = Dat = Dut = null;
\r
1834 public class MultiLevelUnOrderedOfOrdered
\r
1836 private ISequenced<int> dit, dat, dut, dot;
\r
1838 private ICollection<ISequenced<int>> Dit, Dat, Dut, Dot;
\r
1842 public void Init()
\r
1844 dit = new TreeSet<int>(new IC());
\r
1845 dat = new LinkedList<int>();
\r
1846 dut = new LinkedList<int>();
\r
1847 dot = new LinkedList<int>();
\r
1848 dit.Add(2);dit.Add(1);
\r
1849 dat.Add(2);dat.Add(1);
\r
1851 dot.Add(1);dot.Add(2);
\r
1852 Dit = new LinkedList<ISequenced<int>>();
\r
1853 Dat = new LinkedList<ISequenced<int>>();
\r
1854 Dut = new LinkedList<ISequenced<int>>();
\r
1855 Dot = new LinkedList<ISequenced<int>>();
\r
1860 public void Check()
\r
1862 Assert.IsFalse(dit.Equals(dat));
\r
1863 Assert.IsTrue(dit.Equals(dot));
\r
1864 Assert.IsFalse(dit.Equals(dut));
\r
1869 public void Multi()
\r
1871 Dit.Add(dit);Dit.Add(dut);Dit.Add(dit);
\r
1872 Dat.Add(dut);Dat.Add(dit);Dat.Add(dat);
\r
1873 Dut.Add(dot);Dut.Add(dut);Dut.Add(dit);
\r
1874 Dot.Add(dit);Dot.Add(dit);Dot.Add(dut);
\r
1875 Assert.IsTrue(Dit.Equals(Dut));
\r
1876 Assert.IsFalse(Dit.Equals(Dat));
\r
1877 Assert.IsTrue(Dit.Equals(Dot));
\r
1882 public void Dispose()
\r
1884 dit = dat = dut = dot = null;
\r
1885 Dit = Dat = Dut = Dot = null;
\r
1892 public class MultiLevelOrderedOfOrdered
\r
1894 private ISequenced<int> dit, dat, dut, dot;
\r
1896 private ISequenced<ISequenced<int>> Dit, Dat, Dut, Dot;
\r
1900 public void Init()
\r
1902 dit = new TreeSet<int>(new IC());
\r
1903 dat = new LinkedList<int>();
\r
1904 dut = new LinkedList<int>();
\r
1905 dot = new LinkedList<int>();
\r
1906 dit.Add(2);dit.Add(1);
\r
1907 dat.Add(2);dat.Add(1);
\r
1909 dot.Add(1);dot.Add(2);
\r
1910 Dit = new LinkedList<ISequenced<int>>();
\r
1911 Dat = new LinkedList<ISequenced<int>>();
\r
1912 Dut = new LinkedList<ISequenced<int>>();
\r
1913 Dot = new LinkedList<ISequenced<int>>();
\r
1918 public void Check()
\r
1920 Assert.IsFalse(dit.Equals(dat));
\r
1921 Assert.IsTrue(dit.Equals(dot));
\r
1922 Assert.IsFalse(dit.Equals(dut));
\r
1927 public void Multi()
\r
1929 Dit.Add(dit);Dit.Add(dut);Dit.Add(dit);
\r
1930 Dat.Add(dut);Dat.Add(dit);Dat.Add(dat);
\r
1931 Dut.Add(dot);Dut.Add(dut);Dut.Add(dit);
\r
1932 Dot.Add(dit);Dot.Add(dit);Dot.Add(dut);
\r
1933 Assert.IsTrue(Dit.Equals(Dut));
\r
1934 Assert.IsFalse(Dit.Equals(Dat));
\r
1935 Assert.IsFalse(Dit.Equals(Dot));
\r
1940 public void Dispose()
\r
1942 dit = dat = dut = dot = null;
\r
1943 Dit = Dat = Dut = Dot = null;
\r
1951 namespace HashingAndEquals
\r
1954 public class ISequenced
\r
1956 private ISequenced<int> dit, dat, dut;
\r
1960 public void Init()
\r
1962 dit = new LinkedList<int>();
\r
1963 dat = new LinkedList<int>();
\r
1964 dut = new LinkedList<int>();
\r
1969 public void EmptyEmpty()
\r
1971 Assert.IsTrue(dit.Equals(dat));
\r
1976 public void EmptyNonEmpty()
\r
1979 Assert.IsFalse(dit.Equals(dat));
\r
1980 Assert.IsFalse(dat.Equals(dit));
\r
1984 public int hasher(params int[] items)
\r
1988 foreach (int i in items)
\r
1989 retval = retval * 31 + i;
\r
1996 public void HashVal()
\r
1998 Assert.AreEqual(hasher(), dit.GetHashCode());
\r
2000 Assert.AreEqual(hasher(3), dit.GetHashCode());
\r
2002 Assert.AreEqual(hasher(3, 7), dit.GetHashCode());
\r
2003 Assert.AreEqual(hasher(), dut.GetHashCode());
\r
2005 Assert.AreEqual(hasher(7), dut.GetHashCode());
\r
2007 Assert.AreEqual(hasher(7, 3), dut.GetHashCode());
\r
2012 public void EqualHashButDifferent()
\r
2014 dit.Add(0);dit.Add(31);
\r
2015 dat.Add(1);dat.Add(0);
\r
2016 Assert.AreEqual(dit.GetHashCode(), dat.GetHashCode());
\r
2017 Assert.IsFalse(dit.Equals(dat));
\r
2022 public void Normal()
\r
2027 Assert.IsFalse(dit.Equals(dat));
\r
2028 Assert.IsFalse(dat.Equals(dit));
\r
2030 Assert.IsTrue(dit.Equals(dat));
\r
2031 Assert.IsTrue(dat.Equals(dit));
\r
2036 public void WrongOrder()
\r
2040 Assert.IsTrue(dit.Equals(dut));
\r
2041 Assert.IsTrue(dut.Equals(dit));
\r
2043 ((LinkedList<int>)dut).InsertFirst(7);
\r
2044 Assert.IsFalse(dit.Equals(dut));
\r
2045 Assert.IsFalse(dut.Equals(dit));
\r
2050 public void Reflexive()
\r
2052 Assert.IsTrue(dit.Equals(dit));
\r
2054 Assert.IsTrue(dit.Equals(dit));
\r
2056 Assert.IsTrue(dit.Equals(dit));
\r
2061 public void Dispose()
\r
2072 public class IEditableCollection
\r
2074 private ICollection<int> dit, dat, dut;
\r
2078 public void Init()
\r
2080 dit = new LinkedList<int>();
\r
2081 dat = new LinkedList<int>();
\r
2082 dut = new LinkedList<int>();
\r
2087 public void EmptyEmpty()
\r
2089 Assert.IsTrue(dit.Equals(dat));
\r
2094 public void EmptyNonEmpty()
\r
2097 Assert.IsFalse(dit.Equals(dat));
\r
2098 Assert.IsFalse(dat.Equals(dit));
\r
2102 public int hasher(int count, params int[] items)
\r
2106 foreach (int i in items)
\r
2109 return (count << 16) + retval;
\r
2114 public void HashVal()
\r
2116 Assert.AreEqual(hasher(0), dit.GetHashCode());
\r
2118 Assert.AreEqual(hasher(1, 3), dit.GetHashCode());
\r
2120 Assert.AreEqual(hasher(2, 3, 7), dit.GetHashCode());
\r
2121 Assert.AreEqual(hasher(0), dut.GetHashCode());
\r
2123 Assert.AreEqual(hasher(1, 3), dut.GetHashCode());
\r
2125 Assert.AreEqual(hasher(2, 7, 3), dut.GetHashCode());
\r
2130 public void EqualHashButDifferent()
\r
2132 dit.Add(2);dit.Add(1);
\r
2133 dat.Add(3);dat.Add(0);
\r
2134 Assert.AreEqual(dit.GetHashCode(), dat.GetHashCode());
\r
2135 Assert.IsFalse(dit.Equals(dat));
\r
2140 public void Normal()
\r
2145 Assert.IsFalse(dit.Equals(dat));
\r
2146 Assert.IsFalse(dat.Equals(dit));
\r
2148 Assert.IsTrue(dit.Equals(dat));
\r
2149 Assert.IsTrue(dat.Equals(dit));
\r
2154 public void WrongOrder()
\r
2158 Assert.IsTrue(dit.Equals(dut));
\r
2159 Assert.IsTrue(dut.Equals(dit));
\r
2162 Assert.IsTrue(dit.Equals(dut));
\r
2163 Assert.IsTrue(dut.Equals(dit));
\r
2168 public void Reflexive()
\r
2170 Assert.IsTrue(dit.Equals(dit));
\r
2172 Assert.IsTrue(dit.Equals(dit));
\r
2174 Assert.IsTrue(dit.Equals(dit));
\r
2179 public void Dispose()
\r
2190 public class MultiLevelUnorderedOfUnOrdered
\r
2192 private ICollection<int> dit, dat, dut;
\r
2194 private ICollection<ICollection<int>> Dit, Dat, Dut;
\r
2198 public void Init()
\r
2200 dit = new LinkedList<int>();
\r
2201 dat = new LinkedList<int>();
\r
2202 dut = new LinkedList<int>();
\r
2203 dit.Add(2);dit.Add(1);
\r
2204 dat.Add(1);dat.Add(2);
\r
2206 Dit = new LinkedList<ICollection<int>>();
\r
2207 Dat = new LinkedList<ICollection<int>>();
\r
2208 Dut = new LinkedList<ICollection<int>>();
\r
2213 public void Check()
\r
2215 Assert.IsTrue(dit.Equals(dat));
\r
2216 Assert.IsFalse(dit.Equals(dut));
\r
2221 public void Multi()
\r
2223 Dit.Add(dit);Dit.Add(dut);Dit.Add(dit);
\r
2224 Dat.Add(dut);Dat.Add(dit);Dat.Add(dat);
\r
2225 Assert.IsTrue(Dit.Equals(Dat));
\r
2226 Assert.IsFalse(Dit.Equals(Dut));
\r
2231 public void Dispose()
\r
2233 dit = dat = dut = null;
\r
2234 Dit = Dat = Dut = null;
\r
2241 public class MultiLevelOrderedOfUnOrdered
\r
2243 private ICollection<int> dit, dat, dut;
\r
2245 private ISequenced<ICollection<int>> Dit, Dat, Dut;
\r
2249 public void Init()
\r
2251 dit = new LinkedList<int>();
\r
2252 dat = new LinkedList<int>();
\r
2253 dut = new LinkedList<int>();
\r
2254 dit.Add(2);dit.Add(1);
\r
2255 dat.Add(1);dat.Add(2);
\r
2257 Dit = new LinkedList<ICollection<int>>();
\r
2258 Dat = new LinkedList<ICollection<int>>();
\r
2259 Dut = new LinkedList<ICollection<int>>();
\r
2264 public void Check()
\r
2266 Assert.IsTrue(dit.Equals(dat));
\r
2267 Assert.IsFalse(dit.Equals(dut));
\r
2272 public void Multi()
\r
2274 Dit.Add(dit);Dit.Add(dut);Dit.Add(dit);
\r
2275 Dat.Add(dut);Dat.Add(dit);Dat.Add(dat);
\r
2276 Dut.Add(dit);Dut.Add(dut);Dut.Add(dat);
\r
2277 Assert.IsFalse(Dit.Equals(Dat));
\r
2278 Assert.IsTrue(Dit.Equals(Dut));
\r
2283 public void Dispose()
\r
2285 dit = dat = dut = null;
\r
2286 Dit = Dat = Dut = null;
\r
2293 public class MultiLevelUnOrderedOfOrdered
\r
2295 private ISequenced<int> dit, dat, dut, dot;
\r
2297 private ICollection<ISequenced<int>> Dit, Dat, Dut, Dot;
\r
2301 public void Init()
\r
2303 dit = new LinkedList<int>();
\r
2304 dat = new LinkedList<int>();
\r
2305 dut = new LinkedList<int>();
\r
2306 dot = new LinkedList<int>();
\r
2307 dit.Add(2);dit.Add(1);
\r
2308 dat.Add(1);dat.Add(2);
\r
2310 dot.Add(2);dot.Add(1);
\r
2311 Dit = new LinkedList<ISequenced<int>>();
\r
2312 Dat = new LinkedList<ISequenced<int>>();
\r
2313 Dut = new LinkedList<ISequenced<int>>();
\r
2314 Dot = new LinkedList<ISequenced<int>>();
\r
2319 public void Check()
\r
2321 Assert.IsFalse(dit.Equals(dat));
\r
2322 Assert.IsTrue(dit.Equals(dot));
\r
2323 Assert.IsFalse(dit.Equals(dut));
\r
2328 public void Multi()
\r
2330 Dit.Add(dit);Dit.Add(dut);Dit.Add(dit);
\r
2331 Dat.Add(dut);Dat.Add(dit);Dat.Add(dat);
\r
2332 Dut.Add(dot);Dut.Add(dut);Dut.Add(dit);
\r
2333 Dot.Add(dit);Dot.Add(dit);Dot.Add(dut);
\r
2334 Assert.IsTrue(Dit.Equals(Dut));
\r
2335 Assert.IsFalse(Dit.Equals(Dat));
\r
2336 Assert.IsTrue(Dit.Equals(Dot));
\r
2341 public void Dispose()
\r
2343 dit = dat = dut = dot = null;
\r
2344 Dit = Dat = Dut = Dot = null;
\r
2351 public class MultiLevelOrderedOfOrdered
\r
2353 private ISequenced<int> dit, dat, dut, dot;
\r
2355 private ISequenced<ISequenced<int>> Dit, Dat, Dut, Dot;
\r
2359 public void Init()
\r
2361 dit = new LinkedList<int>();
\r
2362 dat = new LinkedList<int>();
\r
2363 dut = new LinkedList<int>();
\r
2364 dot = new LinkedList<int>();
\r
2365 dit.Add(2);dit.Add(1);
\r
2366 dat.Add(1);dat.Add(2);
\r
2368 dot.Add(2);dot.Add(1);
\r
2369 Dit = new LinkedList<ISequenced<int>>();
\r
2370 Dat = new LinkedList<ISequenced<int>>();
\r
2371 Dut = new LinkedList<ISequenced<int>>();
\r
2372 Dot = new LinkedList<ISequenced<int>>();
\r
2377 public void Check()
\r
2379 Assert.IsFalse(dit.Equals(dat));
\r
2380 Assert.IsTrue(dit.Equals(dot));
\r
2381 Assert.IsFalse(dit.Equals(dut));
\r
2386 public void Multi()
\r
2388 Dit.Add(dit);Dit.Add(dut);Dit.Add(dit);
\r
2389 Dat.Add(dut);Dat.Add(dit);Dat.Add(dat);
\r
2390 Dut.Add(dot);Dut.Add(dut);Dut.Add(dit);
\r
2391 Dot.Add(dit);Dot.Add(dit);Dot.Add(dut);
\r
2392 Assert.IsTrue(Dit.Equals(Dut));
\r
2393 Assert.IsFalse(Dit.Equals(Dat));
\r
2394 Assert.IsFalse(Dit.Equals(Dot));
\r
2399 public void Dispose()
\r
2401 dit = dat = dut = dot = null;
\r
2402 Dit = Dat = Dut = Dot = null;
\r