Exemplo n.º 1
0
        /// <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);
            }
        }
Exemplo n.º 2
0
        public void GetValueForKeyMultiple()
        {
            LeftLeaningRedBlackTree <int, int> binaryTree = new LeftLeaningRedBlackTree <int, int>(IntComparison, IntComparison);

            binaryTree.GetValueForKey(-1);
        }