diff --git a/MultiKeyMap.Tests/ConcreteMultiKeyMapTests.cs b/MultiKeyMap.Tests/ConcreteMultiKeyMapTests.cs index 504b569..7a7dc3e 100644 --- a/MultiKeyMap.Tests/ConcreteMultiKeyMapTests.cs +++ b/MultiKeyMap.Tests/ConcreteMultiKeyMapTests.cs @@ -66,7 +66,7 @@ public ConcreteMultiKeyMapTests() return new MultiKeyMapBaseHelper(() => MultiKeyMaps.CreateMultiKeyDictionary(), k1, k2, v1, v2); } - public Func> Supplier( + public Func> Supplier( MultiKeyMaps.MultiKeyCreationStrategy strategy = OptimizedForNonPositionalSearch, ComparersStrategy compStrategy = BothNull) where K : class, IEnumerable { @@ -76,7 +76,7 @@ public Func> Supplier( case BothDefault: return () => MultiKeyMaps.CreateMultiKeyDictionary(strategy); case StructuralFullKeyOnly: - return () => MultiKeyMaps.CreateMultiKeyDictionary(EqualityComparer.Default, + return () => MultiKeyMaps.CreateMultiKeyDictionary(EqualityComparer.Default, new EnumerableEqualityComparer(EqualityComparer.Default), strategy); case StructuralBoth: return () => MultiKeyMaps.CreateMultiKeyDictionary(EqualityComparer.Default, @@ -113,7 +113,7 @@ public override int GetHashCode(K col) public void InitAll(MultiKeyMaps.MultiKeyCreationStrategy strategy, ComparersStrategy compStrategy) { - helper1.Init(Supplier(strategy, compStrategy)); + helper1.Init(Supplier(strategy, compStrategy)); helper2.Init(Supplier(strategy, compStrategy)); helper3.Init(Supplier, List>, string>(strategy, compStrategy)); helper4.Init(Supplier, List>, bool>(strategy, compStrategy)); @@ -475,5 +475,31 @@ public void SerializationTest(MultiKeyMaps.MultiKeyCreationStrategy strategy, Co myObj2.ShouldAllBeEquivalentTo(myObj1); } + + [TestMethod] + public void RemoveByFullKeyTests() + { + IMultiKeyMap, string> dict = MultiKeyMaps.CreateMultiKeyDictionary, string>(); + dict.Add(new[] { "first", "crazy", "1st" }, "one"); + dict.Add(new[] { "first", "other" }, "one again"); + dict.Add(new[] { "first", "something else" }, "one a third time"); + + IEnumerable values; + Assert.IsTrue(dict.TryGetValuesByPartialKey(new[] { "first" }, out values)); + Assert.AreEqual(3, values.Count()); + + IEnumerable> fullKeys = new[] { new[] { "first", "crazy", "1st" } }; + bool removedAny = false; + foreach (var fullKey in fullKeys) + { + removedAny |= dict.Remove(fullKey); + } + + Assert.IsTrue(removedAny); + + var tryGetValuesByPartialKey = dict.TryGetValuesByPartialKey(new[] { "first" }, out values); // Was failing here even though the dictionary still contains two values that should match this partial key + Assert.IsTrue(tryGetValuesByPartialKey); + Assert.AreEqual(2, values.Count()); + } } } diff --git a/MultiKeyMap/Base/NonPositionalBaseMultiKeyMap.cs b/MultiKeyMap/Base/NonPositionalBaseMultiKeyMap.cs index 1d8d226..0005c43 100644 --- a/MultiKeyMap/Base/NonPositionalBaseMultiKeyMap.cs +++ b/MultiKeyMap/Base/NonPositionalBaseMultiKeyMap.cs @@ -37,8 +37,8 @@ protected virtual ILiteSetMultimap CreateLiteSetMultimap subKeyComparer, IEqualityComparer fullKeyComparer) where TKey : class, IEnumerable { - //return CreateSupportDictionary>(subKeyComparer).ToSetMultimap(fullKeyComparer); - return CreateSupportDictionary>(subKeyComparer).ToSetMultimap(EqualityComparerExtensions.ReferenceEqualityComparerOf()); + return CreateSupportDictionary>(subKeyComparer).ToSetMultimap(fullKeyComparer); + //return CreateSupportDictionary>(subKeyComparer).ToSetMultimap(EqualityComparerExtensions.ReferenceEqualityComparerOf()); } #region non-positional TryGetsByPartialKey