Beispiel #1
0
        public void Remove()
        {
            AndersonTree <int, int> tree = new AndersonTree <int, int>();

            tree.Add(0, 0);
            tree.Add(1, 1);
            tree.Add(2, 2);
            tree.Add(3, 3);
            tree.Add(4, 4);
            tree.Add(5, 5);
            tree.Add(6, 6);
            tree.Add(7, 7);

            // removing zero will cause a break in the levels between 1 and nil,
            // so the level of 1 is decreased to 1. Then break is between 1 and 3,
            // so the level of 3 is decreased to 2.
            tree.Remove(0);
            AndersonTreeNode <int, int> node = tree.FindNode(3);

            // levels
            Assert.AreEqual(node.Level, 2);
            Assert.AreEqual(node.Left.Level, 1);
            Assert.AreEqual(node.Left.Right.Level, 1);
            Assert.AreEqual(node.Right.Level, 2);
            Assert.AreEqual(node.Right.Left.Level, 1);
            Assert.AreEqual(node.Right.Right.Level, 1);

            // values
            Assert.AreEqual(node.Value, 3);
            Assert.AreEqual(node.Left.Value, 1);
            Assert.AreEqual(node.Left.Right.Value, 2);
            Assert.AreEqual(node.Right.Value, 5);
            Assert.AreEqual(node.Right.Left.Value, 4);
            Assert.AreEqual(node.Right.Right.Value, 6);

            Assert.IsTrue(tree.Remove(1));
            Assert.IsFalse(tree.ContainsKey(1));
            Assert.Throws(typeof(KeyNotFoundException), delegate() { int val = tree[1]; });

            // the real remove test
            node = tree.FindNode(3);

            // levels
            Assert.AreEqual(node.Level, 2);
            Assert.AreEqual(node.Left.Level, 1);
            Assert.AreEqual(node.Right.Level, 2);
            Assert.AreEqual(node.Right.Left.Level, 1);
            Assert.AreEqual(node.Right.Right.Level, 1);
            Assert.AreEqual(node.Right.Right.Right.Level, 1);

            // values
            Assert.AreEqual(node.Value, 3);
            Assert.AreEqual(node.Left.Value, 2);
            Assert.AreEqual(node.Right.Value, 5);
            Assert.AreEqual(node.Right.Left.Value, 4);
            Assert.AreEqual(node.Right.Right.Value, 6);
            Assert.AreEqual(node.Right.Right.Right.Value, 7);
        }
Beispiel #2
0
        public void Add()
        {
            AndersonTree <int, int> tree = new AndersonTree <int, int>();

            tree.Add(0, 0);
            tree.Add(1, 1);

            // split must perform a left rotation and increase
            // the level of the node with key 1.
            tree.Add(2, 2);
            AndersonTreeNode <int, int> node = tree.FindNode(1);

            Assert.AreEqual(node.Level, 2);
            Assert.AreEqual(node.Left.Level, 1);
            Assert.AreEqual(node.Right.Level, 1);
            Assert.AreEqual(node.Left.Value, 0);
            Assert.AreEqual(node.Right.Value, 2);

            tree.Add(3, 3);
            tree.Add(4, 4);
            tree.Add(5, 5);
            tree.Add(6, 6);

            // must be balanced
            node = tree.FindNode(3);
            Assert.AreEqual(node.Value, 3);
            Assert.AreEqual(node.Left.Value, 1);
            Assert.AreEqual(node.Left.Left.Value, 0);
            Assert.AreEqual(node.Left.Right.Value, 2);
            Assert.AreEqual(node.Right.Value, 5);
            Assert.AreEqual(node.Right.Left.Value, 4);
            Assert.AreEqual(node.Right.Right.Value, 6);

            Assert.IsTrue(tree.ContainsKey(0));
            Assert.IsTrue(tree.ContainsKey(1));
            Assert.IsFalse(tree.ContainsKey(10));
            Assert.IsNotNull(tree[4]);

            Assert.Throws(typeof(KeyNotFoundException), delegate() { int v = tree[10]; });
            Assert.Throws(typeof(ArgumentException), delegate() { tree.Add(0, 0); });

            // set value
            Assert.DoesNotThrow(delegate() { tree[0] = 20; });
            int i = tree[0];

            Assert.AreEqual(i, 20);
        }