2 Copyright (c) 2003-2006 Niels Kokholm and Peter Sestoft
\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 SCG = System.Collections.Generic;
\r
26 namespace C5UnitTests.hashtable.set
\r
28 using CollectionOfInt = HashSet<int>;
\r
31 public class GenericTesters
\r
34 public void TestEvents()
\r
36 Fun<CollectionOfInt> factory = delegate() { return new CollectionOfInt(TenEqualityComparer.Default); };
\r
37 new C5UnitTests.Templates.Events.CollectionTester<CollectionOfInt>().Test(factory);
\r
41 public void Extensible()
\r
43 C5UnitTests.Templates.Extensible.Clone.Tester<CollectionOfInt>();
\r
44 C5UnitTests.Templates.Extensible.Serialization.Tester<CollectionOfInt>();
\r
48 static class Factory
\r
50 public static ICollection<T> New<T>() { return new HashSet<T>(); }
\r
54 namespace Enumerable
\r
57 public class Multiops
\r
59 private HashSet<int> list;
\r
61 private Fun<int, bool> always, never, even;
\r
67 list = new HashSet<int>();
\r
68 always = delegate{return true;};
\r
69 never = delegate{return false;};
\r
70 even = delegate(int i){return i%2==0;};
\r
77 Assert.IsTrue(list.All(always));
\r
78 Assert.IsTrue(list.All(never));
\r
79 Assert.IsTrue(list.All(even));
\r
81 Assert.IsTrue(list.All(always));
\r
82 Assert.IsFalse(list.All(never));
\r
83 Assert.IsTrue(list.All(even));
\r
85 Assert.IsTrue(list.All(always));
\r
86 Assert.IsFalse(list.All(never));
\r
87 Assert.IsFalse(list.All(even));
\r
92 public void Exists()
\r
94 Assert.IsFalse(list.Exists(always));
\r
95 Assert.IsFalse(list.Exists(never));
\r
96 Assert.IsFalse(list.Exists(even));
\r
98 Assert.IsTrue(list.Exists(always));
\r
99 Assert.IsFalse(list.Exists(never));
\r
100 Assert.IsFalse(list.Exists(even));
\r
102 Assert.IsTrue(list.Exists(always));
\r
103 Assert.IsFalse(list.Exists(never));
\r
104 Assert.IsTrue(list.Exists(even));
\r
109 public void Apply()
\r
112 Act<int> a = delegate(int i){sum=i+10*sum;};
\r
115 Assert.AreEqual(0, sum);
\r
117 list.Add(5);list.Add(8);list.Add(7);list.Add(5);
\r
119 Assert.AreEqual(758, sum);
\r
124 public void Dispose() { list = null; }
\r
130 public class GetEnumerator
\r
132 private HashSet<int> hashset;
\r
136 public void Init() { hashset = new HashSet<int>(); }
\r
140 public void Empty()
\r
142 SCG.IEnumerator<int> e = hashset.GetEnumerator();
\r
144 Assert.IsFalse(e.MoveNext());
\r
149 public void Normal()
\r
161 Assert.IsTrue(IC.seteq(hashset, 1, 5, 8, 10, 16, 17, 18, 33));
\r
165 public void DoDispose()
\r
171 SCG.IEnumerator<int> e = hashset.GetEnumerator();
\r
180 [ExpectedException(typeof(CollectionModifiedException))]
\r
181 public void MoveNextAfterUpdate()
\r
187 SCG.IEnumerator<int> e = hashset.GetEnumerator();
\r
196 public void Dispose() { hashset = null; }
\r
200 namespace CollectionOrSink
\r
203 public class Formatting
\r
205 ICollection<int> coll;
\r
206 IFormatProvider rad16;
\r
208 public void Init() { coll = Factory.New<int>(); rad16 = new RadixFormatProvider(16); }
\r
210 public void Dispose() { coll = null; rad16 = null; }
\r
212 public void Format()
\r
214 Assert.AreEqual("{ }", coll.ToString());
\r
215 coll.AddAll<int>(new int[] { -4, 28, 129, 65530 });
\r
216 Assert.AreEqual("{ 65530, -4, 28, 129 }", coll.ToString());
\r
217 Assert.AreEqual("{ FFFA, -4, 1C, 81 }", coll.ToString(null, rad16));
\r
218 Assert.AreEqual("{ 65530, -4, ... }", coll.ToString("L14", null));
\r
219 Assert.AreEqual("{ FFFA, -4, ... }", coll.ToString("L14", rad16));
\r
224 public class CollectionOrSink
\r
226 private HashSet<int> hashset;
\r
230 public void Init() { hashset = new HashSet<int>(); }
\r
233 public void Choose()
\r
236 Assert.AreEqual(7, hashset.Choose());
\r
240 [ExpectedException(typeof(NoSuchItemException))]
\r
241 public void BadChoose()
\r
247 public void CountEtAl()
\r
249 Assert.AreEqual(0, hashset.Count);
\r
250 Assert.IsTrue(hashset.IsEmpty);
\r
251 Assert.IsFalse(hashset.AllowsDuplicates);
\r
252 Assert.IsTrue(hashset.Add(0));
\r
253 Assert.AreEqual(1, hashset.Count);
\r
254 Assert.IsFalse(hashset.IsEmpty);
\r
255 Assert.IsTrue(hashset.Add(5));
\r
256 Assert.AreEqual(2, hashset.Count);
\r
257 Assert.IsFalse(hashset.Add(5));
\r
258 Assert.AreEqual(2, hashset.Count);
\r
259 Assert.IsFalse(hashset.IsEmpty);
\r
260 Assert.IsTrue(hashset.Add(8));
\r
261 Assert.AreEqual(3, hashset.Count);
\r
266 public void AddAll()
\r
268 hashset.Add(3);hashset.Add(4);hashset.Add(5);
\r
270 HashSet<int> hashset2 = new HashSet<int>();
\r
272 hashset2.AddAll(hashset);
\r
273 Assert.IsTrue(IC.seteq(hashset2, 3, 4, 5));
\r
275 hashset.AddAll(hashset2);
\r
276 Assert.IsTrue(IC.seteq(hashset2, 3, 4, 5));
\r
277 Assert.IsTrue(IC.seteq(hashset, 3, 4, 5, 9));
\r
282 public void Dispose() { hashset = null; }
\r
286 public class FindPredicate
\r
288 private HashSet<int> list;
\r
289 Fun<int, bool> pred;
\r
294 list = new HashSet<int>(TenEqualityComparer.Default);
\r
295 pred = delegate(int i) { return i % 5 == 0; };
\r
299 public void Dispose() { list = null; }
\r
305 Assert.IsFalse(list.Find(pred, out i));
\r
306 list.AddAll<int>(new int[] { 4, 22, 67, 37 });
\r
307 Assert.IsFalse(list.Find(pred, out i));
\r
308 list.AddAll<int>(new int[] { 45, 122, 675, 137 });
\r
309 Assert.IsTrue(list.Find(pred, out i));
\r
310 Assert.AreEqual(45, i);
\r
315 public class UniqueItems
\r
317 private HashSet<int> list;
\r
320 public void Init() { list = new HashSet<int>(); }
\r
323 public void Dispose() { list = null; }
\r
328 Assert.IsTrue(IC.seteq(list.UniqueItems()));
\r
329 Assert.IsTrue(IC.seteq(list.ItemMultiplicities()));
\r
330 list.AddAll<int>(new int[] { 7, 9, 7 });
\r
331 Assert.IsTrue(IC.seteq(list.UniqueItems(), 7, 9));
\r
332 Assert.IsTrue(IC.seteq(list.ItemMultiplicities(), 7, 1, 9, 1));
\r
337 public class ArrayTest
\r
339 private HashSet<int> hashset;
\r
347 hashset = new HashSet<int>();
\r
349 for (int i = 0; i < 10; i++)
\r
355 public void Dispose() { hashset = null; }
\r
358 private string aeq(int[] a, params int[] b)
\r
360 if (a.Length != b.Length)
\r
361 return "Lengths differ: " + a.Length + " != " + b.Length;
\r
363 for (int i = 0; i < a.Length; i++)
\r
365 return String.Format("{0}'th elements differ: {1} != {2}", i, a[i], b[i]);
\r
367 return "Alles klar";
\r
372 public void ToArray()
\r
374 Assert.AreEqual("Alles klar", aeq(hashset.ToArray()));
\r
379 int[] r = hashset.ToArray();
\r
382 Assert.AreEqual("Alles klar", aeq(r, 3, 7, 10));
\r
387 public void CopyTo()
\r
389 //Note: for small ints the itemequalityComparer is the identity!
\r
390 hashset.CopyTo(a, 1);
\r
391 Assert.AreEqual("Alles klar", aeq(a, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009));
\r
393 hashset.CopyTo(a, 2);
\r
394 Assert.AreEqual("Alles klar", aeq(a, 1000, 1001, 6, 1003, 1004, 1005, 1006, 1007, 1008, 1009));
\r
397 hashset.CopyTo(a, 4);
\r
399 //TODO: make test independent on onterequalityComparer
\r
400 Assert.AreEqual("Alles klar", aeq(a, 1000, 1001, 6, 1003, 6, 9, 4, 1007, 1008, 1009));
\r
403 hashset.CopyTo(a, 9);
\r
404 Assert.AreEqual("Alles klar", aeq(a, 1000, 1001, 6, 1003, 6, 9, 4, 1007, 1008, 7));
\r
409 [ExpectedException(typeof(ArgumentOutOfRangeException))]
\r
410 public void CopyToBad()
\r
412 hashset.CopyTo(a, 11);
\r
417 [ExpectedException(typeof(ArgumentOutOfRangeException))]
\r
418 public void CopyToBad2()
\r
420 hashset.CopyTo(a, -1);
\r
425 [ExpectedException(typeof(ArgumentOutOfRangeException))]
\r
426 public void CopyToTooFar()
\r
430 hashset.CopyTo(a, 9);
\r
439 private HashSet<int> list;
\r
445 list = new HashSet<int>();
\r
450 public void Dispose() { list = null; }
\r
456 Assert.IsNotNull(list.SyncRoot);
\r
464 namespace EditableCollection
\r
467 public class Collision
\r
469 HashSet<int> hashset;
\r
475 hashset = new HashSet<int>();
\r
480 public void SingleCollision()
\r
483 hashset.Add(7 - 1503427877);
\r
485 //foreach (int cell in hashset) Console.WriteLine("A: {0}", cell);
\r
487 Assert.IsTrue(hashset.Contains(7 - 1503427877));
\r
492 public void Dispose()
\r
501 public class Searching
\r
503 private HashSet<int> hashset;
\r
507 public void Init() { hashset = new HashSet<int>(); }
\r
511 [ExpectedException(typeof(NullReferenceException))]
\r
512 public void NullEqualityComparerinConstructor1()
\r
514 new HashSet<int>(null);
\r
518 [ExpectedException(typeof(NullReferenceException))]
\r
519 public void NullEqualityComparerinConstructor2()
\r
521 new HashSet<int>(5, null);
\r
525 [ExpectedException(typeof(NullReferenceException))]
\r
526 public void NullEqualityComparerinConstructor3()
\r
528 new HashSet<int>(5, 0.5, null);
\r
532 public void Contains()
\r
534 Assert.IsFalse(hashset.Contains(5));
\r
536 Assert.IsTrue(hashset.Contains(5));
\r
537 Assert.IsFalse(hashset.Contains(7));
\r
540 Assert.IsTrue(hashset.Contains(5));
\r
541 Assert.IsFalse(hashset.Contains(7));
\r
542 Assert.IsTrue(hashset.Contains(8));
\r
543 Assert.IsTrue(hashset.Contains(10));
\r
545 Assert.IsTrue(hashset.Contains(5));
\r
546 Assert.IsFalse(hashset.Contains(7));
\r
547 Assert.IsFalse(hashset.Contains(8));
\r
548 Assert.IsTrue(hashset.Contains(10));
\r
549 hashset.Add(0);hashset.Add(16);hashset.Add(32);hashset.Add(48);hashset.Add(64);
\r
550 Assert.IsTrue(hashset.Contains(0));
\r
551 Assert.IsTrue(hashset.Contains(16));
\r
552 Assert.IsTrue(hashset.Contains(32));
\r
553 Assert.IsTrue(hashset.Contains(48));
\r
554 Assert.IsTrue(hashset.Contains(64));
\r
555 Assert.IsTrue(hashset.Check());
\r
559 Assert.IsTrue(hashset.Find(ref i));
\r
560 Assert.AreEqual(j, i);
\r
562 Assert.IsTrue(hashset.Find(ref i));
\r
563 Assert.AreEqual(j, i);
\r
565 Assert.IsTrue(hashset.Find(ref i));
\r
566 Assert.AreEqual(j, i);
\r
568 Assert.IsTrue(hashset.Find(ref i));
\r
569 Assert.AreEqual(j, i);
\r
571 Assert.IsTrue(hashset.Find(ref i));
\r
572 Assert.AreEqual(j, i);
\r
574 Assert.IsFalse(hashset.Find(ref i));
\r
575 Assert.AreEqual(j, i);
\r
583 int[] a = new int[j];
\r
585 for (int i = 0; i < j; i++)
\r
587 hashset.Add(3 * i + 1);
\r
591 Assert.IsTrue(IC.seteq(hashset, a));
\r
596 public void ContainsCount()
\r
598 Assert.AreEqual(0, hashset.ContainsCount(5));
\r
600 Assert.AreEqual(1, hashset.ContainsCount(5));
\r
601 Assert.AreEqual(0, hashset.ContainsCount(7));
\r
603 Assert.AreEqual(1, hashset.ContainsCount(5));
\r
604 Assert.AreEqual(0, hashset.ContainsCount(7));
\r
605 Assert.AreEqual(1, hashset.ContainsCount(8));
\r
607 Assert.AreEqual(1, hashset.ContainsCount(5));
\r
608 Assert.AreEqual(0, hashset.ContainsCount(7));
\r
609 Assert.AreEqual(1, hashset.ContainsCount(8));
\r
614 public void RemoveAllCopies()
\r
616 hashset.Add(5);hashset.Add(7);hashset.Add(5);
\r
617 Assert.AreEqual(1, hashset.ContainsCount(5));
\r
618 Assert.AreEqual(1, hashset.ContainsCount(7));
\r
619 hashset.RemoveAllCopies(5);
\r
620 Assert.AreEqual(0, hashset.ContainsCount(5));
\r
621 Assert.AreEqual(1, hashset.ContainsCount(7));
\r
622 hashset.Add(5);hashset.Add(8);hashset.Add(5);
\r
623 hashset.RemoveAllCopies(8);
\r
624 Assert.IsTrue(IC.eq(hashset, 7, 5));
\r
629 public void ContainsAll()
\r
631 HashSet<int> list2 = new HashSet<int>();
\r
633 Assert.IsTrue(hashset.ContainsAll(list2));
\r
635 Assert.IsFalse(hashset.ContainsAll(list2));
\r
637 Assert.IsTrue(hashset.ContainsAll(list2));
\r
639 Assert.IsTrue(hashset.ContainsAll(list2));
\r
641 Assert.IsFalse(hashset.ContainsAll(list2));
\r
643 Assert.IsTrue(hashset.ContainsAll(list2));
\r
648 public void RetainAll()
\r
650 HashSet<int> list2 = new HashSet<int>();
\r
652 hashset.Add(4);hashset.Add(5);hashset.Add(6);
\r
653 list2.Add(5);list2.Add(4);list2.Add(7);
\r
654 hashset.RetainAll(list2);
\r
655 Assert.IsTrue(IC.seteq(hashset, 4, 5));
\r
658 list2.Add(7);list2.Add(8);list2.Add(9);
\r
659 hashset.RetainAll(list2);
\r
660 Assert.IsTrue(IC.seteq(hashset));
\r
665 public void RemoveAll()
\r
667 HashSet<int> list2 = new HashSet<int>();
\r
669 hashset.Add(4);hashset.Add(5);hashset.Add(6);
\r
670 list2.Add(5);list2.Add(7);list2.Add(4);
\r
671 hashset.RemoveAll(list2);
\r
672 Assert.IsTrue(IC.eq(hashset, 6));
\r
673 hashset.Add(5);hashset.Add(4);
\r
675 list2.Add(6);list2.Add(5);
\r
676 hashset.RemoveAll(list2);
\r
677 Assert.IsTrue(IC.eq(hashset, 4));
\r
679 list2.Add(7);list2.Add(8);list2.Add(9);
\r
680 hashset.RemoveAll(list2);
\r
681 Assert.IsTrue(IC.eq(hashset, 4));
\r
686 public void Remove()
\r
688 hashset.Add(4);hashset.Add(4);hashset.Add(5);hashset.Add(4);hashset.Add(6);
\r
689 Assert.IsFalse(hashset.Remove(2));
\r
690 Assert.IsTrue(hashset.Remove(4));
\r
691 Assert.IsTrue(IC.seteq(hashset, 5, 6));
\r
693 hashset.Add(21);hashset.Add(37);hashset.Add(53);hashset.Add(69);hashset.Add(85);
\r
694 Assert.IsTrue(hashset.Remove(5));
\r
695 Assert.IsTrue(IC.seteq(hashset, 6, 7, 21, 37, 53, 69, 85));
\r
696 Assert.IsFalse(hashset.Remove(165));
\r
697 Assert.IsTrue(IC.seteq(hashset, 6, 7, 21, 37, 53, 69, 85));
\r
698 Assert.IsTrue(hashset.Remove(53));
\r
699 Assert.IsTrue(IC.seteq(hashset, 6, 7, 21, 37, 69, 85));
\r
700 Assert.IsTrue(hashset.Remove(37));
\r
701 Assert.IsTrue(IC.seteq(hashset, 6, 7, 21, 69, 85));
\r
702 Assert.IsTrue(hashset.Remove(85));
\r
703 Assert.IsTrue(IC.seteq(hashset, 6, 7, 21, 69));
\r
708 public void Clear()
\r
710 hashset.Add(7);hashset.Add(7);
\r
712 Assert.IsTrue(hashset.IsEmpty);
\r
717 public void Dispose() { hashset = null; }
\r
721 public class Combined
\r
723 private ICollection<KeyValuePair<int,int>> lst;
\r
729 lst = new HashSet<KeyValuePair<int, int>>(new KeyValuePairEqualityComparer<int, int>());
\r
730 for (int i = 0; i < 10; i++)
\r
731 lst.Add(new KeyValuePair<int,int>(i, i + 30));
\r
736 public void Dispose() { lst = null; }
\r
742 KeyValuePair<int,int> p = new KeyValuePair<int,int>(3, 78);
\r
744 Assert.IsTrue(lst.Find(ref p));
\r
745 Assert.AreEqual(3, p.Key);
\r
746 Assert.AreEqual(33, p.Value);
\r
747 p = new KeyValuePair<int,int>(13, 78);
\r
748 Assert.IsFalse(lst.Find(ref p));
\r
753 public void FindOrAdd()
\r
755 KeyValuePair<int,int> p = new KeyValuePair<int,int>(3, 78);
\r
756 KeyValuePair<int,int> q = new KeyValuePair<int,int>();
\r
758 Assert.IsTrue(lst.FindOrAdd(ref p));
\r
759 Assert.AreEqual(3, p.Key);
\r
760 Assert.AreEqual(33, p.Value);
\r
761 p = new KeyValuePair<int,int>(13, 79);
\r
762 Assert.IsFalse(lst.FindOrAdd(ref p));
\r
764 Assert.IsTrue(lst.Find(ref q));
\r
765 Assert.AreEqual(13, q.Key);
\r
766 Assert.AreEqual(79, q.Value);
\r
771 public void Update()
\r
773 KeyValuePair<int,int> p = new KeyValuePair<int,int>(3, 78);
\r
774 KeyValuePair<int,int> q = new KeyValuePair<int,int>();
\r
776 Assert.IsTrue(lst.Update(p));
\r
778 Assert.IsTrue(lst.Find(ref q));
\r
779 Assert.AreEqual(3, q.Key);
\r
780 Assert.AreEqual(78, q.Value);
\r
781 p = new KeyValuePair<int,int>(13, 78);
\r
782 Assert.IsFalse(lst.Update(p));
\r
787 public void UpdateOrAdd()
\r
789 KeyValuePair<int,int> p = new KeyValuePair<int,int>(3, 78);
\r
790 KeyValuePair<int,int> q = new KeyValuePair<int,int>();
\r
792 Assert.IsTrue(lst.UpdateOrAdd(p));
\r
794 Assert.IsTrue(lst.Find(ref q));
\r
795 Assert.AreEqual(3, q.Key);
\r
796 Assert.AreEqual(78, q.Value);
\r
797 p = new KeyValuePair<int,int>(13, 79);
\r
798 Assert.IsFalse(lst.UpdateOrAdd(p));
\r
800 Assert.IsTrue(lst.Find(ref q));
\r
801 Assert.AreEqual(13, q.Key);
\r
802 Assert.AreEqual(79, q.Value);
\r
807 public void RemoveWithReturn()
\r
809 KeyValuePair<int,int> p = new KeyValuePair<int,int>(3, 78);
\r
810 //KeyValuePair<int,int> q = new KeyValuePair<int,int>();
\r
812 Assert.IsTrue(lst.Remove(p, out p));
\r
813 Assert.AreEqual(3, p.Key);
\r
814 Assert.AreEqual(33, p.Value);
\r
815 p = new KeyValuePair<int,int>(13, 78);
\r
816 Assert.IsFalse(lst.Remove(p, out p));
\r
826 namespace HashingAndEquals
\r
829 public class IEditableCollection
\r
831 private ICollection<int> dit, dat, dut;
\r
837 dit = new HashSet<int>();
\r
838 dat = new HashSet<int>();
\r
839 dut = new HashSet<int>();
\r
844 public void EmptyEmpty()
\r
846 Assert.IsTrue(dit.UnsequencedEquals(dat));
\r
851 public void EmptyNonEmpty()
\r
854 Assert.IsFalse(dit.UnsequencedEquals(dat));
\r
855 Assert.IsFalse(dat.UnsequencedEquals(dit));
\r
860 public void HashVal()
\r
862 Assert.AreEqual(CHC.unsequencedhashcode(), dit.GetUnsequencedHashCode());
\r
864 Assert.AreEqual(CHC.unsequencedhashcode(3), dit.GetUnsequencedHashCode());
\r
866 Assert.AreEqual(CHC.unsequencedhashcode(3, 7), dit.GetUnsequencedHashCode());
\r
867 Assert.AreEqual(CHC.unsequencedhashcode(), dut.GetUnsequencedHashCode());
\r
869 Assert.AreEqual(CHC.unsequencedhashcode(3), dut.GetUnsequencedHashCode());
\r
871 Assert.AreEqual(CHC.unsequencedhashcode(7, 3), dut.GetUnsequencedHashCode());
\r
876 public void EqualHashButDifferent()
\r
878 dit.Add(-1657792980);dit.Add(-1570288808);
\r
879 dat.Add(1862883298);dat.Add(-272461342);
\r
880 Assert.AreEqual(dit.GetUnsequencedHashCode(), dat.GetUnsequencedHashCode());
\r
881 Assert.IsFalse(dit.UnsequencedEquals(dat));
\r
886 public void Normal()
\r
891 Assert.IsFalse(dit.UnsequencedEquals(dat));
\r
892 Assert.IsFalse(dat.UnsequencedEquals(dit));
\r
894 Assert.IsTrue(dit.UnsequencedEquals(dat));
\r
895 Assert.IsTrue(dat.UnsequencedEquals(dit));
\r
900 public void WrongOrder()
\r
904 Assert.IsTrue(dit.UnsequencedEquals(dut));
\r
905 Assert.IsTrue(dut.UnsequencedEquals(dit));
\r
908 Assert.IsTrue(dit.UnsequencedEquals(dut));
\r
909 Assert.IsTrue(dut.UnsequencedEquals(dit));
\r
914 public void Reflexive()
\r
916 Assert.IsTrue(dit.UnsequencedEquals(dit));
\r
918 Assert.IsTrue(dit.UnsequencedEquals(dit));
\r
920 Assert.IsTrue(dit.UnsequencedEquals(dit));
\r
925 public void Dispose()
\r
936 public class MultiLevelUnorderedOfUnOrdered
\r
938 private ICollection<int> dit, dat, dut;
\r
940 private ICollection<ICollection<int>> Dit, Dat, Dut;
\r
946 dit = new HashSet<int>();
\r
947 dat = new HashSet<int>();
\r
948 dut = new HashSet<int>();
\r
949 dit.Add(2);dit.Add(1);
\r
950 dat.Add(1);dat.Add(2);
\r
952 Dit = new HashSet<ICollection<int>>();
\r
953 Dat = new HashSet<ICollection<int>>();
\r
954 Dut = new HashSet<ICollection<int>>();
\r
959 public void Check()
\r
961 Assert.IsTrue(dit.UnsequencedEquals(dat));
\r
962 Assert.IsFalse(dit.UnsequencedEquals(dut));
\r
967 public void Multi()
\r
969 Dit.Add(dit);Dit.Add(dut);Dit.Add(dit);
\r
970 Dat.Add(dut);Dat.Add(dit);Dat.Add(dat);
\r
971 Assert.IsTrue(Dit.UnsequencedEquals(Dat));
\r
972 Assert.IsFalse(Dit.UnsequencedEquals(Dut));
\r
977 public void Dispose()
\r
979 dit = dat = dut = null;
\r
980 Dit = Dat = Dut = null;
\r
987 public class MultiLevelOrderedOfUnOrdered
\r
989 private ICollection<int> dit, dat, dut;
\r
991 private ISequenced<ICollection<int>> Dit, Dat, Dut;
\r
997 dit = new HashSet<int>();
\r
998 dat = new HashSet<int>();
\r
999 dut = new HashSet<int>();
\r
1000 dit.Add(2);dit.Add(1);
\r
1001 dat.Add(1);dat.Add(2);
\r
1003 Dit = new LinkedList<ICollection<int>>();
\r
1004 Dat = new LinkedList<ICollection<int>>();
\r
1005 Dut = new LinkedList<ICollection<int>>();
\r
1010 public void Check()
\r
1012 Assert.IsTrue(dit.UnsequencedEquals(dat));
\r
1013 Assert.IsFalse(dit.UnsequencedEquals(dut));
\r
1018 public void Multi()
\r
1020 Dit.Add(dit);Dit.Add(dut);Dit.Add(dit);
\r
1021 Dat.Add(dut);Dat.Add(dit);Dat.Add(dat);
\r
1022 Dut.Add(dit);Dut.Add(dut);Dut.Add(dat);
\r
1023 Assert.IsFalse(Dit.SequencedEquals(Dat));
\r
1024 Assert.IsTrue(Dit.SequencedEquals(Dut));
\r
1029 public void Dispose()
\r
1031 dit = dat = dut = null;
\r
1032 Dit = Dat = Dut = null;
\r
1039 public class MultiLevelUnOrderedOfOrdered
\r
1041 private ISequenced<int> dit, dat, dut, dot;
\r
1043 private ICollection<ISequenced<int>> Dit, Dat, Dut, Dot;
\r
1047 public void Init()
\r
1049 dit = new LinkedList<int>();
\r
1050 dat = new LinkedList<int>();
\r
1051 dut = new LinkedList<int>();
\r
1052 dot = new LinkedList<int>();
\r
1053 dit.Add(2);dit.Add(1);
\r
1054 dat.Add(1);dat.Add(2);
\r
1056 dot.Add(2);dot.Add(1);
\r
1057 Dit = new HashSet<ISequenced<int>>();
\r
1058 Dat = new HashSet<ISequenced<int>>();
\r
1059 Dut = new HashSet<ISequenced<int>>();
\r
1060 Dot = new HashSet<ISequenced<int>>();
\r
1065 public void Check()
\r
1067 Assert.IsFalse(dit.SequencedEquals(dat));
\r
1068 Assert.IsTrue(dit.SequencedEquals(dot));
\r
1069 Assert.IsFalse(dit.SequencedEquals(dut));
\r
1074 public void Multi()
\r
1076 Dit.Add(dit);Dit.Add(dut);//Dit.Add(dit);
\r
1077 Dat.Add(dut);Dat.Add(dit);Dat.Add(dat);
\r
1078 Dut.Add(dot);Dut.Add(dut);//Dut.Add(dit);
\r
1079 Dot.Add(dit);Dot.Add(dit);Dot.Add(dut);
\r
1080 Assert.IsTrue(Dit.UnsequencedEquals(Dit));
\r
1081 Assert.IsTrue(Dit.UnsequencedEquals(Dut));
\r
1082 Assert.IsFalse(Dit.UnsequencedEquals(Dat));
\r
1083 Assert.IsTrue(Dit.UnsequencedEquals(Dot));
\r
1088 public void Dispose()
\r
1090 dit = dat = dut = dot = null;
\r
1091 Dit = Dat = Dut = Dot = null;
\r