Ejemplo n.º 1
0
        private void SingleNodeOperations(int capacity)
        {
            var nodeStorage = new BPlusTreeNodeMemoryStorage <ComparableKeyOf <Int32> >(capacity);
            var tree        = new BPlusTree <ComparableKeyOf <Int32>, ValueOf <Int32> >(nodeStorage, new MemoryValueStorage <ValueOf <Int32> >());

            // place sequential numbers
            for (int i = 0; i < capacity; i++)
            {
                tree.Set(i, i);
            }

            // check if we can retrieve correct values
            for (int i = 0; i < capacity; i++)
            {
                var value = tree.Get(i);
                Assert.AreEqual(i, value.Value);
            }

            Assert.AreEqual(capacity, tree.Count());

            // update with the other values
            for (int i = 0; i < capacity; i++)
            {
                tree.Set(i, capacity - 1 - i);
            }

            // check again
            for (int i = 0; i < capacity; i++)
            {
                var value = tree.Get(i);
                Assert.AreEqual(capacity - 1 - i, value.Value);
            }

            // delete all keys
            for (int i = 0; i < capacity; i++)
            {
                tree.Remove(i);
            }

            Assert.AreEqual(0, tree.Count());

            // check if every key returns null
            for (int i = 0; i < capacity; i++)
            {
                var value = tree.Get(i);
                Assert.IsNull(value);
            }
        }
Ejemplo n.º 2
0
        public void Remove(int capacity)
        {
            var nodeStorage = new BPlusTreeNodeMemoryStorage <ComparableKeyOf <Int32> >(capacity);
            var tree        = new BPlusTree <ComparableKeyOf <Int32>, ValueOf <Int32> >(nodeStorage, new MemoryValueStorage <ValueOf <Int32> >());

            int count = capacity * capacity * capacity;

            for (int i = 0; i < count; i++)
            {
                tree.Set(i, i);
            }

            for (int i = 0; i < count; i++)
            {
                tree.Remove(i);
            }

            Assert.AreEqual(0, tree.Count());

            for (int i = 0; i < count; i++)
            {
                Assert.IsNull(tree.Get(i));
            }

            string message;

            Assert.IsTrue(tree.CheckConsistency(out message));
        }
Ejemplo n.º 3
0
        public void Insert(int capacity)
        {
            var nodeStorage = new BPlusTreeNodeMemoryStorage <ComparableKeyOf <Int32> >(capacity);
            var tree        = new BPlusTree <ComparableKeyOf <Int32>, ValueOf <Int32> >(nodeStorage, new MemoryValueStorage <ValueOf <Int32> >());

            int count = capacity * capacity * capacity;

            // place sequential numbers
            for (int i = 0; i < count; i++)
            {
                tree.Set(i, i);
            }

            // check if we can retrieve correct values
            for (int i = 0; i < count; i++)
            {
                var value = tree.Get(i);
                Assert.IsNotNull(value);
                Assert.AreEqual(i, value.Value);
            }

            Assert.AreEqual(count, tree.Count());

            string message;

            Assert.IsTrue(tree.CheckConsistency(out message));
        }
Ejemplo n.º 4
0
        public void TestRandomOperations()
        {
            int capacity    = 10;
            var nodeStorage = new BPlusTreeNodeMemoryStorage <ComparableKeyOf <Int32> >(capacity);
            var tree        = new BPlusTree <ComparableKeyOf <Int32>, ValueOf <Int32> >(nodeStorage, new MemoryValueStorage <ValueOf <Int32> >());

            int keyCount       = capacity * capacity * capacity;
            int operationCount = keyCount * keyCount;
            var flags          = new bool[keyCount];
            var r = new Random();

            for (int i = 0; i < operationCount; i++)
            {
                var nextIndex = r.Next(keyCount);

                if (flags[nextIndex])
                {
                    tree.Remove(nextIndex);
                }
                else
                {
                    tree.Set(nextIndex, nextIndex);
                }

                flags[nextIndex] = !flags[nextIndex];
            }

            for (int i = 0; i < keyCount; i++)
            {
                var value = tree.Get(i);
                if (flags[i])
                {
                    Assert.AreEqual(i, value.Value);
                }
                else
                {
                    Assert.IsNull(value);
                }
            }

            Assert.AreEqual(flags.Count(f => f), tree.Count());
            string message;

            Assert.IsTrue(tree.CheckConsistency(out message));
        }