/// <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); }
//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); }