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); } }
public static void TestStringTree() { Stream treefile = null, blockfile = null; BPlusTree tree = GetStringTree(null, ref treefile, ref blockfile, false); Debug.WriteLine(tree.ToText()); Hashtable allmaps = new Hashtable(); for (int i = 0; i < 2; i++) { for (int j = 0; j < 2; j++) { Hashtable record = new Hashtable(); for (int k = 0; k < 2; k++) { string thiskey = MakeKey(i, j, k); string thisvalue = MakeValue(j, k, i); Debug.WriteLine("Set Pair: [" + thiskey + " : " + thisvalue + "]"); record[thiskey] = thisvalue; tree[thiskey] = thisvalue; tree.Commit(); Debug.WriteLine("Get Pair: [" + thiskey + " : " + tree.Get(thiskey).ToString() + "]"); Debug.WriteLine(tree.ToText()); } } } }
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)); }
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)); }
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)); }
public void TestMillionRecords() { int count = 1000000; var r = new Random(); var pairs = new Dictionary <int, int>(); for (int i = 0; i < count; i++) { pairs[i] = r.Next(1000000); } var nodeStorage = new BPlusTreeNodeMemoryStorage <ComparableKeyOf <String> >(250); var tree = new BPlusTree <ComparableKeyOf <String>, ValueOf <String> >(nodeStorage, new MemoryValueStorage <ValueOf <String> >()); foreach (var pair in pairs) { tree.Set(pair.Key.ToString(CultureInfo.InvariantCulture), pair.Value.ToString(CultureInfo.InvariantCulture)); } var removedPairs = new Dictionary <int, int>(); foreach (var pair in pairs) { if (r.NextDouble() > 0.5) { removedPairs.Add(pair.Key, pair.Value); tree.Remove(pair.Key.ToString(CultureInfo.InvariantCulture)); } } foreach (var pair in pairs) { string value = tree.Get(pair.Key.ToString(CultureInfo.InvariantCulture)); if (removedPairs.ContainsKey(pair.Key)) { Assert.IsNull(value); } else { Assert.AreEqual(pair.Value.ToString(CultureInfo.InvariantCulture), value); } } }