using Annulus.CSG; namespace Annulus.UnitTests.CSG { public class DisjointSetsTests : UnitTestSharp.TestFixture { public class FindTests : UnitTestSharp.TestFixture { public void IndicesNeverMerged_AreTheirOwnSets() { DisjointSets sets = new DisjointSets(3); CheckEqual(0, sets.Find(0)); CheckEqual(1, sets.Find(1)); CheckEqual(2, sets.Find(2)); } public void MergedIndices_ShareARepresentative() { DisjointSets sets = new DisjointSets(4); sets.Union(1, 3); CheckEqual(sets.Find(1), sets.Find(3)); CheckFalse(sets.Find(1) == sets.Find(0)); } public void LongChainOfMerges_JoinsEveryMember() { DisjointSets sets = new DisjointSets(6); for (int i = 0; i < 5; ++i) { sets.Union(i, i + 1); } for (int i = 1; i < 6; ++i) { CheckEqual(sets.Find(0), sets.Find(i)); } } } public class UnionTests : UnitTestSharp.TestFixture { public void MergingTwoSetsTwice_ChangesNothing() { DisjointSets sets = new DisjointSets(3); sets.Union(0, 2); int representative = sets.Find(0); sets.Union(2, 0); CheckEqual(representative, sets.Find(2)); CheckFalse(sets.Find(1) == representative); } public void MergingAnIndexWithItself_ChangesNothing() { DisjointSets sets = new DisjointSets(2); sets.Union(1, 1); CheckEqual(1, sets.Find(1)); CheckEqual(0, sets.Find(0)); } public void MergingMembersOfTwoSets_JoinsTheWholeSets() { DisjointSets sets = new DisjointSets(4); sets.Union(0, 1); sets.Union(2, 3); sets.Union(1, 2); CheckEqual(sets.Find(0), sets.Find(3)); } } } }