public void TestRegionTree() { var seg0_10 = intervals <int> .Closed <int>(0, 10); var seg2_4 = intervals <int> .Closed <int>(2, 4); var seg3_5 = intervals <int> .Closed <int>(3, 5); var seg4_5 = intervals <int> .Closed <int>(4, 5); var seg1_6 = intervals <int> .Closed <int>(1, 6); var seg0 = intervals <int> .Singleton <int>(0); var seg2 = intervals <int> .Singleton <int>(2); var seg3 = intervals <int> .Singleton <int>(3); var tree0 = RegionTree.empty <IntKeyWrapper, intervals <int> >(); var tree1 = RegionTree.write(seg0_10, Wrap(0), tree0); var tree2 = RegionTree.write(seg2_4, Wrap(1), tree1); var tree3 = RegionTree.write(seg3_5, Wrap(2), tree2); RegionTree.checkInvariant(tree0); RegionTree.checkInvariant(tree1); RegionTree.checkInvariant(tree2); RegionTree.checkInvariant(tree3); var loc0 = RegionTree.localize(seg0, tree3); var loc2 = RegionTree.localize(seg2, tree3); var loc3 = RegionTree.localize(seg3, tree3); var loc4_5 = RegionTree.localize(seg4_5, tree3); var loc1_6 = RegionTree.localize(seg1_6, tree3); RegionTree.checkInvariant(regionTree <IntKeyWrapper, intervals <int> > .NewNode(loc0)); RegionTree.checkInvariant(regionTree <IntKeyWrapper, intervals <int> > .NewNode(loc2)); RegionTree.checkInvariant(regionTree <IntKeyWrapper, intervals <int> > .NewNode(loc3)); RegionTree.checkInvariant(regionTree <IntKeyWrapper, intervals <int> > .NewNode(loc4_5)); RegionTree.checkInvariant(regionTree <IntKeyWrapper, intervals <int> > .NewNode(loc1_6)); Assert.AreEqual(1, PersistentDict.size(loc0)); Assert.AreEqual(1, PersistentDict.size(loc2)); Assert.AreEqual(1, PersistentDict.size(loc3)); Assert.AreEqual(1, PersistentDict.size(loc4_5)); Assert.AreEqual(3, PersistentDict.size(loc1_6)); Assert.AreEqual(0, PersistentDict.toSeq(loc0).Single().Item2.Item1.Key); Assert.AreEqual(1, PersistentDict.toSeq(loc2).Single().Item2.Item1.Key); Assert.AreEqual(2, PersistentDict.toSeq(loc3).Single().Item2.Item1.Key); Assert.AreEqual(2, PersistentDict.toSeq(loc4_5).Single().Item2.Item1.Key); }