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
84 [Ignore("This is also failing on windows. Martin")]
\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(758, sum);
\r
100 public void Dispose() { list = null; }
\r
106 public class GetEnumerator
\r
108 private HashSet<int> hashset;
\r
112 public void Init() { hashset = new HashSet<int>(); }
\r
116 public void Empty()
\r
118 MSG.IEnumerator<int> e = hashset.GetEnumerator();
\r
120 Assert.IsFalse(e.MoveNext());
\r
125 public void Normal()
\r
137 Assert.IsTrue(IC.seq(hashset, 1, 5, 8, 10, 16, 17, 18, 33));
\r
141 #if SAFEENUMERATORS
\r
143 [ExpectedException(typeof(InvalidOperationException))]
\r
144 public void TooEarlyCurrent()
\r
146 int none = hashset.GetEnumerator().Current;
\r
149 [ExpectedException(typeof(InvalidOperationException))]
\r
150 public void TooLateMoveNext()
\r
156 MSG.IEnumerator<int> e = hashset.GetEnumerator();
\r
167 [ExpectedException(typeof(InvalidOperationException))]
\r
168 public void TooLateCurrent()
\r
174 MSG.IEnumerator<int> e = hashset.GetEnumerator();
\r
186 [ExpectedException(typeof(InvalidOperationException))]
\r
187 public void MoveNextAfterDispose()
\r
193 MSG.IEnumerator<int> e = hashset.GetEnumerator();
\r
202 [ExpectedException(typeof(InvalidOperationException))]
\r
203 public void CurrentAfterDispose()
\r
209 MSG.IEnumerator<int> e = hashset.GetEnumerator();
\r
219 public void DoDispose()
\r
225 MSG.IEnumerator<int> e = hashset.GetEnumerator();
\r
234 [ExpectedException(typeof(InvalidOperationException))]
\r
235 public void MoveNextAfterUpdate()
\r
241 MSG.IEnumerator<int> e = hashset.GetEnumerator();
\r
250 public void Dispose() { hashset = null; }
\r
257 namespace CollectionOrSink
\r
260 public class CollectionOrSink
\r
262 private HashSet<int> hashset;
\r
266 public void Init() { hashset = new HashSet<int>(); }
\r
270 public void CountEtAl()
\r
272 Assert.AreEqual(0, hashset.Count);
\r
273 Assert.IsTrue(hashset.IsEmpty);
\r
274 Assert.IsFalse(hashset.AllowsDuplicates);
\r
275 Assert.IsTrue(hashset.Add(0));
\r
276 Assert.AreEqual(1, hashset.Count);
\r
277 Assert.IsFalse(hashset.IsEmpty);
\r
278 Assert.IsTrue(hashset.Add(5));
\r
279 Assert.AreEqual(2, hashset.Count);
\r
280 Assert.IsFalse(hashset.Add(5));
\r
281 Assert.AreEqual(2, hashset.Count);
\r
282 Assert.IsFalse(hashset.IsEmpty);
\r
283 Assert.IsTrue(hashset.Add(8));
\r
284 Assert.AreEqual(3, hashset.Count);
\r
289 public void AddAll()
\r
291 hashset.Add(3);hashset.Add(4);hashset.Add(5);
\r
293 HashSet<int> hashset2 = new HashSet<int>();
\r
295 hashset2.AddAll(hashset);
\r
296 Assert.IsTrue(IC.seq(hashset2, 3, 4, 5));
\r
298 hashset.AddAll(hashset2);
\r
299 Assert.IsTrue(IC.seq(hashset2, 3, 4, 5));
\r
300 Assert.IsTrue(IC.seq(hashset, 3, 4, 5, 9));
\r
305 public void Dispose() { hashset = null; }
\r
311 public class ArrayTest
\r
313 private HashSet<int> hashset;
\r
321 hashset = new HashSet<int>();
\r
323 for (int i = 0; i < 10; i++)
\r
329 public void Dispose() { hashset = null; }
\r
332 private string aeq(int[] a, params int[] b)
\r
334 if (a.Length != b.Length)
\r
335 return "Lengths differ: " + a.Length + " != " + b.Length;
\r
337 for (int i = 0; i < a.Length; i++)
\r
339 return String.Format("{0}'th elements differ: {1} != {2}", i, a[i], b[i]);
\r
341 return "Alles klar";
\r
346 public void ToArray()
\r
348 Assert.AreEqual("Alles klar", aeq(hashset.ToArray()));
\r
353 int[] r = hashset.ToArray();
\r
356 Assert.AreEqual("Alles klar", aeq(r, 3, 7, 10));
\r
361 [Ignore("This is also failing on windows. Martin")]
\r
362 public void CopyTo()
\r
364 //Note: for small ints the itemhasher is the identity!
\r
365 hashset.CopyTo(a, 1);
\r
366 Assert.AreEqual("Alles klar", aeq(a, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009));
\r
368 hashset.CopyTo(a, 2);
\r
369 Assert.AreEqual("Alles klar", aeq(a, 1000, 1001, 6, 1003, 1004, 1005, 1006, 1007, 1008, 1009));
\r
372 hashset.CopyTo(a, 4);
\r
374 //TODO: make test independent on onterhasher
\r
375 Assert.AreEqual("Alles klar", aeq(a, 1000, 1001, 6, 1003, 6, 9, 4, 1007, 1008, 1009));
\r
378 hashset.CopyTo(a, 9);
\r
379 Assert.AreEqual("Alles klar", aeq(a, 1000, 1001, 6, 1003, 6, 9, 4, 1007, 1008, 7));
\r
384 [ExpectedException(typeof(ArgumentException))]
\r
385 public void CopyToBad()
\r
388 hashset.CopyTo(a, 10);
\r
393 [ExpectedException(typeof(ArgumentOutOfRangeException))]
\r
394 public void CopyToBad2()
\r
396 hashset.CopyTo(a, -1);
\r
401 [ExpectedException(typeof(ArgumentException))]
\r
402 public void CopyToTooFar()
\r
406 hashset.CopyTo(a, 9);
\r
415 private HashSet<int> list;
\r
421 list = new HashSet<int>();
\r
426 public void Dispose() { list = null; }
\r
432 Assert.IsNotNull(list.SyncRoot);
\r
440 namespace EditableCollection
\r
443 public class Collision
\r
445 HashSet<int> hashset;
\r
451 hashset = new HashSet<int>();
\r
456 public void SingleCollision()
\r
459 hashset.Add(7 - 1503427877);
\r
461 //foreach (int i in hashset) Console.WriteLine("A: {0}", i);
\r
463 Assert.IsTrue(hashset.Contains(7 - 1503427877));
\r
468 public void Dispose()
\r
477 public class Searching
\r
479 private HashSet<int> hashset;
\r
483 public void Init() { hashset = new HashSet<int>(); }
\r
487 public void Contains()
\r
489 Assert.IsFalse(hashset.Contains(5));
\r
491 Assert.IsTrue(hashset.Contains(5));
\r
492 Assert.IsFalse(hashset.Contains(7));
\r
495 Assert.IsTrue(hashset.Contains(5));
\r
496 Assert.IsFalse(hashset.Contains(7));
\r
497 Assert.IsTrue(hashset.Contains(8));
\r
498 Assert.IsTrue(hashset.Contains(10));
\r
500 Assert.IsTrue(hashset.Contains(5));
\r
501 Assert.IsFalse(hashset.Contains(7));
\r
502 Assert.IsFalse(hashset.Contains(8));
\r
503 Assert.IsTrue(hashset.Contains(10));
\r
504 hashset.Add(0);hashset.Add(16);hashset.Add(32);hashset.Add(48);hashset.Add(64);
\r
505 Assert.IsTrue(hashset.Contains(0));
\r
506 Assert.IsTrue(hashset.Contains(16));
\r
507 Assert.IsTrue(hashset.Contains(32));
\r
508 Assert.IsTrue(hashset.Contains(48));
\r
509 Assert.IsTrue(hashset.Contains(64));
\r
510 Assert.IsTrue(hashset.Check());
\r
514 Assert.IsTrue(hashset.Find(ref i));
\r
515 Assert.AreEqual(j, i);
\r
517 Assert.IsTrue(hashset.Find(ref i));
\r
518 Assert.AreEqual(j, i);
\r
520 Assert.IsTrue(hashset.Find(ref i));
\r
521 Assert.AreEqual(j, i);
\r
523 Assert.IsTrue(hashset.Find(ref i));
\r
524 Assert.AreEqual(j, i);
\r
526 Assert.IsTrue(hashset.Find(ref i));
\r
527 Assert.AreEqual(j, i);
\r
529 Assert.IsFalse(hashset.Find(ref i));
\r
530 Assert.AreEqual(j, i);
\r
538 int[] a = new int[j];
\r
540 for (int i = 0; i < j; i++)
\r
542 hashset.Add(3 * i + 1);
\r
546 Assert.IsTrue(IC.seq(hashset, a));
\r
551 public void ContainsCount()
\r
553 Assert.AreEqual(0, hashset.ContainsCount(5));
\r
555 Assert.AreEqual(1, hashset.ContainsCount(5));
\r
556 Assert.AreEqual(0, hashset.ContainsCount(7));
\r
558 Assert.AreEqual(1, hashset.ContainsCount(5));
\r
559 Assert.AreEqual(0, hashset.ContainsCount(7));
\r
560 Assert.AreEqual(1, hashset.ContainsCount(8));
\r
562 Assert.AreEqual(1, hashset.ContainsCount(5));
\r
563 Assert.AreEqual(0, hashset.ContainsCount(7));
\r
564 Assert.AreEqual(1, hashset.ContainsCount(8));
\r
569 [Ignore("This is also failing on windows. Martin")]
\r
570 public void RemoveAllCopies()
\r
572 hashset.Add(5);hashset.Add(7);hashset.Add(5);
\r
573 Assert.AreEqual(1, hashset.ContainsCount(5));
\r
574 Assert.AreEqual(1, hashset.ContainsCount(7));
\r
575 hashset.RemoveAllCopies(5);
\r
576 Assert.AreEqual(0, hashset.ContainsCount(5));
\r
577 Assert.AreEqual(1, hashset.ContainsCount(7));
\r
578 hashset.Add(5);hashset.Add(8);hashset.Add(5);
\r
579 hashset.RemoveAllCopies(8);
\r
580 Assert.IsTrue(IC.eq(hashset, 7, 5));
\r
585 public void ContainsAll()
\r
587 HashSet<int> list2 = new HashSet<int>();
\r
589 Assert.IsTrue(hashset.ContainsAll(list2));
\r
591 Assert.IsFalse(hashset.ContainsAll(list2));
\r
593 Assert.IsTrue(hashset.ContainsAll(list2));
\r
595 Assert.IsTrue(hashset.ContainsAll(list2));
\r
597 Assert.IsFalse(hashset.ContainsAll(list2));
\r
599 Assert.IsTrue(hashset.ContainsAll(list2));
\r
604 public void RetainAll()
\r
606 HashSet<int> list2 = new HashSet<int>();
\r
608 hashset.Add(4);hashset.Add(5);hashset.Add(6);
\r
609 list2.Add(5);list2.Add(4);list2.Add(7);
\r
610 hashset.RetainAll(list2);
\r
611 Assert.IsTrue(IC.seq(hashset, 4, 5));
\r
614 list2.Add(7);list2.Add(8);list2.Add(9);
\r
615 hashset.RetainAll(list2);
\r
616 Assert.IsTrue(IC.seq(hashset));
\r
621 public void RemoveAll()
\r
623 HashSet<int> list2 = new HashSet<int>();
\r
625 hashset.Add(4);hashset.Add(5);hashset.Add(6);
\r
626 list2.Add(5);list2.Add(7);list2.Add(4);
\r
627 hashset.RemoveAll(list2);
\r
628 Assert.IsTrue(IC.eq(hashset, 6));
\r
629 hashset.Add(5);hashset.Add(4);
\r
631 list2.Add(6);list2.Add(5);
\r
632 hashset.RemoveAll(list2);
\r
633 Assert.IsTrue(IC.eq(hashset, 4));
\r
635 list2.Add(7);list2.Add(8);list2.Add(9);
\r
636 hashset.RemoveAll(list2);
\r
637 Assert.IsTrue(IC.eq(hashset, 4));
\r
642 public void Remove()
\r
644 hashset.Add(4);hashset.Add(4);hashset.Add(5);hashset.Add(4);hashset.Add(6);
\r
645 Assert.IsFalse(hashset.Remove(2));
\r
646 Assert.IsTrue(hashset.Remove(4));
\r
647 Assert.IsTrue(IC.seq(hashset, 5, 6));
\r
649 hashset.Add(21);hashset.Add(37);hashset.Add(53);hashset.Add(69);hashset.Add(85);
\r
650 Assert.IsTrue(hashset.Remove(5));
\r
651 Assert.IsTrue(IC.seq(hashset, 6, 7, 21, 37, 53, 69, 85));
\r
652 Assert.IsFalse(hashset.Remove(165));
\r
653 Assert.IsTrue(IC.seq(hashset, 6, 7, 21, 37, 53, 69, 85));
\r
654 Assert.IsTrue(hashset.Remove(53));
\r
655 Assert.IsTrue(IC.seq(hashset, 6, 7, 21, 37, 69, 85));
\r
656 Assert.IsTrue(hashset.Remove(37));
\r
657 Assert.IsTrue(IC.seq(hashset, 6, 7, 21, 69, 85));
\r
658 Assert.IsTrue(hashset.Remove(85));
\r
659 Assert.IsTrue(IC.seq(hashset, 6, 7, 21, 69));
\r
664 public void Clear()
\r
666 hashset.Add(7);hashset.Add(7);
\r
668 Assert.IsTrue(hashset.IsEmpty);
\r
673 public void Dispose() { hashset = null; }
\r
677 public class Combined
\r
679 private ICollection<KeyValuePair<int,int>> lst;
\r
685 lst = new HashSet<KeyValuePair<int,int>>();
\r
686 for (int i = 0; i < 10; i++)
\r
687 lst.Add(new KeyValuePair<int,int>(i, i + 30));
\r
692 public void Dispose() { lst = null; }
\r
698 KeyValuePair<int,int> p = new KeyValuePair<int,int>(3, 78);
\r
700 Assert.IsTrue(lst.Find(ref p));
\r
701 Assert.AreEqual(3, p.key);
\r
702 Assert.AreEqual(33, p.value);
\r
703 p = new KeyValuePair<int,int>(13, 78);
\r
704 Assert.IsFalse(lst.Find(ref p));
\r
709 public void FindOrAdd()
\r
711 KeyValuePair<int,int> p = new KeyValuePair<int,int>(3, 78);
\r
712 KeyValuePair<int,int> q = new KeyValuePair<int,int>();
\r
714 Assert.IsTrue(lst.FindOrAdd(ref p));
\r
715 Assert.AreEqual(3, p.key);
\r
716 Assert.AreEqual(33, p.value);
\r
717 p = new KeyValuePair<int,int>(13, 79);
\r
718 Assert.IsFalse(lst.FindOrAdd(ref p));
\r
720 Assert.IsTrue(lst.Find(ref q));
\r
721 Assert.AreEqual(13, q.key);
\r
722 Assert.AreEqual(79, q.value);
\r
727 public void Update()
\r
729 KeyValuePair<int,int> p = new KeyValuePair<int,int>(3, 78);
\r
730 KeyValuePair<int,int> q = new KeyValuePair<int,int>();
\r
732 Assert.IsTrue(lst.Update(p));
\r
734 Assert.IsTrue(lst.Find(ref q));
\r
735 Assert.AreEqual(3, q.key);
\r
736 Assert.AreEqual(78, q.value);
\r
737 p = new KeyValuePair<int,int>(13, 78);
\r
738 Assert.IsFalse(lst.Update(p));
\r
743 public void UpdateOrAdd()
\r
745 KeyValuePair<int,int> p = new KeyValuePair<int,int>(3, 78);
\r
746 KeyValuePair<int,int> q = new KeyValuePair<int,int>();
\r
748 Assert.IsTrue(lst.UpdateOrAdd(p));
\r
750 Assert.IsTrue(lst.Find(ref q));
\r
751 Assert.AreEqual(3, q.key);
\r
752 Assert.AreEqual(78, q.value);
\r
753 p = new KeyValuePair<int,int>(13, 79);
\r
754 Assert.IsFalse(lst.UpdateOrAdd(p));
\r
756 Assert.IsTrue(lst.Find(ref q));
\r
757 Assert.AreEqual(13, q.key);
\r
758 Assert.AreEqual(79, q.value);
\r
763 public void RemoveWithReturn()
\r
765 KeyValuePair<int,int> p = new KeyValuePair<int,int>(3, 78);
\r
766 KeyValuePair<int,int> q = new KeyValuePair<int,int>();
\r
768 Assert.IsTrue(lst.RemoveWithReturn(ref p));
\r
769 Assert.AreEqual(3, p.key);
\r
770 Assert.AreEqual(33, p.value);
\r
771 p = new KeyValuePair<int,int>(13, 78);
\r
772 Assert.IsFalse(lst.RemoveWithReturn(ref p));
\r
780 namespace HashingAndEquals
\r
783 public class IEditableCollection
\r
785 private ICollection<int> dit, dat, dut;
\r
791 dit = new HashSet<int>();
\r
792 dat = new HashSet<int>();
\r
793 dut = new HashSet<int>();
\r
798 public void EmptyEmpty()
\r
800 Assert.IsTrue(dit.Equals(dat));
\r
805 public void EmptyNonEmpty()
\r
808 Assert.IsFalse(dit.Equals(dat));
\r
809 Assert.IsFalse(dat.Equals(dit));
\r
813 public int hasher(int count, params int[] items)
\r
817 foreach (int i in items)
\r
820 return (count << 16) + retval;
\r
825 public void HashVal()
\r
827 Assert.AreEqual(hasher(0), dit.GetHashCode());
\r
829 Assert.AreEqual(hasher(1, 3), dit.GetHashCode());
\r
831 Assert.AreEqual(hasher(2, 3, 7), dit.GetHashCode());
\r
832 Assert.AreEqual(hasher(0), dut.GetHashCode());
\r
834 Assert.AreEqual(hasher(1, 3), dut.GetHashCode());
\r
836 Assert.AreEqual(hasher(2, 7, 3), dut.GetHashCode());
\r
841 public void EqualHashButDifferent()
\r
843 dit.Add(2);dit.Add(1);
\r
844 dat.Add(3);dat.Add(0);
\r
845 Assert.AreEqual(dit.GetHashCode(), dat.GetHashCode());
\r
846 Assert.IsFalse(dit.Equals(dat));
\r
851 public void Normal()
\r
856 Assert.IsFalse(dit.Equals(dat));
\r
857 Assert.IsFalse(dat.Equals(dit));
\r
859 Assert.IsTrue(dit.Equals(dat));
\r
860 Assert.IsTrue(dat.Equals(dit));
\r
865 public void WrongOrder()
\r
869 Assert.IsTrue(dit.Equals(dut));
\r
870 Assert.IsTrue(dut.Equals(dit));
\r
873 Assert.IsTrue(dit.Equals(dut));
\r
874 Assert.IsTrue(dut.Equals(dit));
\r
879 public void Reflexive()
\r
881 Assert.IsTrue(dit.Equals(dit));
\r
883 Assert.IsTrue(dit.Equals(dit));
\r
885 Assert.IsTrue(dit.Equals(dit));
\r
890 public void Dispose()
\r
901 public class MultiLevelUnorderedOfUnOrdered
\r
903 private ICollection<int> dit, dat, dut;
\r
905 private ICollection<ICollection<int>> Dit, Dat, Dut;
\r
911 dit = new HashSet<int>();
\r
912 dat = new HashSet<int>();
\r
913 dut = new HashSet<int>();
\r
914 dit.Add(2);dit.Add(1);
\r
915 dat.Add(1);dat.Add(2);
\r
917 Dit = new HashSet<ICollection<int>>();
\r
918 Dat = new HashSet<ICollection<int>>();
\r
919 Dut = new HashSet<ICollection<int>>();
\r
924 public void Check()
\r
926 Assert.IsTrue(dit.Equals(dat));
\r
927 Assert.IsFalse(dit.Equals(dut));
\r
932 public void Multi()
\r
934 Dit.Add(dit);Dit.Add(dut);Dit.Add(dit);
\r
935 Dat.Add(dut);Dat.Add(dit);Dat.Add(dat);
\r
936 Assert.IsTrue(Dit.Equals(Dat));
\r
937 Assert.IsFalse(Dit.Equals(Dut));
\r
942 public void Dispose()
\r
944 dit = dat = dut = null;
\r
945 Dit = Dat = Dut = null;
\r
952 public class MultiLevelOrderedOfUnOrdered
\r
954 private ICollection<int> dit, dat, dut;
\r
956 private ISequenced<ICollection<int>> Dit, Dat, Dut;
\r
962 dit = new HashSet<int>();
\r
963 dat = new HashSet<int>();
\r
964 dut = new HashSet<int>();
\r
965 dit.Add(2);dit.Add(1);
\r
966 dat.Add(1);dat.Add(2);
\r
968 Dit = new LinkedList<ICollection<int>>();
\r
969 Dat = new LinkedList<ICollection<int>>();
\r
970 Dut = new LinkedList<ICollection<int>>();
\r
975 public void Check()
\r
977 Assert.IsTrue(dit.Equals(dat));
\r
978 Assert.IsFalse(dit.Equals(dut));
\r
983 public void Multi()
\r
985 Dit.Add(dit);Dit.Add(dut);Dit.Add(dit);
\r
986 Dat.Add(dut);Dat.Add(dit);Dat.Add(dat);
\r
987 Dut.Add(dit);Dut.Add(dut);Dut.Add(dat);
\r
988 Assert.IsFalse(Dit.Equals(Dat));
\r
989 Assert.IsTrue(Dit.Equals(Dut));
\r
994 public void Dispose()
\r
996 dit = dat = dut = null;
\r
997 Dit = Dat = Dut = null;
\r
1004 public class MultiLevelUnOrderedOfOrdered
\r
1006 private ISequenced<int> dit, dat, dut, dot;
\r
1008 private ICollection<ISequenced<int>> Dit, Dat, Dut, Dot;
\r
1012 public void Init()
\r
1014 dit = new LinkedList<int>();
\r
1015 dat = new LinkedList<int>();
\r
1016 dut = new LinkedList<int>();
\r
1017 dot = new LinkedList<int>();
\r
1018 dit.Add(2);dit.Add(1);
\r
1019 dat.Add(1);dat.Add(2);
\r
1021 dot.Add(2);dot.Add(1);
\r
1022 Dit = new HashSet<ISequenced<int>>();
\r
1023 Dat = new HashSet<ISequenced<int>>();
\r
1024 Dut = new HashSet<ISequenced<int>>();
\r
1025 Dot = new HashSet<ISequenced<int>>();
\r
1030 public void Check()
\r
1032 Assert.IsFalse(dit.Equals(dat));
\r
1033 Assert.IsTrue(dit.Equals(dot));
\r
1034 Assert.IsFalse(dit.Equals(dut));
\r
1039 public void Multi()
\r
1041 Dit.Add(dit);Dit.Add(dut);//Dit.Add(dit);
\r
1042 Dat.Add(dut);Dat.Add(dit);Dat.Add(dat);
\r
1043 Dut.Add(dot);Dut.Add(dut);//Dut.Add(dit);
\r
1044 Dot.Add(dit);Dot.Add(dit);Dot.Add(dut);
\r
1045 Assert.IsTrue(Dit.Equals(Dit));
\r
1046 Assert.IsTrue(Dit.Equals(Dut));
\r
1047 Assert.IsFalse(Dit.Equals(Dat));
\r
1048 Assert.IsTrue(Dit.Equals(Dot));
\r
1053 public void Dispose()
\r
1055 dit = dat = dut = dot = null;
\r
1056 Dit = Dat = Dut = Dot = null;
\r