Example #1
0
        public void ShouldBuildCorrectlySortedTreeLayersComplete()
        {
            var intervalNodeFour  = new IntervalWithValue <long, long>(0, 5, 1);
            var nodeFour          = new TreeNode <long, long>(intervalNodeFour, null, null);
            var intervalNodeFive  = new IntervalWithValue <long, long>(10, 15, 2);
            var nodeFive          = new TreeNode <long, long>(intervalNodeFive, null, null);
            var intervalNodeSix   = new IntervalWithValue <long, long>(20, 25, 0);
            var nodeSix           = new TreeNode <long, long>(intervalNodeSix, null, null);
            var intervalNodeSeven = new IntervalWithValue <long, long>(30, 35, 0);
            var nodeSeven         = new TreeNode <long, long>(intervalNodeSeven, null, null);
            var intervalNodeTwo   = new IntervalWithValue <long, long>(5, 10, 1);
            var nodeTwo           = new TreeNode <long, long>(intervalNodeTwo, nodeFour, nodeFive);
            var intervalNodeThree = new IntervalWithValue <long, long>(25, 30, 2);
            var nodeThree         = new TreeNode <long, long>(intervalNodeThree, nodeSix, nodeSeven);
            var intervalNodeOne   = new IntervalWithValue <long, long>(15, 20, 0);
            var nodeOne           = new TreeNode <long, long>(intervalNodeOne, nodeTwo, nodeThree);
            var treeIntervals     = new List <IntervalWithValue <long, long> >
            {
                intervalNodeOne, intervalNodeTwo, intervalNodeThree, intervalNodeFour, intervalNodeFive,
                intervalNodeSix, intervalNodeSeven
            };
            var tree = new MutableIntervalBalancedTree <long, long>(treeIntervals);

            Assert.Equal(nodeOne, tree.Root);
        }
Example #2
0
        public void ShouldResolveCorrectlyEnumerator()
        {
            var intervalNodeFour  = new IntervalWithValue <long, long>(0, 5, 1);
            var intervalNodeFive  = new IntervalWithValue <long, long>(10, 15, 2);
            var intervalNodeSix   = new IntervalWithValue <long, long>(20, 25, 0);
            var intervalNodeSeven = new IntervalWithValue <long, long>(30, 35, 0);
            var intervalNodeTwo   = new IntervalWithValue <long, long>(5, 10, 1);
            var intervalNodeThree = new IntervalWithValue <long, long>(25, 30, 2);
            var intervalNodeOne   = new IntervalWithValue <long, long>(15, 20, 0);
            var treeIntervals     = new List <IntervalWithValue <long, long> >
            {
                intervalNodeOne, intervalNodeTwo, intervalNodeThree, intervalNodeFour, intervalNodeFive,
                intervalNodeSix, intervalNodeSeven
            };
            var tree = new MutableIntervalBalancedTree <long, long>(treeIntervals);

            using var enumerator = tree.GetEnumerator();
            var enumeratorList = new List <IntervalWithValue <long, long> >();

            while (enumerator.MoveNext())
            {
                enumeratorList.Add(enumerator.Current);
            }
            enumeratorList.Sort();
            treeIntervals.Sort();
            Assert.Equal(treeIntervals, enumeratorList);
        }
Example #3
0
        public void OnNullRootGetEnumeratorShouldReturnEmptyListEnumerator()
        {
            var tree = new MutableIntervalBalancedTree <long, long>(new List <IntervalWithValue <long, long> >());

            using var enumerator = tree.GetEnumerator();
            Assert.Null(enumerator.Current);
        }
Example #4
0
        public void ShouldAddCorrectlyOnEmptyTree()
        {
            var tree = new MutableIntervalBalancedTree <long, long>(new List <IntervalWithValue <long, long> >());

            Assert.Empty(tree);
            tree.Add(new IntervalWithValue <long, long>(115, 120, 0));
            Assert.Contains(new IntervalWithValue <long, long>(115, 120, 0), tree);
            Assert.Single(tree);
        }
Example #5
0
        public void ShouldCountCorrectlyLargeAmountOfIntervals()
        {
            var intervals = new List <IntervalWithValue <long, long> >();

            for (var i = 0; i < 25000000; i += 25)
            {
                intervals.Add(new IntervalWithValue <long, long>(i, i + 50, 0));
            }
            var tree = new MutableIntervalBalancedTree <long, long>(intervals);

            Assert.Equal(1000000, tree.Count);
        }
Example #6
0
        public void ShouldSearchInLargeAmountOfOverlappedIntervals()
        {
            var intervals = new List <IntervalWithValue <long, long> >();

            for (var i = 0; i < 25000000; i += 25)
            {
                intervals.Add(new IntervalWithValue <long, long>(i, i + 50, 0));
            }
            var tree = new MutableIntervalBalancedTree <long, long>(intervals);

            var result = tree.Search(100000, true, true);

            Assert.Equal(3, result.Count);
        }
Example #7
0
        public void ShouldGetNullFirstInLargeAmountOfExclusiveIntervals()
        {
            var intervals = new List <IntervalWithValue <long, long> >();

            for (var i = 0; i < 50000000; i += 50)
            {
                intervals.Add(new IntervalWithValue <long, long>(i, i + 50, 0));
            }
            var tree = new MutableIntervalBalancedTree <long, long>(intervals);

            var result = tree.SearchFirst(-1, false, false);

            Assert.Null(result);
        }
Example #8
0
        public void ShouldSearchFirstInLargeAmountOfExclusiveIntervalsUpper()
        {
            var intervals = new List <IntervalWithValue <long, long> >();

            for (var i = 0; i < 50000000; i += 50)
            {
                intervals.Add(new IntervalWithValue <long, long>(i, i + 50, 0));
            }
            var tree     = new MutableIntervalBalancedTree <long, long>(intervals);
            var expected = new IntervalWithValue <long, long>(49999900, 50000000, 0);

            var result = tree.SearchFirst(49999925, false, false);

            Assert.Equal(expected, result);
        }
Example #9
0
        public void ShouldGenerateCorrectlyTreeWithOverlappingCheckOnNoIntervalsOverlapped()
        {
            var intervalNodeFour  = new IntervalWithValue <long, long>(0, 5, 1);
            var intervalNodeFive  = new IntervalWithValue <long, long>(10, 15, 2);
            var intervalNodeSix   = new IntervalWithValue <long, long>(20, 25, 0);
            var intervalNodeSeven = new IntervalWithValue <long, long>(30, 35, 0);
            var intervalNodeTwo   = new IntervalWithValue <long, long>(5, 10, 1);
            var intervalNodeThree = new IntervalWithValue <long, long>(25, 30, 2);
            var intervalNodeOne   = new IntervalWithValue <long, long>(15, 20, 0);
            var treeIntervals     = new List <IntervalWithValue <long, long> >
            {
                intervalNodeOne, intervalNodeTwo, intervalNodeThree, intervalNodeFour, intervalNodeFive,
                intervalNodeSix, intervalNodeSeven
            };
            var tree = new MutableIntervalBalancedTree <long, long>(treeIntervals, true);

            Assert.Equal(7, tree.Count);
        }
Example #10
0
        public void OnNotNullRootAndNotExistingValueContainsShouldReturnFalse()
        {
            var intervalNodeFour  = new IntervalWithValue <long, long>(0, 5, 1);
            var intervalNodeFive  = new IntervalWithValue <long, long>(10, 15, 2);
            var intervalNodeSix   = new IntervalWithValue <long, long>(20, 25, 0);
            var intervalNodeSeven = new IntervalWithValue <long, long>(30, 35, 0);
            var intervalNodeTwo   = new IntervalWithValue <long, long>(5, 10, 1);
            var intervalNodeThree = new IntervalWithValue <long, long>(25, 30, 2);
            var intervalNodeOne   = new IntervalWithValue <long, long>(15, 20, 0);
            var treeIntervals     = new List <IntervalWithValue <long, long> >
            {
                intervalNodeOne, intervalNodeTwo, intervalNodeThree, intervalNodeFour, intervalNodeFive,
                intervalNodeSix, intervalNodeSeven
            };
            var tree = new MutableIntervalBalancedTree <long, long>(treeIntervals);

            Assert.DoesNotContain(new IntervalWithValue <long, long>(100, 115, 2), tree);
        }
Example #11
0
        public void ShouldCountCorrectlyItems()
        {
            var intervalNodeFour  = new IntervalWithValue <long, long>(0, 5, 1);
            var intervalNodeFive  = new IntervalWithValue <long, long>(10, 15, 2);
            var intervalNodeSix   = new IntervalWithValue <long, long>(20, 25, 0);
            var intervalNodeSeven = new IntervalWithValue <long, long>(30, 35, 0);
            var intervalNodeTwo   = new IntervalWithValue <long, long>(5, 10, 1);
            var intervalNodeThree = new IntervalWithValue <long, long>(25, 30, 2);
            var intervalNodeOne   = new IntervalWithValue <long, long>(15, 20, 0);
            var treeIntervals     = new List <IntervalWithValue <long, long> >
            {
                intervalNodeOne, intervalNodeTwo, intervalNodeThree, intervalNodeFour, intervalNodeFive,
                intervalNodeSix, intervalNodeSeven
            };
            var tree = new MutableIntervalBalancedTree <long, long>(treeIntervals);

            Assert.Equal(7, tree.Count);
        }
Example #12
0
        public void ShouldNotRemoveNotExistingIntervalFromTree()
        {
            var intervalNodeFour  = new IntervalWithValue <long, long>(0, 5, 1);
            var intervalNodeFive  = new IntervalWithValue <long, long>(10, 15, 2);
            var intervalNodeSix   = new IntervalWithValue <long, long>(20, 25, 0);
            var intervalNodeSeven = new IntervalWithValue <long, long>(30, 35, 0);
            var intervalNodeTwo   = new IntervalWithValue <long, long>(5, 10, 1);
            var intervalNodeThree = new IntervalWithValue <long, long>(25, 30, 2);
            var intervalNodeOne   = new IntervalWithValue <long, long>(15, 20, 0);
            var treeIntervals     = new List <IntervalWithValue <long, long> >
            {
                intervalNodeOne, intervalNodeTwo, intervalNodeThree, intervalNodeFour, intervalNodeFive,
                intervalNodeSix, intervalNodeSeven
            };
            var tree = new MutableIntervalBalancedTree <long, long>(treeIntervals);

            Assert.False(tree.Remove(new IntervalWithValue <long, long>(115, 120, 0)));
            Assert.Equal(7, tree.Count);
        }
Example #13
0
        public void ShouldSearchInTree()
        {
            var intervalNodeFour  = new IntervalWithValue <long, long>(0, 5, 1);
            var intervalNodeFive  = new IntervalWithValue <long, long>(10, 15, 2);
            var intervalNodeSix   = new IntervalWithValue <long, long>(20, 25, 0);
            var intervalNodeSeven = new IntervalWithValue <long, long>(30, 35, 0);
            var intervalNodeTwo   = new IntervalWithValue <long, long>(5, 10, 1);
            var intervalNodeThree = new IntervalWithValue <long, long>(25, 30, 2);
            var intervalNodeOne   = new IntervalWithValue <long, long>(15, 20, 0);
            var treeIntervals     = new List <IntervalWithValue <long, long> >
            {
                intervalNodeOne, intervalNodeTwo, intervalNodeThree, intervalNodeFour, intervalNodeFive,
                intervalNodeSix, intervalNodeSeven
            };
            var tree   = new MutableIntervalBalancedTree <long, long>(treeIntervals);
            var result = tree.Search(3, false, false);

            Assert.Single(result);
            Assert.Equal(intervalNodeFour, result.First());
        }
Example #14
0
        public void ShouldRemoveCorrectlyIntervalFromTree()
        {
            var intervalNodeFour  = new IntervalWithValue <long, long>(0, 5, 1);
            var intervalNodeFive  = new IntervalWithValue <long, long>(10, 15, 2);
            var intervalNodeSix   = new IntervalWithValue <long, long>(20, 25, 0);
            var intervalNodeSeven = new IntervalWithValue <long, long>(30, 35, 0);
            var intervalNodeTwo   = new IntervalWithValue <long, long>(5, 10, 1);
            var intervalNodeThree = new IntervalWithValue <long, long>(25, 30, 2);
            var intervalNodeOne   = new IntervalWithValue <long, long>(15, 20, 0);
            var treeIntervals     = new List <IntervalWithValue <long, long> >
            {
                intervalNodeOne, intervalNodeTwo, intervalNodeThree, intervalNodeFour, intervalNodeFive,
                intervalNodeSix, intervalNodeSeven
            };
            var tree = new MutableIntervalBalancedTree <long, long>(treeIntervals);

            Assert.True(tree.Remove(new IntervalWithValue <long, long>(15, 20, 0)));
            Assert.Equal(6, tree.Count);
            Assert.DoesNotContain(new IntervalWithValue <long, long>(15, 20, 0), tree);
        }
Example #15
0
        public void ShouldCopyCorrectlyTreeIntoArray()
        {
            var intervals         = new IntervalWithValue <long, long> [7];
            var intervalNodeFour  = new IntervalWithValue <long, long>(0, 5, 1);
            var intervalNodeFive  = new IntervalWithValue <long, long>(10, 15, 2);
            var intervalNodeSix   = new IntervalWithValue <long, long>(20, 25, 0);
            var intervalNodeSeven = new IntervalWithValue <long, long>(30, 35, 0);
            var intervalNodeTwo   = new IntervalWithValue <long, long>(5, 10, 1);
            var intervalNodeThree = new IntervalWithValue <long, long>(25, 30, 2);
            var intervalNodeOne   = new IntervalWithValue <long, long>(15, 20, 0);
            var treeIntervals     = new List <IntervalWithValue <long, long> >
            {
                intervalNodeOne, intervalNodeTwo, intervalNodeThree, intervalNodeFour, intervalNodeFive,
                intervalNodeSix, intervalNodeSeven
            };
            var tree = new MutableIntervalBalancedTree <long, long>(treeIntervals);

            tree.CopyTo(intervals, 0);
            treeIntervals.Sort();
            var intervalsAsList = intervals.ToList();

            intervalsAsList.Sort();
            Assert.Equal(treeIntervals, intervalsAsList);
        }
Example #16
0
        public void OnNullRootSearchMultipleShouldReturnEmptyList()
        {
            var tree = new MutableIntervalBalancedTree <long, long>(new List <IntervalWithValue <long, long> >());

            Assert.Empty(tree.Search(0, false, false));
        }
Example #17
0
        public void ShouldReturnFalseOnRemoveOnEmptyTree()
        {
            var tree = new MutableIntervalBalancedTree <long, long>(new List <IntervalWithValue <long, long> >());

            Assert.False(tree.Remove(new IntervalWithValue <long, long>(115, 120, 0)));
        }
Example #18
0
        public void OnNullRootSearchFirstShouldReturnNull()
        {
            var tree = new MutableIntervalBalancedTree <long, long>(new List <IntervalWithValue <long, long> >());

            Assert.Null(tree.SearchFirst(0, false, false));
        }
Example #19
0
        public void OnNullRootContainsShouldReturnFalse()
        {
            var tree = new MutableIntervalBalancedTree <long, long>(new List <IntervalWithValue <long, long> >());

            Assert.DoesNotContain(new IntervalWithValue <long, long>(0, 0, 0), tree);
        }