public void TryGetFullKeysByPartialKeyTest(MultiKeyMaps.MultiKeyCreationStrategy strategy, bool subKeyEqualityByRef, bool keyEqualityByRef) { Init(strategy, subKeyEqualityByRef, keyEqualityByRef); var subKeyComparer = subKeyEqualityByRef.SubKeyComparerFor <Employee <int> >(); var keyComparer = keyEqualityByRef.KeyComparerFor <Employee <int> >(); foreach (var key in searchKeys) { bool result = map.TryGetFullKeysByPartialKey(key, out var value); result.Should().Be(true); value.Should().NotBeNullOrEmpty().And.HaveCount(1).And.HaveElementAt(0, key); } foreach (var partKey in partKeys) { bool result = map.TryGetFullKeysByPartialKey(partKey, out var value); result.Should().Be(true); value.Should().NotBeNullOrEmpty() .And.HaveCount(x => x > 0) .And.NotContainNulls() .And.OnlyHaveUniqueItems() .And.OnlyContain(key => map.Keys.Contains(key, keyComparer)) .And.OnlyContain(key => partKey.Intersect(key, subKeyComparer).Count() == partKey.Count()); } }
public void AssertTryGetFullKeysByPartialKey(IEnumerable <T> subKeys, IEnumerable <int> positions, ISet <K> expectedOut) { IEnumerable <(int position, T subKey)> partialKey = subKeys.Zip(positions, (key, pos) => (pos, key)); bool actualReturn = queryMap1.TryGetFullKeysByPartialKey(partialKey, out var actualOut); actualReturn.Should().Be(expectedOut != default(ISet <K>)); actualOut.ShouldAllBeEquivalentTo(expectedOut); }
//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); }