コード例 #1
0
        /// <summary>
        /// Copies (adds) all KeyValuePair(-s) from the other IMultiKeyMap into this object.
        /// NOTE: The keys and values are not cloned, but just simply added as-is.
        /// </summary>
        /// <typeparam name="T">The type of sub-keys to query by and compose the full keys of</typeparam>
        /// <typeparam name="K">The type of the composite keys comprising some enumerable of sub-keys of type T</typeparam>
        /// <typeparam name="V">The type of values in the dictionary</typeparam>
        /// <param name="me">this object</param>
        /// <param name="other">the source of the data to copy from</param>
        /// <returns></returns>
        public static IMultiKeyMap <T, K, V> CopyFrom <T, K, V>(this IMultiKeyMap <T, K, V> me, IDictionary <K, V> other) where K : class, IEnumerable <T>
        {
            other = other ?? throw new ArgumentNullException();

            foreach (var entry in other)
            {
                me.Add(entry.Key, entry.Value);
            }

            return(me);
        }
コード例 #2
0
        //public void AssertAddWithPositions()
        //{
        //    K k = k1;
        //    V v = v1;
        //    KeyValuePair<K, V> expectedEntry = new KeyValuePair<K, V>(k, v);
        //    KeyValuePair<K, V> expectedEntry2 = new KeyValuePair<K, V>(k2, v2);

        //    multiDict.Add(k, v, new bool[] { true, false });
        //    multiDict.Should().NotBeEmpty().And.ContainKey(k).And.ContainValue(v).And.Contain(expectedEntry).And.HaveCount(1);

        //    multiDict.Add(k2, v2, new bool[] { false, true, true });
        //    multiDict.Should().NotBeEmpty().And.ContainKey(k2).And.ContainValue(v2).And.Contain(expectedEntry2).And.HaveCount(2);

        //    bool result = multiDict.TryGetFullKeysByPartialKey(k, out var actualKeys);
        //    result.Should().BeTrue();
        //    actualKeys.Should().NotBeNullOrEmpty().And.HaveCount(1).And.HaveElementAt(0, k);

        //    result = multiDict.TryGetValuesByPartialKey(k, out var actualValues);
        //    result.Should().BeTrue();
        //    actualValues.Should().NotBeNullOrEmpty().And.HaveCount(1).And.HaveElementAt(0, v);

        //    result = multiDict.TryGetEntriesByPartialKey(k, out var actualEntries);
        //    result.Should().BeTrue();
        //    actualEntries.Should().NotBeNullOrEmpty().And.HaveCount(1).And.HaveElementAt(0, expectedEntry);

        //    result = multiDict.TryGetFullKeysByPartialKey(k.ToList(), new int[] { 0, 1, -1 }, out var actualKeys2);
        //    result.Should().BeTrue();
        //    actualKeys.Should().NotBeNullOrEmpty().And.HaveCount(1).And.HaveElementAt(0, k);

        //    result = multiDict.TryGetEntriesByPartialKey(k.ToList(), new int[] { 0, 1, -1 }, out var actualEntries2);
        //    result.Should().BeTrue();
        //    actualEntries2.Should().NotBeNullOrEmpty().And.HaveCount(1).And.HaveElementAt(0, expectedEntry);

        //    result = multiDict.TryGetValuesByPartialKey(k.ToList(), new int[] { 0, 1, -1}, out var actualValues2);
        //    result.Should().BeTrue();
        //    actualValues2.Should().NotBeNullOrEmpty().And.HaveCount(1).And.HaveElementAt(0, v);

        //    result = multiDict.TryGetFullKeysByPartialKey(k2.Skip(1).ToList(), new int[] { 1, 2, -1 }, out var actualKeys3);
        //    result.Should().BeTrue();
        //    actualKeys.Should().NotBeNullOrEmpty().And.HaveCount(count => count >= 1);

        //    //TODO: add more tests here!!!
        //}

        public void AssertAdd()
        {
            K k = k1;
            V v = v1;
            KeyValuePair <K, V> expectedEntry = new KeyValuePair <K, V>(k, v);

            multiDict.Add(k, v);
            multiDict.Should().NotBeEmpty().And.ContainKey(k).And.ContainValue(v).And.Contain(expectedEntry).And.HaveCount(1);

            bool result = multiDict.TryGetFullKeysByPartialKey(k, out var actualKeys);

            result.Should().BeTrue();
            actualKeys.Should().NotBeNullOrEmpty().And.HaveCount(1).And.HaveElementAt(0, k);

            result = multiDict.TryGetValuesByPartialKey(k, out var actualValues);
            result.Should().BeTrue();
            actualValues.Should().NotBeNullOrEmpty().And.HaveCount(1).And.HaveElementAt(0, v);

            result = multiDict.TryGetEntriesByPartialKey(k, out var actualEntries);
            result.Should().BeTrue();
            actualEntries.Should().NotBeNullOrEmpty().And.HaveCount(1).And.HaveElementAt(0, expectedEntry);
        }