public void Insert_SeveralKeys_ExpectsTreeToIncreaseInLevelsAfewTimes()
        {
            var tree = new BPlusTree <int, string>(3);

            BTreeTestsUtils.HasBPlusTreeProperties(tree, 0, 0, 0);

            tree.Insert(new KeyValuePair <int, string>(50, "A"));
            BTreeTestsUtils.HasBPlusTreeProperties(tree, 2, 1, 2);

            tree.Insert(new KeyValuePair <int, string>(10, "B"));
            BTreeTestsUtils.HasBPlusTreeProperties(tree, 3, 2, 2);

            tree.Insert(new KeyValuePair <int, string>(100, "C"));
            BTreeTestsUtils.HasBPlusTreeProperties(tree, 4, 3, 3);

            tree.Insert(new KeyValuePair <int, string>(200, "D"));
            BTreeTestsUtils.HasBPlusTreeProperties(tree, 5, 4, 3);

            tree.Insert(new KeyValuePair <int, string>(20, "E"));
            BTreeTestsUtils.HasBPlusTreeProperties(tree, 7, 5, 4);

            tree.Insert(new KeyValuePair <int, string>(300, "F"));
            BTreeTestsUtils.HasBPlusTreeProperties(tree, 9, 6, 7);

            tree.Insert(new KeyValuePair <int, string>(30, "G"));
            BTreeTestsUtils.HasBPlusTreeProperties(tree, 10, 7, 7);

            tree.Insert(new KeyValuePair <int, string>(500, "H"));
            BTreeTestsUtils.HasBPlusTreeProperties(tree, 11, 8, 7);

            tree.Insert(new KeyValuePair <int, string>(250, "I"));
            BTreeTestsUtils.HasBPlusTreeProperties(tree, 13, 9, 8);

            tree.Insert(new KeyValuePair <int, string>(400, "J"));
            BTreeTestsUtils.HasBPlusTreeProperties(tree, 14, 10, 8);

            tree.Insert(new KeyValuePair <int, string>(270, "K"));
            BTreeTestsUtils.HasBPlusTreeProperties(tree, 16, 11, 10);

            tree.Insert(new KeyValuePair <int, string>(600, "L"));
            BTreeTestsUtils.HasBPlusTreeProperties(tree, 18, 12, 11);

            tree.Insert(new KeyValuePair <int, string>(150, "M"));
            BTreeTestsUtils.HasBPlusTreeProperties(tree, 20, 13, 12);

            tree.Insert(new KeyValuePair <int, string>(80, "N"));
            BTreeTestsUtils.HasBPlusTreeProperties(tree, 22, 14, 16);

            tree.Insert(new KeyValuePair <int, string>(60, "O"));
            BTreeTestsUtils.HasBPlusTreeProperties(tree, 24, 15, 17);

            tree.Insert(new KeyValuePair <int, string>(90, "P"));
            BTreeTestsUtils.HasBPlusTreeProperties(tree, 25, 16, 17);

            Assert.AreEqual(1, tree.Root.KeyCount);
            Assert.AreEqual(150, tree.Root.GetKeyValue(0).Key);
            Assert.AreEqual(default(string), tree.Root.GetKeyValue(0).Value, ignoreCase: true);
        }
        public void Delete_TheOnlyKeyInTree_ExpectsNoNodeAndNoKeyAfter()
        {
            var tree = new BPlusTree <int, string>(3);

            tree.Insert(new KeyValuePair <int, string>(10, "A"));
            BTreeTestsUtils.HasBPlusTreeProperties(tree, 2, 1, 2);

            /* Deleting the only key in the only leaf node of the tree. */
            Assert.IsTrue(tree.Delete(10));
            BTreeTestsUtils.HasBPlusTreeProperties(tree, 0, 0, 0);
        }
        public void Delete_TheOnlyKeyInLeafNode_ExpectsToTriggerLeftRotateAndReduceBy1Key()
        {
            var tree = new BPlusTree <int, string>(3);

            tree.Insert(new KeyValuePair <int, string>(10, "A"));
            tree.Insert(new KeyValuePair <int, string>(20, "B"));
            tree.Insert(new KeyValuePair <int, string>(30, "C"));
            BTreeTestsUtils.HasBPlusTreeProperties(tree, 4, 3, 3);

            Assert.IsTrue(tree.Delete(10));
            BTreeTestsUtils.HasBPlusTreeProperties(tree, 3, 2, 3);
        }
        public void Delete_NonExistingKey_ExpectsFailure()
        {
            var tree = new BPlusTree <int, string>(3);

            tree.Insert(new KeyValuePair <int, string>(10, "A"));
            tree.Insert(new KeyValuePair <int, string>(100, "B"));
            BTreeTestsUtils.HasBPlusTreeProperties(tree, 3, 2, 3);

            /* Deleting a non-existing key. */
            Assert.IsFalse(tree.Delete(50));
            BTreeTestsUtils.HasBPlusTreeProperties(tree, 3, 2, 3);
        }
        public void Delete_BiggestKeyInTheOnlyLeafNodeOfTree_ExpectsToReduceBy1Key()
        {
            var tree = new BPlusTree <int, string>(3);

            tree.Insert(new KeyValuePair <int, string>(10, "A"));
            tree.Insert(new KeyValuePair <int, string>(100, "B"));
            BTreeTestsUtils.HasBPlusTreeProperties(tree, 3, 2, 3);

            /* Deleting 1 out of 2 keys in the only leaf node of the tree. */
            Assert.IsTrue(tree.Delete(100));
            BTreeTestsUtils.HasBPlusTreeProperties(tree, 2, 1, 2);
        }
        public void Delete_AllNodesInRandomOrder1_ExpectsProperBtreeAfterEachDelete()
        {
            BTreeTestsUtils.HasBPlusTreeProperties(_tree, 25, 16, 17);

            Assert.IsTrue(_tree.Delete(100));
            BTreeTestsUtils.HasBPlusTreeProperties(_tree, 24, 15, 17);

            Assert.IsTrue(_tree.Delete(20));
            BTreeTestsUtils.HasBPlusTreeProperties(_tree, 23, 14, 17);

            Assert.IsTrue(_tree.Delete(250));
            BTreeTestsUtils.HasBPlusTreeProperties(_tree, 22, 13, 17);

            Assert.IsTrue(_tree.Delete(600));
            BTreeTestsUtils.HasBPlusTreeProperties(_tree, 21, 12, 17);

            Assert.IsTrue(_tree.Delete(270));
            BTreeTestsUtils.HasBPlusTreeProperties(_tree, 19, 11, 16);

            Assert.IsTrue(_tree.Delete(60));
            BTreeTestsUtils.HasBPlusTreeProperties(_tree, 18, 10, 16);

            Assert.IsTrue(_tree.Delete(10));
            BTreeTestsUtils.HasBPlusTreeProperties(_tree, 17, 9, 16);

            Assert.IsTrue(_tree.Delete(300));
            BTreeTestsUtils.HasBPlusTreeProperties(_tree, 15, 8, 12);

            Assert.IsTrue(_tree.Delete(80));
            BTreeTestsUtils.HasBPlusTreeProperties(_tree, 13, 7, 11);

            Assert.IsTrue(_tree.Delete(150));
            BTreeTestsUtils.HasBPlusTreeProperties(_tree, 11, 6, 10);

            Assert.IsTrue(_tree.Delete(400));
            BTreeTestsUtils.HasBPlusTreeProperties(_tree, 9, 5, 8);

            Assert.IsTrue(_tree.Delete(30));
            BTreeTestsUtils.HasBPlusTreeProperties(_tree, 7, 4, 7);

            Assert.IsTrue(_tree.Delete(90));
            BTreeTestsUtils.HasBPlusTreeProperties(_tree, 5, 3, 4);

            Assert.IsTrue(_tree.Delete(500));
            BTreeTestsUtils.HasBPlusTreeProperties(_tree, 3, 2, 3);

            Assert.IsTrue(_tree.Delete(50));
            BTreeTestsUtils.HasBPlusTreeProperties(_tree, 2, 1, 2);


            Assert.IsTrue(_tree.Delete(200));
            BTreeTestsUtils.HasBPlusTreeProperties(_tree, 0, 0, 0);
        }
        public void Delete_TheOnlyKeyInLeafNodeWithMinOneFullSibling_ExpectsToTriggerLeftRotate()
        {
            var tree = new BPlusTree <int, string>(3);

            tree.Insert(new KeyValuePair <int, string>(10, "A"));
            tree.Insert(new KeyValuePair <int, string>(20, "B"));
            tree.Insert(new KeyValuePair <int, string>(30, "C"));
            tree.Insert(new KeyValuePair <int, string>(40, "D"));
            BTreeTestsUtils.HasBPlusTreeProperties(tree, 6, 4, 4);

            Assert.IsTrue(tree.Delete(10));
            BTreeTestsUtils.HasBPlusTreeProperties(tree, 5, 3, 4);
        }
        public void Delete_KeyInFullLeaf_ExpectsToReduceBy1Key()
        {
            var tree = new BPlusTree <int, string>(3);

            tree.Insert(new KeyValuePair <int, string>(10, "A"));
            tree.Insert(new KeyValuePair <int, string>(20, "B"));
            tree.Insert(new KeyValuePair <int, string>(30, "C"));
            tree.Insert(new KeyValuePair <int, string>(40, "D"));
            BTreeTestsUtils.HasBPlusTreeProperties(tree, 6, 4, 4);

            Assert.IsTrue(tree.Delete(30));
            BTreeTestsUtils.HasBPlusTreeProperties(tree, 5, 3, 4);
        }
 public void Build_ExpectsACorrectBPlusTree()
 {
     BTreeTestsUtils.HasBPlusTreeProperties(_tree, 25, 16, 17);
 }
 public void Delete_TheSmallestKeyInAFullLeafNodeOfRightSubtree_ExpectsSimpleDeleteAndToReduceBy1Key()
 {
     BTreeTestsUtils.HasBPlusTreeProperties(_tree, 25, 16, 17);
     Assert.IsTrue(_tree.Delete(400));
     BTreeTestsUtils.HasBPlusTreeProperties(_tree, 24, 15, 17);
 }
 public void Delete_TheOnlyKeyInLeafNode_ExpectsRightRotationAndToReduceBy1Key()
 {
     BTreeTestsUtils.HasBPlusTreeProperties(_tree, 25, 16, 17);
     Assert.IsTrue(_tree.Delete(600));
     BTreeTestsUtils.HasBPlusTreeProperties(_tree, 24, 15, 17);
 }
 public void Delete_TheBiggestKeyInFullLeafNode_ExpectsSimpleDeleteAndToReduceBy1Key()
 {
     BTreeTestsUtils.HasBPlusTreeProperties(_tree, 25, 16, 17);
     Assert.IsTrue(_tree.Delete(100));
     BTreeTestsUtils.HasBPlusTreeProperties(_tree, 24, 15, 17);
 }
 public void Delete_TheSmallestKeyInFullLeafWith2Siblings_ExpectsSimpleDeleteAndToReduceBy1Key()
 {
     BTreeTestsUtils.HasBPlusTreeProperties(_tree, 25, 16, 17);
     Assert.IsTrue(_tree.Delete(90));
     BTreeTestsUtils.HasBPlusTreeProperties(_tree, 24, 15, 17);
 }
 public void Delete_TheBiggestKeyInLeftMostLeafOnLeftSubtree_ExpectsSimpleDeleteAndToReduceBy1Key()
 {
     BTreeTestsUtils.HasBPlusTreeProperties(_tree, 25, 16, 17);
     Assert.IsTrue(_tree.Delete(20));
     BTreeTestsUtils.HasBPlusTreeProperties(_tree, 24, 15, 17);
 }
 public void Delete_AKeyFromFullLeaf_ExpectsSimpleDeleteAndToReduceBy1Key()
 {
     BTreeTestsUtils.HasBPlusTreeProperties(_tree, 25, 16, 17);
     Assert.IsTrue(_tree.Delete(270));
     BTreeTestsUtils.HasBPlusTreeProperties(_tree, 24, 15, 17);
 }
 public void Delete_TheBiggestKeyInLeftSubTree_ExpectsRightRotateAndToReduceBy1Key()
 {
     BTreeTestsUtils.HasBPlusTreeProperties(_tree, 25, 16, 17);
     Assert.IsTrue(_tree.Delete(150));
     BTreeTestsUtils.HasBPlusTreeProperties(_tree, 24, 15, 17);
 }