public void InsertingExistingElement_ReturnsSameRoot()
        {
            var items = RandomHelper.UniqueSequence(_random, 100);
            var node  = CreateTree(items);

            foreach (var item in items)
            {
                var result = TwoThreeHelper.Insert(node, item);
                Assert.AreSame(node, result);
            }
        }
        public void RemoveSequentialData_InReversedOrder_Test()
        {
            const int count   = 100;
            var       items   = Enumerable.Range(0, count).ToArray();
            var       itemSet = new SortedSet <int>(items);

            var node = CreateTree(items);

            foreach (var i in items.Reverse())
            {
                node = TwoThreeHelper.Remove(node, i);
                itemSet.Remove(i);

                AssertValid(node);
                CollectionAssert.AreEqual(itemSet, node.GetValues());
            }
        }
        public void RemoveRandomData_Test()
        {
            const int count   = 100;
            var       items   = RandomHelper.UniqueSequence(_random, count);
            var       itemSet = new SortedSet <int>(items);

            var node = CreateTree(items);

            var shuffled = RandomHelper.Shuffle(_random, items);

            foreach (var i in shuffled)
            {
                node = TwoThreeHelper.Remove(node, i);
                itemSet.Remove(i);

                AssertValid(node);
                CollectionAssert.AreEqual(itemSet, node.GetValues());
            }

            Assert.IsInstanceOf <EmptyTwoThree <int> >(node);
        }
 private ITwoThree <T> CreateTree <T>(IEnumerable <T> items, IComparer <T> comparer = null)
 {
     return(items.Aggregate((ITwoThree <T>)EmptyTwoThree <T> .Instance, (current, item) => TwoThreeHelper.Insert(current, item, comparer)));
 }