/// <summary> /// Checks all properties of the specified tree for correctness. /// </summary> /// <typeparam name="TKey">Type of keys.</typeparam> /// <typeparam name="TValue">Type of values.</typeparam> /// <param name="tree">Specified tree.</param> /// <param name="elements">Expected elements in the tree.</param> /// <param name="isMulti">True if testing the multi-dictionary scenario.</param> private static void CheckTree <TKey, TValue>(LeftLeaningRedBlackTree <TKey, TValue> tree, List <KeyValuePair <TKey, TValue> > elements, bool isMulti) where TKey : IComparable { // Check count and keys Assert.AreEqual(elements.Count, tree.Count); List <TKey> sortedKeys = elements.Select(e => e.Key).Distinct().OrderBy(k => k).ToList(); List <TKey> binaryTreeKeys = tree.GetKeys().ToList(); Assert.AreEqual(sortedKeys.Count, binaryTreeKeys.Count); // Check key values for (int i = 0; i < sortedKeys.Count; i++) { Assert.AreEqual(sortedKeys[i], binaryTreeKeys[i]); List <TValue> sortedKeyValues = elements.Where(e => 0 == e.Key.CompareTo(sortedKeys[i])).Select(e => e.Value).OrderBy(v => v).ToList(); List <TValue> binaryTreeKeyValues = tree.GetValuesForKey(sortedKeys[i]).ToList(); Assert.AreEqual(sortedKeyValues.Count, binaryTreeKeyValues.Count); for (int j = 0; j < sortedKeyValues.Count; j++) { Assert.AreEqual(sortedKeyValues[j], binaryTreeKeyValues[j]); } if (!isMulti) { Assert.AreEqual(tree.GetValueForKey(sortedKeys[i]), binaryTreeKeyValues.Single()); } } // Check values List <TValue> sortedValues = sortedKeys.SelectMany(k => elements.Where(e => 0 == e.Key.CompareTo(k)).Select(e => e.Value).OrderBy(v => v)).ToList(); List <TValue> binaryTreeValues = tree.GetValuesForAllKeys().ToList(); Assert.AreEqual(sortedValues.Count, binaryTreeValues.Count); for (int i = 0; i < sortedValues.Count; i++) { Assert.AreEqual(sortedValues[i], binaryTreeValues[i]); } // Check additional properties if (0 < elements.Count) { Assert.AreEqual(sortedKeys[0], tree.MinimumKey); Assert.AreEqual(sortedKeys[sortedKeys.Count - 1], tree.MaximumKey); Assert.AreEqual(sortedValues[0], tree.MinimumValue); Assert.AreEqual(sortedValues[sortedValues.Count - 1], tree.MaximumValue); } }
public void GetValueForKeyMultiple() { LeftLeaningRedBlackTree <int, int> binaryTree = new LeftLeaningRedBlackTree <int, int>(IntComparison, IntComparison); binaryTree.GetValueForKey(-1); }