public void TestGetPredecessor()
        {
            var tree = new BinarySearchTree<int>();
            var size = 10;
            Node<int> node = null;
            for (int i = 0; i < size; i++)
            {
                node = tree.Add(i);
            }

            for (int i = size - 1; i >= 0; i--)
            {
                tree.TryGetNode(i, out node);
                var prev = tree.Predecessor(node);
                if (i > 0)
                    Assert.AreEqual(node.Value - 1, prev.Value);
                else
                    Assert.IsNull(prev);
            }
        }
        public void TestTryGet()
        {
            var tree = new BinarySearchTree<int>();
            var size = 10;
            for (int i = 0; i < size; i++)
            {
                tree.Add(i);
            }

            Node<int> node;
            for (int i = 0; i < size; i++)
            {
                Assert.IsTrue(tree.TryGetNode(i, out node));
            }

            Assert.IsFalse(tree.TryGetNode(1000, out node));
        }
        public void TestGetSuccessor()
        {
            var tree = new BinarySearchTree<int>();
            var size = 10;
            Node<int> node = null;
            for (int i = 0; i < size; i++)
            {
                node = tree.Add(i);
            }

            for (int i = 0; i < size; i++)
            {
                tree.TryGetNode(i, out node);
                var next = tree.Successor(node);
                if (i < size - 1)
                    Assert.AreEqual(node.Value + 1, next.Value);
                else
                    Assert.IsNull(next);
            }
        }
        public void TestDelete()
        {
            var tree = new BinarySearchTree<int>();
            var size = 10;
            for (int i = 0; i < size; i++)
            {
                tree.Add(i);
            }

            Assert.AreEqual(tree.Count, size);

            Node<int> node;
            for (int i = 0; i < size; i++)
            {
                tree.TryGetNode(i, out node);
                tree.Remove(node);
            }

            Assert.AreEqual(tree.Count, 0);
            Assert.IsTrue(tree.IsEmpty);
        }