Ejemplo n.º 1
0
        private IMultiKeyMap <T, K, V> AddHelper <T, K, V>(T t, K k, V v,
                                                           MultiKeyMaps.MultiKeyCreationStrategy strategy) where K : class, IEnumerable <T>
        {
            KeyValuePair <K, V> expectedEntry = new KeyValuePair <K, V>(k, v);

            var multiDict = MultiKeyMaps.CreateMultiKeyDictionary <T, K, V>(strategy);

            multiDict.Should().NotBeNull().And.BeEmpty().And.BeAssignableTo(typeof(IMultiKeyMap <T, K, V>))
            .And.BeAssignableTo(typeof(IDictionary <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);

            return(multiDict);
        }
Ejemplo n.º 2
0
 private void DictionaryBasedAddHelper <T, K, V>(
     MultiKeyMaps.MultiKeyCreationStrategy strategy, K[] ks, V[] vs,
     IEqualityComparer <T> subKeyComparer = null, IEqualityComparer <K> fullKeyComparer = null) where K : class, IEnumerable <T>
 {
     subKeyComparer  = subKeyComparer ?? EqualityComparer <T> .Default;
     fullKeyComparer = fullKeyComparer ?? EqualityComparer <K> .Default;
     AddHelper(() => MultiKeyMaps.CreateMultiKeyDictionary <T, K, V>(subKeyComparer, fullKeyComparer, strategy), ks, vs, subKeyComparer, fullKeyComparer);
 }
        private void CopyFromDictionaryToEmptyHelper <T, K, V>(K[] keys, V[] values) where K : class, IEnumerable <T>
        {
            var source = TestHelpers.CreateDictionary <T, K, V>(keys, values);
            var target = MultiKeyMaps.CreateMultiKeyDictionary <T, K, V>();

            var result = MultiKeyMapCopyExtensions.CopyFrom(target, source);

            result.Should().NotBeNull().And.BeSameAs(target).And.Equal(source);
        }
Ejemplo n.º 4
0
        private IMultiKeyMap <T, K, V> CreatesEmptyInstanceHelper <T, K, V>(T t, K k, V v,
                                                                            MultiKeyMaps.MultiKeyCreationStrategy strategy) where K : class, IEnumerable <T>
        {
            var multiDict = MultiKeyMaps.CreateMultiKeyDictionary <T, K, V>(strategy);

            Assert.IsNotNull(multiDict);
            Assert.IsInstanceOfType(multiDict, typeof(IMultiKeyMap <T, K, V>));
            Assert.IsInstanceOfType(multiDict, typeof(IDictionary <K, V>));
            Assert.IsTrue(multiDict.Count == 0);
            return(multiDict);
        }
Ejemplo n.º 5
0
        private IMultiKeyMap <T, K, V> CreateMultiKeyDictionaryWithComparersHelper <T, K, V>(
            IEqualityComparer <T> subKeyComparer, IEqualityComparer <K> fullKeyComparer,
            T t, K k, V v,
            MultiKeyMaps.MultiKeyCreationStrategy strategy) where K : class, IEnumerable <T>
        {
            var multiDict = MultiKeyMaps.CreateMultiKeyDictionary <T, K, V>(subKeyComparer, fullKeyComparer, strategy);

            Assert.IsNotNull(multiDict);
            Assert.IsInstanceOfType(multiDict, typeof(IMultiKeyMap <T, K, V>));
            Assert.IsInstanceOfType(multiDict, typeof(IDictionary <K, V>));
            Assert.IsTrue(multiDict.Count == 0);
            return(multiDict);
        }
        public void SerializationTest(MultiKeyMaps.MultiKeyCreationStrategy strategy, ComparersStrategy compStrategy)
        {
            InitAll(strategy, compStrategy);

            var myObj1 = MultiKeyMaps.CreateMultiKeyDictionary <int, int[], string>();

            myObj1.Add(new int[] { 1, 2 }, "hi");
            myObj1.Add(new int[] { 3, 4 }, "bye");

            byte[] serialized = SerializeHelper(myObj1);
            var    myObj2     = DeserializeHelper <IMultiKeyMap <int, int[], string> >(serialized);

            myObj2.ShouldAllBeEquivalentTo(myObj1);
        }
Ejemplo n.º 7
0
        Setup(MultiKeyMaps.MultiKeyCreationStrategy strategy, bool subKeyEqualityByRef, bool keyEqualityByRef)
        {
            var subKeyComparer = subKeyEqualityByRef.SubKeyComparerFor <Employee <int> >();
            var keyComparer    = keyEqualityByRef.KeyComparerFor <Employee <int> >();

            Func <int, Employee <int> > subKeyConverter = x => new Employee <int>(String.Join("", Enumerable.Range(x, 10)), x);
            Func <int, string>          valueConverter  = x => x.ToString();

            var tuple = InitData(subKeyComparer, keyComparer, strategy, subKeyConverter, valueConverter, SearchCount, RecordCount, KeySize);

            var map = MultiKeyMaps.CreateMultiKeyDictionary <Employee <int>, IEnumerable <Employee <int> >, string>(subKeyComparer, keyComparer, strategy);

            map.CopyFrom(tuple.dict);
            return(map, tuple.dict, tuple.keys, tuple.partKeys, tuple.positivePositions, tuple.positions);
        }
Ejemplo n.º 8
0
        private void CreateMultiKeyDictionaryWithComparersEmptyHelper <T, K, V>(
            IEqualityComparer <T> subKeyComparer, IEqualityComparer <K> fullKeyComparer,
            MultiKeyMaps.MultiKeyCreationStrategy strategy) where K : class, IEnumerable <T>
        {
            var multiDict = MultiKeyMaps.CreateMultiKeyDictionary <T, K, V>(subKeyComparer, fullKeyComparer, strategy);

            multiDict.Should().NotBeNull().And.BeEmpty().And.BeAssignableTo(typeof(IMultiKeyMap <T, K, V>))
            .And.BeAssignableTo(typeof(IDictionary <K, V>));

            multiDict.GetType().Should().BeDecoratedWith <SerializableAttribute>();

            Action act = () => MultiKeyMaps.CreateMultiKeyDictionary <T, K, V>(null, fullKeyComparer, strategy);

            act.ShouldThrow <ArgumentNullException>().Where(e => e.ParamName.Equals("subKeyComparer"));

            act = () => MultiKeyMaps.CreateMultiKeyDictionary <T, K, V>(subKeyComparer, null, strategy);
            act.ShouldThrow <ArgumentNullException>().Where(e => e.ParamName.Equals("fullKeyComparer"));
        }
        public Func <IMultiKeyMap <T, K, V> > Supplier <T, K, V>(
            MultiKeyMaps.MultiKeyCreationStrategy strategy = OptimizedForNonPositionalSearch,
            ComparersStrategy compStrategy = BothNull) where K : class, IEnumerable <T>
        {
            switch (compStrategy)
            {
            case BothNull:
            case BothDefault:
                return(() => MultiKeyMaps.CreateMultiKeyDictionary <T, K, V>(strategy));

            case StructuralFullKeyOnly:
                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,
                                                                             new EnumerableEqualityComparer <T, K>(EqualityComparer <T> .Default), strategy));

            default:
                throw new ArgumentOutOfRangeException("compStrategy");
            }
        }
 private MultiKeyMapBaseHelper <T, K, V> InitHelper <T, K, V>(K k1, K k2, V v1 = default(V), V v2 = default(V)) where K : class, IEnumerable <T>
 {
     return(new MultiKeyMapBaseHelper <T, K, V>(() => MultiKeyMaps.CreateMultiKeyDictionary <T, K, V>(), k1, k2, v1, v2));
 }
Ejemplo n.º 11
0
 public static IMultiKeyMap <T, K, V> CreateMultiKeyMap <T, K, V>(K[] keys, V[] values) where K : class, IEnumerable <T>
 {
     return(CreateMultiKeyMap <T, K, V>(keys, values, () => MultiKeyMaps.CreateMultiKeyDictionary <T, K, V>()));
 }