Exemplo n.º 1
0
        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);
        }