Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 29 additions & 3 deletions MultiKeyMap.Tests/ConcreteMultiKeyMapTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ public ConcreteMultiKeyMapTests()
return new MultiKeyMapBaseHelper<T, K, V>(() => MultiKeyMaps.CreateMultiKeyDictionary<T, K, V>(), k1, k2, v1, v2);
}

public Func<IMultiKeyMap<T,K,V>> Supplier<T, K, V>(
public Func<IMultiKeyMap<T, K, V>> Supplier<T, K, V>(
MultiKeyMaps.MultiKeyCreationStrategy strategy = OptimizedForNonPositionalSearch,
ComparersStrategy compStrategy = BothNull) where K : class, IEnumerable<T>
{
Expand All @@ -76,7 +76,7 @@ public Func<IMultiKeyMap<T,K,V>> Supplier<T, K, V>(
case BothDefault:
return () => MultiKeyMaps.CreateMultiKeyDictionary<T, K, V>(strategy);
case StructuralFullKeyOnly:
return () => MultiKeyMaps.CreateMultiKeyDictionary<T, K, V>(EqualityComparer<T>.Default,
return () => MultiKeyMaps.CreateMultiKeyDictionary<T, K, V>(EqualityComparer<T>.Default,
new EnumerableEqualityComparer<T, K>(EqualityComparer<T>.Default), strategy);
case StructuralBoth:
return () => MultiKeyMaps.CreateMultiKeyDictionary<T, K, V>(EqualityComparer<T>.Default,
Expand Down Expand Up @@ -113,7 +113,7 @@ public override int GetHashCode(K col)

public void InitAll(MultiKeyMaps.MultiKeyCreationStrategy strategy, ComparersStrategy compStrategy)
{
helper1.Init(Supplier<int,int[],object>(strategy, compStrategy));
helper1.Init(Supplier<int, int[], object>(strategy, compStrategy));
helper2.Init(Supplier<string, string[], long>(strategy, compStrategy));
helper3.Init(Supplier<Class1<string>, List<Class1<string>>, string>(strategy, compStrategy));
helper4.Init(Supplier<ValueTuple<double>, List<ValueTuple<double>>, bool>(strategy, compStrategy));
Expand Down Expand Up @@ -475,5 +475,31 @@ public void SerializationTest(MultiKeyMaps.MultiKeyCreationStrategy strategy, Co
myObj2.ShouldAllBeEquivalentTo(myObj1);

}

[TestMethod]
public void RemoveByFullKeyTests()
{
IMultiKeyMap<string, IEnumerable<string>, string> dict = MultiKeyMaps.CreateMultiKeyDictionary<string, IEnumerable<string>, 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<string> values;
Assert.IsTrue(dict.TryGetValuesByPartialKey(new[] { "first" }, out values));
Assert.AreEqual(3, values.Count());

IEnumerable<IEnumerable<string>> 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());
}
}
}
4 changes: 2 additions & 2 deletions MultiKeyMap/Base/NonPositionalBaseMultiKeyMap.cs
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,8 @@ protected virtual ILiteSetMultimap<TSubKey, TKey> CreateLiteSetMultimap<TSubKey,
IEqualityComparer<TSubKey> subKeyComparer, IEqualityComparer<TKey> fullKeyComparer)
where TKey : class, IEnumerable<TSubKey>
{
//return CreateSupportDictionary<TSubKey, ISet<TKey>>(subKeyComparer).ToSetMultimap(fullKeyComparer);
return CreateSupportDictionary<TSubKey, ISet<TKey>>(subKeyComparer).ToSetMultimap(EqualityComparerExtensions.ReferenceEqualityComparerOf<TKey>());
return CreateSupportDictionary<TSubKey, ISet<TKey>>(subKeyComparer).ToSetMultimap(fullKeyComparer);
//return CreateSupportDictionary<TSubKey, ISet<TKey>>(subKeyComparer).ToSetMultimap(EqualityComparerExtensions.ReferenceEqualityComparerOf<TKey>());
}

#region non-positional TryGetsByPartialKey
Expand Down