Example #1
0
        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);
        }