3 Copyright (c) 2003-2004 Niels Kokholm <kokholm@itu.dk> and Peter Sestoft <sestoft@dina.kvl.dk>
\r
4 Permission is hereby granted, free of charge, to any person obtaining a copy
\r
5 of this software and associated documentation files (the "Software"), to deal
\r
6 in the Software without restriction, including without limitation the rights
\r
7 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
\r
8 copies of the Software, and to permit persons to whom the Software is
\r
9 furnished to do so, subject to the following conditions:
\r
11 The above copyright notice and this permission notice shall be included in
\r
12 all copies or substantial portions of the Software.
\r
14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
\r
15 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
\r
16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
\r
17 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
\r
18 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
\r
19 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
\r
25 using NUnit.Framework;
\r
26 using MSG = System.Collections.Generic;
\r
27 namespace nunit.hashtable.set
\r
29 namespace Enumerable
\r
32 public class Multiops
\r
34 private HashSet<int> list;
\r
36 private Filter<int> always, never, even;
\r
42 list = new HashSet<int>();
\r
43 always = delegate{return true;};
\r
44 never = delegate{return false;};
\r
45 even = delegate(int i){return i%2==0;};
\r
52 Assert.IsTrue(list.All(always));
\r
53 Assert.IsTrue(list.All(never));
\r
54 Assert.IsTrue(list.All(even));
\r
56 Assert.IsTrue(list.All(always));
\r
57 Assert.IsFalse(list.All(never));
\r
58 Assert.IsTrue(list.All(even));
\r
60 Assert.IsTrue(list.All(always));
\r
61 Assert.IsFalse(list.All(never));
\r
62 Assert.IsFalse(list.All(even));
\r
67 public void Exists()
\r
69 Assert.IsFalse(list.Exists(always));
\r
70 Assert.IsFalse(list.Exists(never));
\r
71 Assert.IsFalse(list.Exists(even));
\r
73 Assert.IsTrue(list.Exists(always));
\r
74 Assert.IsFalse(list.Exists(never));
\r
75 Assert.IsFalse(list.Exists(even));
\r
77 Assert.IsTrue(list.Exists(always));
\r
78 Assert.IsFalse(list.Exists(never));
\r
79 Assert.IsTrue(list.Exists(even));
\r
87 Applier<int> a = delegate(int i){sum=i+10*sum;};
\r
90 Assert.AreEqual(0, sum);
\r
92 list.Add(5);list.Add(8);list.Add(7);list.Add(5);
\r
94 Assert.AreEqual(758, sum);
\r
99 public void Dispose() { list = null; }
\r
105 public class GetEnumerator
\r
107 private HashSet<int> hashset;
\r
111 public void Init() { hashset = new HashSet<int>(); }
\r
115 public void Empty()
\r
117 MSG.IEnumerator<int> e = hashset.GetEnumerator();
\r
119 Assert.IsFalse(e.MoveNext());
\r
124 public void Normal()
\r
136 Assert.IsTrue(IC.seq(hashset, 1, 5, 8, 10, 16, 17, 18, 33));
\r
140 #if SAFEENUMERATORS
\r
142 [ExpectedException(typeof(InvalidOperationException))]
\r
143 public void TooEarlyCurrent()
\r
145 int none = hashset.GetEnumerator().Current;
\r
148 [ExpectedException(typeof(InvalidOperationException))]
\r
149 public void TooLateMoveNext()
\r
155 MSG.IEnumerator<int> e = hashset.GetEnumerator();
\r
166 [ExpectedException(typeof(InvalidOperationException))]
\r
167 public void TooLateCurrent()
\r
173 MSG.IEnumerator<int> e = hashset.GetEnumerator();
\r
185 [ExpectedException(typeof(InvalidOperationException))]
\r
186 public void MoveNextAfterDispose()
\r
192 MSG.IEnumerator<int> e = hashset.GetEnumerator();
\r
201 [ExpectedException(typeof(InvalidOperationException))]
\r
202 public void CurrentAfterDispose()
\r
208 MSG.IEnumerator<int> e = hashset.GetEnumerator();
\r
218 public void DoDispose()
\r
224 MSG.IEnumerator<int> e = hashset.GetEnumerator();
\r
233 [ExpectedException(typeof(InvalidOperationException))]
\r
234 public void MoveNextAfterUpdate()
\r
240 MSG.IEnumerator<int> e = hashset.GetEnumerator();
\r
249 public void Dispose() { hashset = null; }
\r
256 namespace CollectionOrSink
\r
259 public class CollectionOrSink
\r
261 private HashSet<int> hashset;
\r
265 public void Init() { hashset = new HashSet<int>(); }
\r
269 public void CountEtAl()
\r
271 Assert.AreEqual(0, hashset.Count);
\r
272 Assert.IsTrue(hashset.IsEmpty);
\r
273 Assert.IsFalse(hashset.AllowsDuplicates);
\r
274 Assert.IsTrue(hashset.Add(0));
\r
275 Assert.AreEqual(1, hashset.Count);
\r
276 Assert.IsFalse(hashset.IsEmpty);
\r
277 Assert.IsTrue(hashset.Add(5));
\r
278 Assert.AreEqual(2, hashset.Count);
\r
279 Assert.IsFalse(hashset.Add(5));
\r
280 Assert.AreEqual(2, hashset.Count);
\r
281 Assert.IsFalse(hashset.IsEmpty);
\r
282 Assert.IsTrue(hashset.Add(8));
\r
283 Assert.AreEqual(3, hashset.Count);
\r
288 public void AddAll()
\r
290 hashset.Add(3);hashset.Add(4);hashset.Add(5);
\r
292 HashSet<int> hashset2 = new HashSet<int>();
\r
294 hashset2.AddAll(hashset);
\r
295 Assert.IsTrue(IC.seq(hashset2, 3, 4, 5));
\r
297 hashset.AddAll(hashset2);
\r
298 Assert.IsTrue(IC.seq(hashset2, 3, 4, 5));
\r
299 Assert.IsTrue(IC.seq(hashset, 3, 4, 5, 9));
\r
304 public void Dispose() { hashset = null; }
\r
310 public class ArrayTest
\r
312 private HashSet<int> hashset;
\r
320 hashset = new HashSet<int>();
\r
322 for (int i = 0; i < 10; i++)
\r
328 public void Dispose() { hashset = null; }
\r
331 private string aeq(int[] a, params int[] b)
\r
333 if (a.Length != b.Length)
\r
334 return "Lengths differ: " + a.Length + " != " + b.Length;
\r
336 for (int i = 0; i < a.Length; i++)
\r
338 return String.Format("{0}'th elements differ: {1} != {2}", i, a[i], b[i]);
\r
340 return "Alles klar";
\r
345 public void ToArray()
\r
347 Assert.AreEqual("Alles klar", aeq(hashset.ToArray()));
\r
352 int[] r = hashset.ToArray();
\r
355 Assert.AreEqual("Alles klar", aeq(r, 3, 7, 10));
\r
360 public void CopyTo()
\r
362 //Note: for small ints the itemhasher is the identity!
\r
363 hashset.CopyTo(a, 1);
\r
364 Assert.AreEqual("Alles klar", aeq(a, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009));
\r
366 hashset.CopyTo(a, 2);
\r
367 Assert.AreEqual("Alles klar", aeq(a, 1000, 1001, 6, 1003, 1004, 1005, 1006, 1007, 1008, 1009));
\r
370 hashset.CopyTo(a, 4);
\r
372 //TODO: make test independent on onterhasher
\r
373 Assert.AreEqual("Alles klar", aeq(a, 1000, 1001, 6, 1003, 6, 9, 4, 1007, 1008, 1009));
\r
376 hashset.CopyTo(a, 9);
\r
377 Assert.AreEqual("Alles klar", aeq(a, 1000, 1001, 6, 1003, 6, 9, 4, 1007, 1008, 7));
\r
382 [ExpectedException(typeof(ArgumentException))]
\r
383 public void CopyToBad()
\r
386 hashset.CopyTo(a, 10);
\r
391 [ExpectedException(typeof(ArgumentOutOfRangeException))]
\r
392 public void CopyToBad2()
\r
394 hashset.CopyTo(a, -1);
\r
399 [ExpectedException(typeof(ArgumentException))]
\r
400 public void CopyToTooFar()
\r
404 hashset.CopyTo(a, 9);
\r
413 private HashSet<int> list;
\r
419 list = new HashSet<int>();
\r
424 public void Dispose() { list = null; }
\r
430 Assert.IsNotNull(list.SyncRoot);
\r
438 namespace EditableCollection
\r
441 public class Collision
\r
443 HashSet<int> hashset;
\r
449 hashset = new HashSet<int>();
\r
454 public void SingleCollision()
\r
457 hashset.Add(7 - 1503427877);
\r
459 //foreach (int i in hashset) Console.WriteLine("A: {0}", i);
\r
461 Assert.IsTrue(hashset.Contains(7 - 1503427877));
\r
466 public void Dispose()
\r
475 public class Searching
\r
477 private HashSet<int> hashset;
\r
481 public void Init() { hashset = new HashSet<int>(); }
\r
485 public void Contains()
\r
487 Assert.IsFalse(hashset.Contains(5));
\r
489 Assert.IsTrue(hashset.Contains(5));
\r
490 Assert.IsFalse(hashset.Contains(7));
\r
493 Assert.IsTrue(hashset.Contains(5));
\r
494 Assert.IsFalse(hashset.Contains(7));
\r
495 Assert.IsTrue(hashset.Contains(8));
\r
496 Assert.IsTrue(hashset.Contains(10));
\r
498 Assert.IsTrue(hashset.Contains(5));
\r
499 Assert.IsFalse(hashset.Contains(7));
\r
500 Assert.IsFalse(hashset.Contains(8));
\r
501 Assert.IsTrue(hashset.Contains(10));
\r
502 hashset.Add(0);hashset.Add(16);hashset.Add(32);hashset.Add(48);hashset.Add(64);
\r
503 Assert.IsTrue(hashset.Contains(0));
\r
504 Assert.IsTrue(hashset.Contains(16));
\r
505 Assert.IsTrue(hashset.Contains(32));
\r
506 Assert.IsTrue(hashset.Contains(48));
\r
507 Assert.IsTrue(hashset.Contains(64));
\r
508 Assert.IsTrue(hashset.Check());
\r
512 Assert.IsTrue(hashset.Find(ref i));
\r
513 Assert.AreEqual(j, i);
\r
515 Assert.IsTrue(hashset.Find(ref i));
\r
516 Assert.AreEqual(j, i);
\r
518 Assert.IsTrue(hashset.Find(ref i));
\r
519 Assert.AreEqual(j, i);
\r
521 Assert.IsTrue(hashset.Find(ref i));
\r
522 Assert.AreEqual(j, i);
\r
524 Assert.IsTrue(hashset.Find(ref i));
\r
525 Assert.AreEqual(j, i);
\r
527 Assert.IsFalse(hashset.Find(ref i));
\r
528 Assert.AreEqual(j, i);
\r
536 int[] a = new int[j];
\r
538 for (int i = 0; i < j; i++)
\r
540 hashset.Add(3 * i + 1);
\r
544 Assert.IsTrue(IC.seq(hashset, a));
\r
549 public void ContainsCount()
\r
551 Assert.AreEqual(0, hashset.ContainsCount(5));
\r
553 Assert.AreEqual(1, hashset.ContainsCount(5));
\r
554 Assert.AreEqual(0, hashset.ContainsCount(7));
\r
556 Assert.AreEqual(1, hashset.ContainsCount(5));
\r
557 Assert.AreEqual(0, hashset.ContainsCount(7));
\r
558 Assert.AreEqual(1, hashset.ContainsCount(8));
\r
560 Assert.AreEqual(1, hashset.ContainsCount(5));
\r
561 Assert.AreEqual(0, hashset.ContainsCount(7));
\r
562 Assert.AreEqual(1, hashset.ContainsCount(8));
\r
567 public void RemoveAllCopies()
\r
569 hashset.Add(5);hashset.Add(7);hashset.Add(5);
\r
570 Assert.AreEqual(1, hashset.ContainsCount(5));
\r
571 Assert.AreEqual(1, hashset.ContainsCount(7));
\r
572 hashset.RemoveAllCopies(5);
\r
573 Assert.AreEqual(0, hashset.ContainsCount(5));
\r
574 Assert.AreEqual(1, hashset.ContainsCount(7));
\r
575 hashset.Add(5);hashset.Add(8);hashset.Add(5);
\r
576 hashset.RemoveAllCopies(8);
\r
577 Assert.IsTrue(IC.eq(hashset, 7, 5));
\r
582 public void ContainsAll()
\r
584 HashSet<int> list2 = new HashSet<int>();
\r
586 Assert.IsTrue(hashset.ContainsAll(list2));
\r
588 Assert.IsFalse(hashset.ContainsAll(list2));
\r
590 Assert.IsTrue(hashset.ContainsAll(list2));
\r
592 Assert.IsTrue(hashset.ContainsAll(list2));
\r
594 Assert.IsFalse(hashset.ContainsAll(list2));
\r
596 Assert.IsTrue(hashset.ContainsAll(list2));
\r
601 public void RetainAll()
\r
603 HashSet<int> list2 = new HashSet<int>();
\r
605 hashset.Add(4);hashset.Add(5);hashset.Add(6);
\r
606 list2.Add(5);list2.Add(4);list2.Add(7);
\r
607 hashset.RetainAll(list2);
\r
608 Assert.IsTrue(IC.seq(hashset, 4, 5));
\r
611 list2.Add(7);list2.Add(8);list2.Add(9);
\r
612 hashset.RetainAll(list2);
\r
613 Assert.IsTrue(IC.seq(hashset));
\r
618 public void RemoveAll()
\r
620 HashSet<int> list2 = new HashSet<int>();
\r
622 hashset.Add(4);hashset.Add(5);hashset.Add(6);
\r
623 list2.Add(5);list2.Add(7);list2.Add(4);
\r
624 hashset.RemoveAll(list2);
\r
625 Assert.IsTrue(IC.eq(hashset, 6));
\r
626 hashset.Add(5);hashset.Add(4);
\r
628 list2.Add(6);list2.Add(5);
\r
629 hashset.RemoveAll(list2);
\r
630 Assert.IsTrue(IC.eq(hashset, 4));
\r
632 list2.Add(7);list2.Add(8);list2.Add(9);
\r
633 hashset.RemoveAll(list2);
\r
634 Assert.IsTrue(IC.eq(hashset, 4));
\r
639 public void Remove()
\r
641 hashset.Add(4);hashset.Add(4);hashset.Add(5);hashset.Add(4);hashset.Add(6);
\r
642 Assert.IsFalse(hashset.Remove(2));
\r
643 Assert.IsTrue(hashset.Remove(4));
\r
644 Assert.IsTrue(IC.seq(hashset, 5, 6));
\r
646 hashset.Add(21);hashset.Add(37);hashset.Add(53);hashset.Add(69);hashset.Add(85);
\r
647 Assert.IsTrue(hashset.Remove(5));
\r
648 Assert.IsTrue(IC.seq(hashset, 6, 7, 21, 37, 53, 69, 85));
\r
649 Assert.IsFalse(hashset.Remove(165));
\r
650 Assert.IsTrue(IC.seq(hashset, 6, 7, 21, 37, 53, 69, 85));
\r
651 Assert.IsTrue(hashset.Remove(53));
\r
652 Assert.IsTrue(IC.seq(hashset, 6, 7, 21, 37, 69, 85));
\r
653 Assert.IsTrue(hashset.Remove(37));
\r
654 Assert.IsTrue(IC.seq(hashset, 6, 7, 21, 69, 85));
\r
655 Assert.IsTrue(hashset.Remove(85));
\r
656 Assert.IsTrue(IC.seq(hashset, 6, 7, 21, 69));
\r
661 public void Clear()
\r
663 hashset.Add(7);hashset.Add(7);
\r
665 Assert.IsTrue(hashset.IsEmpty);
\r
670 public void Dispose() { hashset = null; }
\r
674 public class Combined
\r
676 private ICollection<KeyValuePair<int,int>> lst;
\r
682 lst = new HashSet<KeyValuePair<int,int>>();
\r
683 for (int i = 0; i < 10; i++)
\r
684 lst.Add(new KeyValuePair<int,int>(i, i + 30));
\r
689 public void Dispose() { lst = null; }
\r
695 KeyValuePair<int,int> p = new KeyValuePair<int,int>(3, 78);
\r
697 Assert.IsTrue(lst.Find(ref p));
\r
698 Assert.AreEqual(3, p.key);
\r
699 Assert.AreEqual(33, p.value);
\r
700 p = new KeyValuePair<int,int>(13, 78);
\r
701 Assert.IsFalse(lst.Find(ref p));
\r
706 public void FindOrAdd()
\r
708 KeyValuePair<int,int> p = new KeyValuePair<int,int>(3, 78);
\r
709 KeyValuePair<int,int> q = new KeyValuePair<int,int>();
\r
711 Assert.IsTrue(lst.FindOrAdd(ref p));
\r
712 Assert.AreEqual(3, p.key);
\r
713 Assert.AreEqual(33, p.value);
\r
714 p = new KeyValuePair<int,int>(13, 79);
\r
715 Assert.IsFalse(lst.FindOrAdd(ref p));
\r
717 Assert.IsTrue(lst.Find(ref q));
\r
718 Assert.AreEqual(13, q.key);
\r
719 Assert.AreEqual(79, q.value);
\r
724 public void Update()
\r
726 KeyValuePair<int,int> p = new KeyValuePair<int,int>(3, 78);
\r
727 KeyValuePair<int,int> q = new KeyValuePair<int,int>();
\r
729 Assert.IsTrue(lst.Update(p));
\r
731 Assert.IsTrue(lst.Find(ref q));
\r
732 Assert.AreEqual(3, q.key);
\r
733 Assert.AreEqual(78, q.value);
\r
734 p = new KeyValuePair<int,int>(13, 78);
\r
735 Assert.IsFalse(lst.Update(p));
\r
740 public void UpdateOrAdd()
\r
742 KeyValuePair<int,int> p = new KeyValuePair<int,int>(3, 78);
\r
743 KeyValuePair<int,int> q = new KeyValuePair<int,int>();
\r
745 Assert.IsTrue(lst.UpdateOrAdd(p));
\r
747 Assert.IsTrue(lst.Find(ref q));
\r
748 Assert.AreEqual(3, q.key);
\r
749 Assert.AreEqual(78, q.value);
\r
750 p = new KeyValuePair<int,int>(13, 79);
\r
751 Assert.IsFalse(lst.UpdateOrAdd(p));
\r
753 Assert.IsTrue(lst.Find(ref q));
\r
754 Assert.AreEqual(13, q.key);
\r
755 Assert.AreEqual(79, q.value);
\r
760 public void RemoveWithReturn()
\r
762 KeyValuePair<int,int> p = new KeyValuePair<int,int>(3, 78);
\r
763 KeyValuePair<int,int> q = new KeyValuePair<int,int>();
\r
765 Assert.IsTrue(lst.RemoveWithReturn(ref p));
\r
766 Assert.AreEqual(3, p.key);
\r
767 Assert.AreEqual(33, p.value);
\r
768 p = new KeyValuePair<int,int>(13, 78);
\r
769 Assert.IsFalse(lst.RemoveWithReturn(ref p));
\r
777 namespace HashingAndEquals
\r
780 public class IEditableCollection
\r
782 private ICollection<int> dit, dat, dut;
\r
788 dit = new HashSet<int>();
\r
789 dat = new HashSet<int>();
\r
790 dut = new HashSet<int>();
\r
795 public void EmptyEmpty()
\r
797 Assert.IsTrue(dit.Equals(dat));
\r
802 public void EmptyNonEmpty()
\r
805 Assert.IsFalse(dit.Equals(dat));
\r
806 Assert.IsFalse(dat.Equals(dit));
\r
810 public int hasher(int count, params int[] items)
\r
814 foreach (int i in items)
\r
817 return (count << 16) + retval;
\r
822 public void HashVal()
\r
824 Assert.AreEqual(hasher(0), dit.GetHashCode());
\r
826 Assert.AreEqual(hasher(1, 3), dit.GetHashCode());
\r
828 Assert.AreEqual(hasher(2, 3, 7), dit.GetHashCode());
\r
829 Assert.AreEqual(hasher(0), dut.GetHashCode());
\r
831 Assert.AreEqual(hasher(1, 3), dut.GetHashCode());
\r
833 Assert.AreEqual(hasher(2, 7, 3), dut.GetHashCode());
\r
838 public void EqualHashButDifferent()
\r
840 dit.Add(2);dit.Add(1);
\r
841 dat.Add(3);dat.Add(0);
\r
842 Assert.AreEqual(dit.GetHashCode(), dat.GetHashCode());
\r
843 Assert.IsFalse(dit.Equals(dat));
\r
848 public void Normal()
\r
853 Assert.IsFalse(dit.Equals(dat));
\r
854 Assert.IsFalse(dat.Equals(dit));
\r
856 Assert.IsTrue(dit.Equals(dat));
\r
857 Assert.IsTrue(dat.Equals(dit));
\r
862 public void WrongOrder()
\r
866 Assert.IsTrue(dit.Equals(dut));
\r
867 Assert.IsTrue(dut.Equals(dit));
\r
870 Assert.IsTrue(dit.Equals(dut));
\r
871 Assert.IsTrue(dut.Equals(dit));
\r
876 public void Reflexive()
\r
878 Assert.IsTrue(dit.Equals(dit));
\r
880 Assert.IsTrue(dit.Equals(dit));
\r
882 Assert.IsTrue(dit.Equals(dit));
\r
887 public void Dispose()
\r
898 public class MultiLevelUnorderedOfUnOrdered
\r
900 private ICollection<int> dit, dat, dut;
\r
902 private ICollection<ICollection<int>> Dit, Dat, Dut;
\r
908 dit = new HashSet<int>();
\r
909 dat = new HashSet<int>();
\r
910 dut = new HashSet<int>();
\r
911 dit.Add(2);dit.Add(1);
\r
912 dat.Add(1);dat.Add(2);
\r
914 Dit = new HashSet<ICollection<int>>();
\r
915 Dat = new HashSet<ICollection<int>>();
\r
916 Dut = new HashSet<ICollection<int>>();
\r
921 public void Check()
\r
923 Assert.IsTrue(dit.Equals(dat));
\r
924 Assert.IsFalse(dit.Equals(dut));
\r
929 public void Multi()
\r
931 Dit.Add(dit);Dit.Add(dut);Dit.Add(dit);
\r
932 Dat.Add(dut);Dat.Add(dit);Dat.Add(dat);
\r
933 Assert.IsTrue(Dit.Equals(Dat));
\r
934 Assert.IsFalse(Dit.Equals(Dut));
\r
939 public void Dispose()
\r
941 dit = dat = dut = null;
\r
942 Dit = Dat = Dut = null;
\r
949 public class MultiLevelOrderedOfUnOrdered
\r
951 private ICollection<int> dit, dat, dut;
\r
953 private ISequenced<ICollection<int>> Dit, Dat, Dut;
\r
959 dit = new HashSet<int>();
\r
960 dat = new HashSet<int>();
\r
961 dut = new HashSet<int>();
\r
962 dit.Add(2);dit.Add(1);
\r
963 dat.Add(1);dat.Add(2);
\r
965 Dit = new LinkedList<ICollection<int>>();
\r
966 Dat = new LinkedList<ICollection<int>>();
\r
967 Dut = new LinkedList<ICollection<int>>();
\r
972 public void Check()
\r
974 Assert.IsTrue(dit.Equals(dat));
\r
975 Assert.IsFalse(dit.Equals(dut));
\r
980 public void Multi()
\r
982 Dit.Add(dit);Dit.Add(dut);Dit.Add(dit);
\r
983 Dat.Add(dut);Dat.Add(dit);Dat.Add(dat);
\r
984 Dut.Add(dit);Dut.Add(dut);Dut.Add(dat);
\r
985 Assert.IsFalse(Dit.Equals(Dat));
\r
986 Assert.IsTrue(Dit.Equals(Dut));
\r
991 public void Dispose()
\r
993 dit = dat = dut = null;
\r
994 Dit = Dat = Dut = null;
\r
1001 public class MultiLevelUnOrderedOfOrdered
\r
1003 private ISequenced<int> dit, dat, dut, dot;
\r
1005 private ICollection<ISequenced<int>> Dit, Dat, Dut, Dot;
\r
1009 public void Init()
\r
1011 dit = new LinkedList<int>();
\r
1012 dat = new LinkedList<int>();
\r
1013 dut = new LinkedList<int>();
\r
1014 dot = new LinkedList<int>();
\r
1015 dit.Add(2);dit.Add(1);
\r
1016 dat.Add(1);dat.Add(2);
\r
1018 dot.Add(2);dot.Add(1);
\r
1019 Dit = new HashSet<ISequenced<int>>();
\r
1020 Dat = new HashSet<ISequenced<int>>();
\r
1021 Dut = new HashSet<ISequenced<int>>();
\r
1022 Dot = new HashSet<ISequenced<int>>();
\r
1027 public void Check()
\r
1029 Assert.IsFalse(dit.Equals(dat));
\r
1030 Assert.IsTrue(dit.Equals(dot));
\r
1031 Assert.IsFalse(dit.Equals(dut));
\r
1036 public void Multi()
\r
1038 Dit.Add(dit);Dit.Add(dut);//Dit.Add(dit);
\r
1039 Dat.Add(dut);Dat.Add(dit);Dat.Add(dat);
\r
1040 Dut.Add(dot);Dut.Add(dut);//Dut.Add(dit);
\r
1041 Dot.Add(dit);Dot.Add(dit);Dot.Add(dut);
\r
1042 Assert.IsTrue(Dit.Equals(Dit));
\r
1043 Assert.IsTrue(Dit.Equals(Dut));
\r
1044 Assert.IsFalse(Dit.Equals(Dat));
\r
1045 Assert.IsTrue(Dit.Equals(Dot));
\r
1050 public void Dispose()
\r
1052 dit = dat = dut = dot = null;
\r
1053 Dit = Dat = Dut = Dot = null;
\r