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 [Ignore("Temporarily disabled. 2006-03-07. Martin")]
\r
110 public void Apply()
\r
113 Act<int> a = delegate(int i){sum=i+10*sum;};
\r
116 Assert.AreEqual(0, sum);
\r
118 list.Add(5);list.Add(8);list.Add(7);list.Add(5);
\r
120 Assert.AreEqual(758, sum);
\r
125 public void Dispose() { list = null; }
\r
131 public class GetEnumerator
\r
133 private HashSet<int> hashset;
\r
137 public void Init() { hashset = new HashSet<int>(); }
\r
141 public void Empty()
\r
143 SCG.IEnumerator<int> e = hashset.GetEnumerator();
\r
145 Assert.IsFalse(e.MoveNext());
\r
150 public void Normal()
\r
162 Assert.IsTrue(IC.seteq(hashset, 1, 5, 8, 10, 16, 17, 18, 33));
\r
166 public void DoDispose()
\r
172 SCG.IEnumerator<int> e = hashset.GetEnumerator();
\r
181 [ExpectedException(typeof(CollectionModifiedException))]
\r
182 public void MoveNextAfterUpdate()
\r
188 SCG.IEnumerator<int> e = hashset.GetEnumerator();
\r
197 public void Dispose() { hashset = null; }
\r
201 namespace CollectionOrSink
\r
204 public class Formatting
\r
206 ICollection<int> coll;
\r
207 IFormatProvider rad16;
\r
209 public void Init() { coll = Factory.New<int>(); rad16 = new RadixFormatProvider(16); }
\r
211 public void Dispose() { coll = null; rad16 = null; }
\r
213 [Ignore("Temporarily disabled. 2006-03-07. Martin")]
\r
214 public void Format()
\r
216 Assert.AreEqual("{ }", coll.ToString());
\r
217 coll.AddAll<int>(new int[] { -4, 28, 129, 65530 });
\r
218 Assert.AreEqual("{ 65530, -4, 28, 129 }", coll.ToString());
\r
219 Assert.AreEqual("{ FFFA, -4, 1C, 81 }", coll.ToString(null, rad16));
\r
220 Assert.AreEqual("{ 65530, -4, ... }", coll.ToString("L14", null));
\r
221 Assert.AreEqual("{ FFFA, -4, ... }", coll.ToString("L14", rad16));
\r
226 public class CollectionOrSink
\r
228 private HashSet<int> hashset;
\r
232 public void Init() { hashset = new HashSet<int>(); }
\r
235 public void Choose()
\r
238 Assert.AreEqual(7, hashset.Choose());
\r
242 [ExpectedException(typeof(NoSuchItemException))]
\r
243 public void BadChoose()
\r
249 public void CountEtAl()
\r
251 Assert.AreEqual(0, hashset.Count);
\r
252 Assert.IsTrue(hashset.IsEmpty);
\r
253 Assert.IsFalse(hashset.AllowsDuplicates);
\r
254 Assert.IsTrue(hashset.Add(0));
\r
255 Assert.AreEqual(1, hashset.Count);
\r
256 Assert.IsFalse(hashset.IsEmpty);
\r
257 Assert.IsTrue(hashset.Add(5));
\r
258 Assert.AreEqual(2, hashset.Count);
\r
259 Assert.IsFalse(hashset.Add(5));
\r
260 Assert.AreEqual(2, hashset.Count);
\r
261 Assert.IsFalse(hashset.IsEmpty);
\r
262 Assert.IsTrue(hashset.Add(8));
\r
263 Assert.AreEqual(3, hashset.Count);
\r
268 public void AddAll()
\r
270 hashset.Add(3);hashset.Add(4);hashset.Add(5);
\r
272 HashSet<int> hashset2 = new HashSet<int>();
\r
274 hashset2.AddAll(hashset);
\r
275 Assert.IsTrue(IC.seteq(hashset2, 3, 4, 5));
\r
277 hashset.AddAll(hashset2);
\r
278 Assert.IsTrue(IC.seteq(hashset2, 3, 4, 5));
\r
279 Assert.IsTrue(IC.seteq(hashset, 3, 4, 5, 9));
\r
284 public void Dispose() { hashset = null; }
\r
288 public class FindPredicate
\r
290 private HashSet<int> list;
\r
291 Fun<int, bool> pred;
\r
296 list = new HashSet<int>(TenEqualityComparer.Default);
\r
297 pred = delegate(int i) { return i % 5 == 0; };
\r
301 public void Dispose() { list = null; }
\r
304 [Ignore("Temporarily disabled. 2006-03-07. Martin")]
\r
308 Assert.IsFalse(list.Find(pred, out i));
\r
309 list.AddAll<int>(new int[] { 4, 22, 67, 37 });
\r
310 Assert.IsFalse(list.Find(pred, out i));
\r
311 list.AddAll<int>(new int[] { 45, 122, 675, 137 });
\r
312 Assert.IsTrue(list.Find(pred, out i));
\r
313 Assert.AreEqual(45, i);
\r
318 public class UniqueItems
\r
320 private HashSet<int> list;
\r
323 public void Init() { list = new HashSet<int>(); }
\r
326 public void Dispose() { list = null; }
\r
331 Assert.IsTrue(IC.seteq(list.UniqueItems()));
\r
332 Assert.IsTrue(IC.seteq(list.ItemMultiplicities()));
\r
333 list.AddAll<int>(new int[] { 7, 9, 7 });
\r
334 Assert.IsTrue(IC.seteq(list.UniqueItems(), 7, 9));
\r
335 Assert.IsTrue(IC.seteq(list.ItemMultiplicities(), 7, 1, 9, 1));
\r
340 public class ArrayTest
\r
342 private HashSet<int> hashset;
\r
350 hashset = new HashSet<int>();
\r
352 for (int i = 0; i < 10; i++)
\r
358 public void Dispose() { hashset = null; }
\r
361 private string aeq(int[] a, params int[] b)
\r
363 if (a.Length != b.Length)
\r
364 return "Lengths differ: " + a.Length + " != " + b.Length;
\r
366 for (int i = 0; i < a.Length; i++)
\r
368 return String.Format("{0}'th elements differ: {1} != {2}", i, a[i], b[i]);
\r
370 return "Alles klar";
\r
375 public void ToArray()
\r
377 Assert.AreEqual("Alles klar", aeq(hashset.ToArray()));
\r
382 int[] r = hashset.ToArray();
\r
385 Assert.AreEqual("Alles klar", aeq(r, 3, 7, 10));
\r
390 [Ignore("Temporarily disabled. 2006-03-07. Martin")]
\r
391 public void CopyTo()
\r
393 //Note: for small ints the itemequalityComparer is the identity!
\r
394 hashset.CopyTo(a, 1);
\r
395 Assert.AreEqual("Alles klar", aeq(a, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009));
\r
397 hashset.CopyTo(a, 2);
\r
398 Assert.AreEqual("Alles klar", aeq(a, 1000, 1001, 6, 1003, 1004, 1005, 1006, 1007, 1008, 1009));
\r
401 hashset.CopyTo(a, 4);
\r
403 //TODO: make test independent on onterequalityComparer
\r
404 Assert.AreEqual("Alles klar", aeq(a, 1000, 1001, 6, 1003, 6, 9, 4, 1007, 1008, 1009));
\r
407 hashset.CopyTo(a, 9);
\r
408 Assert.AreEqual("Alles klar", aeq(a, 1000, 1001, 6, 1003, 6, 9, 4, 1007, 1008, 7));
\r
413 [ExpectedException(typeof(ArgumentOutOfRangeException))]
\r
414 public void CopyToBad()
\r
416 hashset.CopyTo(a, 11);
\r
421 [ExpectedException(typeof(ArgumentOutOfRangeException))]
\r
422 public void CopyToBad2()
\r
424 hashset.CopyTo(a, -1);
\r
429 [ExpectedException(typeof(ArgumentOutOfRangeException))]
\r
430 public void CopyToTooFar()
\r
434 hashset.CopyTo(a, 9);
\r
443 private HashSet<int> list;
\r
449 list = new HashSet<int>();
\r
454 public void Dispose() { list = null; }
\r
460 Assert.IsNotNull(list.SyncRoot);
\r
468 namespace EditableCollection
\r
471 public class Collision
\r
473 HashSet<int> hashset;
\r
479 hashset = new HashSet<int>();
\r
484 public void SingleCollision()
\r
487 hashset.Add(7 - 1503427877);
\r
489 //foreach (int cell in hashset) Console.WriteLine("A: {0}", cell);
\r
491 Assert.IsTrue(hashset.Contains(7 - 1503427877));
\r
496 public void Dispose()
\r
505 public class Searching
\r
507 private HashSet<int> hashset;
\r
511 public void Init() { hashset = new HashSet<int>(); }
\r
515 [ExpectedException(typeof(NullReferenceException))]
\r
516 public void NullEqualityComparerinConstructor1()
\r
518 new HashSet<int>(null);
\r
522 [ExpectedException(typeof(NullReferenceException))]
\r
523 public void NullEqualityComparerinConstructor2()
\r
525 new HashSet<int>(5, null);
\r
529 [ExpectedException(typeof(NullReferenceException))]
\r
530 public void NullEqualityComparerinConstructor3()
\r
532 new HashSet<int>(5, 0.5, null);
\r
536 public void Contains()
\r
538 Assert.IsFalse(hashset.Contains(5));
\r
540 Assert.IsTrue(hashset.Contains(5));
\r
541 Assert.IsFalse(hashset.Contains(7));
\r
544 Assert.IsTrue(hashset.Contains(5));
\r
545 Assert.IsFalse(hashset.Contains(7));
\r
546 Assert.IsTrue(hashset.Contains(8));
\r
547 Assert.IsTrue(hashset.Contains(10));
\r
549 Assert.IsTrue(hashset.Contains(5));
\r
550 Assert.IsFalse(hashset.Contains(7));
\r
551 Assert.IsFalse(hashset.Contains(8));
\r
552 Assert.IsTrue(hashset.Contains(10));
\r
553 hashset.Add(0);hashset.Add(16);hashset.Add(32);hashset.Add(48);hashset.Add(64);
\r
554 Assert.IsTrue(hashset.Contains(0));
\r
555 Assert.IsTrue(hashset.Contains(16));
\r
556 Assert.IsTrue(hashset.Contains(32));
\r
557 Assert.IsTrue(hashset.Contains(48));
\r
558 Assert.IsTrue(hashset.Contains(64));
\r
559 Assert.IsTrue(hashset.Check());
\r
563 Assert.IsTrue(hashset.Find(ref i));
\r
564 Assert.AreEqual(j, i);
\r
566 Assert.IsTrue(hashset.Find(ref i));
\r
567 Assert.AreEqual(j, i);
\r
569 Assert.IsTrue(hashset.Find(ref i));
\r
570 Assert.AreEqual(j, i);
\r
572 Assert.IsTrue(hashset.Find(ref i));
\r
573 Assert.AreEqual(j, i);
\r
575 Assert.IsTrue(hashset.Find(ref i));
\r
576 Assert.AreEqual(j, i);
\r
578 Assert.IsFalse(hashset.Find(ref i));
\r
579 Assert.AreEqual(j, i);
\r
587 int[] a = new int[j];
\r
589 for (int i = 0; i < j; i++)
\r
591 hashset.Add(3 * i + 1);
\r
595 Assert.IsTrue(IC.seteq(hashset, a));
\r
600 public void ContainsCount()
\r
602 Assert.AreEqual(0, hashset.ContainsCount(5));
\r
604 Assert.AreEqual(1, hashset.ContainsCount(5));
\r
605 Assert.AreEqual(0, hashset.ContainsCount(7));
\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
611 Assert.AreEqual(1, hashset.ContainsCount(5));
\r
612 Assert.AreEqual(0, hashset.ContainsCount(7));
\r
613 Assert.AreEqual(1, hashset.ContainsCount(8));
\r
618 [Ignore("Temporarily disabled. 2006-03-07. Martin")]
\r
619 public void RemoveAllCopies()
\r
621 hashset.Add(5);hashset.Add(7);hashset.Add(5);
\r
622 Assert.AreEqual(1, hashset.ContainsCount(5));
\r
623 Assert.AreEqual(1, hashset.ContainsCount(7));
\r
624 hashset.RemoveAllCopies(5);
\r
625 Assert.AreEqual(0, hashset.ContainsCount(5));
\r
626 Assert.AreEqual(1, hashset.ContainsCount(7));
\r
627 hashset.Add(5);hashset.Add(8);hashset.Add(5);
\r
628 hashset.RemoveAllCopies(8);
\r
629 Assert.IsTrue(IC.eq(hashset, 7, 5));
\r
634 public void ContainsAll()
\r
636 HashSet<int> list2 = new HashSet<int>();
\r
638 Assert.IsTrue(hashset.ContainsAll(list2));
\r
640 Assert.IsFalse(hashset.ContainsAll(list2));
\r
642 Assert.IsTrue(hashset.ContainsAll(list2));
\r
644 Assert.IsTrue(hashset.ContainsAll(list2));
\r
646 Assert.IsFalse(hashset.ContainsAll(list2));
\r
648 Assert.IsTrue(hashset.ContainsAll(list2));
\r
653 public void RetainAll()
\r
655 HashSet<int> list2 = new HashSet<int>();
\r
657 hashset.Add(4);hashset.Add(5);hashset.Add(6);
\r
658 list2.Add(5);list2.Add(4);list2.Add(7);
\r
659 hashset.RetainAll(list2);
\r
660 Assert.IsTrue(IC.seteq(hashset, 4, 5));
\r
663 list2.Add(7);list2.Add(8);list2.Add(9);
\r
664 hashset.RetainAll(list2);
\r
665 Assert.IsTrue(IC.seteq(hashset));
\r
670 public void RemoveAll()
\r
672 HashSet<int> list2 = new HashSet<int>();
\r
674 hashset.Add(4);hashset.Add(5);hashset.Add(6);
\r
675 list2.Add(5);list2.Add(7);list2.Add(4);
\r
676 hashset.RemoveAll(list2);
\r
677 Assert.IsTrue(IC.eq(hashset, 6));
\r
678 hashset.Add(5);hashset.Add(4);
\r
680 list2.Add(6);list2.Add(5);
\r
681 hashset.RemoveAll(list2);
\r
682 Assert.IsTrue(IC.eq(hashset, 4));
\r
684 list2.Add(7);list2.Add(8);list2.Add(9);
\r
685 hashset.RemoveAll(list2);
\r
686 Assert.IsTrue(IC.eq(hashset, 4));
\r
691 public void Remove()
\r
693 hashset.Add(4);hashset.Add(4);hashset.Add(5);hashset.Add(4);hashset.Add(6);
\r
694 Assert.IsFalse(hashset.Remove(2));
\r
695 Assert.IsTrue(hashset.Remove(4));
\r
696 Assert.IsTrue(IC.seteq(hashset, 5, 6));
\r
698 hashset.Add(21);hashset.Add(37);hashset.Add(53);hashset.Add(69);hashset.Add(85);
\r
699 Assert.IsTrue(hashset.Remove(5));
\r
700 Assert.IsTrue(IC.seteq(hashset, 6, 7, 21, 37, 53, 69, 85));
\r
701 Assert.IsFalse(hashset.Remove(165));
\r
702 Assert.IsTrue(IC.seteq(hashset, 6, 7, 21, 37, 53, 69, 85));
\r
703 Assert.IsTrue(hashset.Remove(53));
\r
704 Assert.IsTrue(IC.seteq(hashset, 6, 7, 21, 37, 69, 85));
\r
705 Assert.IsTrue(hashset.Remove(37));
\r
706 Assert.IsTrue(IC.seteq(hashset, 6, 7, 21, 69, 85));
\r
707 Assert.IsTrue(hashset.Remove(85));
\r
708 Assert.IsTrue(IC.seteq(hashset, 6, 7, 21, 69));
\r
713 public void Clear()
\r
715 hashset.Add(7);hashset.Add(7);
\r
717 Assert.IsTrue(hashset.IsEmpty);
\r
722 public void Dispose() { hashset = null; }
\r
726 public class Combined
\r
728 private ICollection<KeyValuePair<int,int>> lst;
\r
734 lst = new HashSet<KeyValuePair<int, int>>(new KeyValuePairEqualityComparer<int, int>());
\r
735 for (int i = 0; i < 10; i++)
\r
736 lst.Add(new KeyValuePair<int,int>(i, i + 30));
\r
741 public void Dispose() { lst = null; }
\r
747 KeyValuePair<int,int> p = new KeyValuePair<int,int>(3, 78);
\r
749 Assert.IsTrue(lst.Find(ref p));
\r
750 Assert.AreEqual(3, p.Key);
\r
751 Assert.AreEqual(33, p.Value);
\r
752 p = new KeyValuePair<int,int>(13, 78);
\r
753 Assert.IsFalse(lst.Find(ref p));
\r
758 public void FindOrAdd()
\r
760 KeyValuePair<int,int> p = new KeyValuePair<int,int>(3, 78);
\r
761 KeyValuePair<int,int> q = new KeyValuePair<int,int>();
\r
763 Assert.IsTrue(lst.FindOrAdd(ref p));
\r
764 Assert.AreEqual(3, p.Key);
\r
765 Assert.AreEqual(33, p.Value);
\r
766 p = new KeyValuePair<int,int>(13, 79);
\r
767 Assert.IsFalse(lst.FindOrAdd(ref p));
\r
769 Assert.IsTrue(lst.Find(ref q));
\r
770 Assert.AreEqual(13, q.Key);
\r
771 Assert.AreEqual(79, q.Value);
\r
776 public void Update()
\r
778 KeyValuePair<int,int> p = new KeyValuePair<int,int>(3, 78);
\r
779 KeyValuePair<int,int> q = new KeyValuePair<int,int>();
\r
781 Assert.IsTrue(lst.Update(p));
\r
783 Assert.IsTrue(lst.Find(ref q));
\r
784 Assert.AreEqual(3, q.Key);
\r
785 Assert.AreEqual(78, q.Value);
\r
786 p = new KeyValuePair<int,int>(13, 78);
\r
787 Assert.IsFalse(lst.Update(p));
\r
792 public void UpdateOrAdd()
\r
794 KeyValuePair<int,int> p = new KeyValuePair<int,int>(3, 78);
\r
795 KeyValuePair<int,int> q = new KeyValuePair<int,int>();
\r
797 Assert.IsTrue(lst.UpdateOrAdd(p));
\r
799 Assert.IsTrue(lst.Find(ref q));
\r
800 Assert.AreEqual(3, q.Key);
\r
801 Assert.AreEqual(78, q.Value);
\r
802 p = new KeyValuePair<int,int>(13, 79);
\r
803 Assert.IsFalse(lst.UpdateOrAdd(p));
\r
805 Assert.IsTrue(lst.Find(ref q));
\r
806 Assert.AreEqual(13, q.Key);
\r
807 Assert.AreEqual(79, q.Value);
\r
812 public void RemoveWithReturn()
\r
814 KeyValuePair<int,int> p = new KeyValuePair<int,int>(3, 78);
\r
815 //KeyValuePair<int,int> q = new KeyValuePair<int,int>();
\r
817 Assert.IsTrue(lst.Remove(p, out p));
\r
818 Assert.AreEqual(3, p.Key);
\r
819 Assert.AreEqual(33, p.Value);
\r
820 p = new KeyValuePair<int,int>(13, 78);
\r
821 Assert.IsFalse(lst.Remove(p, out p));
\r
831 namespace HashingAndEquals
\r
834 public class IEditableCollection
\r
836 private ICollection<int> dit, dat, dut;
\r
842 dit = new HashSet<int>();
\r
843 dat = new HashSet<int>();
\r
844 dut = new HashSet<int>();
\r
849 public void EmptyEmpty()
\r
851 Assert.IsTrue(dit.UnsequencedEquals(dat));
\r
856 public void EmptyNonEmpty()
\r
859 Assert.IsFalse(dit.UnsequencedEquals(dat));
\r
860 Assert.IsFalse(dat.UnsequencedEquals(dit));
\r
865 public void HashVal()
\r
867 Assert.AreEqual(CHC.unsequencedhashcode(), dit.GetUnsequencedHashCode());
\r
869 Assert.AreEqual(CHC.unsequencedhashcode(3), dit.GetUnsequencedHashCode());
\r
871 Assert.AreEqual(CHC.unsequencedhashcode(3, 7), dit.GetUnsequencedHashCode());
\r
872 Assert.AreEqual(CHC.unsequencedhashcode(), dut.GetUnsequencedHashCode());
\r
874 Assert.AreEqual(CHC.unsequencedhashcode(3), dut.GetUnsequencedHashCode());
\r
876 Assert.AreEqual(CHC.unsequencedhashcode(7, 3), dut.GetUnsequencedHashCode());
\r
881 public void EqualHashButDifferent()
\r
883 dit.Add(-1657792980);dit.Add(-1570288808);
\r
884 dat.Add(1862883298);dat.Add(-272461342);
\r
885 Assert.AreEqual(dit.GetUnsequencedHashCode(), dat.GetUnsequencedHashCode());
\r
886 Assert.IsFalse(dit.UnsequencedEquals(dat));
\r
891 public void Normal()
\r
896 Assert.IsFalse(dit.UnsequencedEquals(dat));
\r
897 Assert.IsFalse(dat.UnsequencedEquals(dit));
\r
899 Assert.IsTrue(dit.UnsequencedEquals(dat));
\r
900 Assert.IsTrue(dat.UnsequencedEquals(dit));
\r
905 public void WrongOrder()
\r
909 Assert.IsTrue(dit.UnsequencedEquals(dut));
\r
910 Assert.IsTrue(dut.UnsequencedEquals(dit));
\r
913 Assert.IsTrue(dit.UnsequencedEquals(dut));
\r
914 Assert.IsTrue(dut.UnsequencedEquals(dit));
\r
919 public void Reflexive()
\r
921 Assert.IsTrue(dit.UnsequencedEquals(dit));
\r
923 Assert.IsTrue(dit.UnsequencedEquals(dit));
\r
925 Assert.IsTrue(dit.UnsequencedEquals(dit));
\r
930 public void Dispose()
\r
941 public class MultiLevelUnorderedOfUnOrdered
\r
943 private ICollection<int> dit, dat, dut;
\r
945 private ICollection<ICollection<int>> Dit, Dat, Dut;
\r
951 dit = new HashSet<int>();
\r
952 dat = new HashSet<int>();
\r
953 dut = new HashSet<int>();
\r
954 dit.Add(2);dit.Add(1);
\r
955 dat.Add(1);dat.Add(2);
\r
957 Dit = new HashSet<ICollection<int>>();
\r
958 Dat = new HashSet<ICollection<int>>();
\r
959 Dut = new HashSet<ICollection<int>>();
\r
964 public void Check()
\r
966 Assert.IsTrue(dit.UnsequencedEquals(dat));
\r
967 Assert.IsFalse(dit.UnsequencedEquals(dut));
\r
972 public void Multi()
\r
974 Dit.Add(dit);Dit.Add(dut);Dit.Add(dit);
\r
975 Dat.Add(dut);Dat.Add(dit);Dat.Add(dat);
\r
976 Assert.IsTrue(Dit.UnsequencedEquals(Dat));
\r
977 Assert.IsFalse(Dit.UnsequencedEquals(Dut));
\r
982 public void Dispose()
\r
984 dit = dat = dut = null;
\r
985 Dit = Dat = Dut = null;
\r
992 public class MultiLevelOrderedOfUnOrdered
\r
994 private ICollection<int> dit, dat, dut;
\r
996 private ISequenced<ICollection<int>> Dit, Dat, Dut;
\r
1000 public void Init()
\r
1002 dit = new HashSet<int>();
\r
1003 dat = new HashSet<int>();
\r
1004 dut = new HashSet<int>();
\r
1005 dit.Add(2);dit.Add(1);
\r
1006 dat.Add(1);dat.Add(2);
\r
1008 Dit = new LinkedList<ICollection<int>>();
\r
1009 Dat = new LinkedList<ICollection<int>>();
\r
1010 Dut = new LinkedList<ICollection<int>>();
\r
1015 public void Check()
\r
1017 Assert.IsTrue(dit.UnsequencedEquals(dat));
\r
1018 Assert.IsFalse(dit.UnsequencedEquals(dut));
\r
1023 public void Multi()
\r
1025 Dit.Add(dit);Dit.Add(dut);Dit.Add(dit);
\r
1026 Dat.Add(dut);Dat.Add(dit);Dat.Add(dat);
\r
1027 Dut.Add(dit);Dut.Add(dut);Dut.Add(dat);
\r
1028 Assert.IsFalse(Dit.SequencedEquals(Dat));
\r
1029 Assert.IsTrue(Dit.SequencedEquals(Dut));
\r
1034 public void Dispose()
\r
1036 dit = dat = dut = null;
\r
1037 Dit = Dat = Dut = null;
\r
1044 public class MultiLevelUnOrderedOfOrdered
\r
1046 private ISequenced<int> dit, dat, dut, dot;
\r
1048 private ICollection<ISequenced<int>> Dit, Dat, Dut, Dot;
\r
1052 public void Init()
\r
1054 dit = new LinkedList<int>();
\r
1055 dat = new LinkedList<int>();
\r
1056 dut = new LinkedList<int>();
\r
1057 dot = new LinkedList<int>();
\r
1058 dit.Add(2);dit.Add(1);
\r
1059 dat.Add(1);dat.Add(2);
\r
1061 dot.Add(2);dot.Add(1);
\r
1062 Dit = new HashSet<ISequenced<int>>();
\r
1063 Dat = new HashSet<ISequenced<int>>();
\r
1064 Dut = new HashSet<ISequenced<int>>();
\r
1065 Dot = new HashSet<ISequenced<int>>();
\r
1070 public void Check()
\r
1072 Assert.IsFalse(dit.SequencedEquals(dat));
\r
1073 Assert.IsTrue(dit.SequencedEquals(dot));
\r
1074 Assert.IsFalse(dit.SequencedEquals(dut));
\r
1079 public void Multi()
\r
1081 Dit.Add(dit);Dit.Add(dut);//Dit.Add(dit);
\r
1082 Dat.Add(dut);Dat.Add(dit);Dat.Add(dat);
\r
1083 Dut.Add(dot);Dut.Add(dut);//Dut.Add(dit);
\r
1084 Dot.Add(dit);Dot.Add(dit);Dot.Add(dut);
\r
1085 Assert.IsTrue(Dit.UnsequencedEquals(Dit));
\r
1086 Assert.IsTrue(Dit.UnsequencedEquals(Dut));
\r
1087 Assert.IsFalse(Dit.UnsequencedEquals(Dat));
\r
1088 Assert.IsTrue(Dit.UnsequencedEquals(Dot));
\r
1093 public void Dispose()
\r
1095 dit = dat = dut = dot = null;
\r
1096 Dit = Dat = Dut = Dot = null;
\r