Exemple #1
0
        private static IEnumerable <ITestCaseData> MultiDictionaryComparationCases()
        {
            MultiDictionary <int, string> first = new ArrayListMultiDictionary <int, string>();

            first.Put(1, "A");
            first.Put(2, "B");
            first.PutAll(3, Lists.AsList("A", "B", "C"));

            MultiDictionary <int, string> second = new ArrayListMultiDictionary <int, string>();

            second.Put(1, "A");
            second.Put(2, "B");
            second.PutAll(3, Lists.AsList("A", "B", "C"));

            yield return(new TestCaseData(first, second)
                         .SetName("Should return that multi dictionaries are equals")
                         .Returns(true));

            first = new HashSetMultiDictionary <int, string>();
            first.Put(1, "A");
            first.Put(2, "B");
            first.PutAll(3, Lists.AsList("A", "B", "C"));

            second = new ArrayListMultiDictionary <int, string>();
            second.Put(1, "A");
            second.Put(2, "B");
            second.PutAll(3, Lists.AsList("A", "B", "C"));

            yield return(new TestCaseData(first, second)
                         .SetName("Should return that different implementations of multi dictionaries with same elements are equals")
                         .Returns(true));

            first = new ArrayListMultiDictionary <int, string>();
            first.Put(1, "A");
            first.Put(2, "B");
            first.PutAll(3, Lists.AsList("A", "B", "C"));

            second = new ArrayListMultiDictionary <int, string>();
            second.Put(1, "A");
            second.Put(2, "B");
            second.PutAll(3, Lists.AsList("B", "C"));

            yield return(new TestCaseData(first, second)
                         .SetName("Should return that multi dictionaries with different elements are not equals")
                         .Returns(false));
        }
        public void ShouldAllowDuplicatedValuesForKey()
        {
            // given
            var multiDictionary = new ArrayListMultiDictionary<int, string>();

            // when
            multiDictionary.Put(1, "A");
            multiDictionary.Put(1, "A");
            multiDictionary.PutAll(2, Lists.AsList("A", "B", "B"));

            // then
            Check.That(multiDictionary.Count).IsEqualTo(5);
            Check.That(multiDictionary.Values).ContainsExactly("A", "A", "A", "B", "B");
            Check.That(multiDictionary[1]).ContainsExactly("A", "A");
            Check.That(multiDictionary[1]).IsInstanceOf<List<string>>();
            Check.That(multiDictionary[2]).ContainsExactly("A", "B", "B");
            Check.That(multiDictionary[2]).IsInstanceOf<List<string>>();
        }
        public void ShouldConvertMultiDictionaryToDictionaryWithArrayLists()
        {
            // given
            var multiDictionary = new ArrayListMultiDictionary<int, string>();
            multiDictionary.Put(1, "A");
            multiDictionary.Put(2, "B");
            multiDictionary.PutAll(3, Lists.AsList("A", "B", "C", "C"));

            // when
            var dictionary = multiDictionary.ToDictionary();

            // then
            Check.That(dictionary[1]).IsInstanceOf<List<string>>()
                .And.ContainsExactly("A");
            Check.That(dictionary[2]).IsInstanceOf<List<string>>()
                .And.ContainsExactly("B");
            Check.That(dictionary[3]).IsInstanceOf<List<string>>()
                .And.ContainsExactly("A", "B", "C", "C");
        }
        /// <summary>
        /// Converts collection to MultiDictionary
        /// </summary>
        /// <typeparam name="T">Type of collection item</typeparam>
        /// <typeparam name="TKey">Type of dictionary key</typeparam>
        /// <typeparam name="TValue">Type of dictionary value</typeparam>
        /// <param name="source">collection</param>
        /// <param name="keyConverter">Key converter</param>
        /// <param name="valueConverter">Value converter</param>
        /// <returns>MultiDictionary</returns>
        public static MultiDictionary <TKey, TValue> ToMultiDictionary <T, TKey, TValue>(this IEnumerable <T> source,
                                                                                         Converter <T, TKey> keyConverter, Converter <T, TValue> valueConverter)
        {
            Preconditions.IsNotNull(source, () => new ArgumentNullException("source"));
            var result = new ArrayListMultiDictionary <TKey, TValue>();

            foreach (var element in source)
            {
                var key   = keyConverter(element);
                var value = valueConverter(element);
                result.Put(key, value);
            }
            return(result);
        }
Exemple #5
0
        public void ShouldConvertArrayListMultiDictionaryToImmutable()
        {
            // given
            var multiDictionary = new ArrayListMultiDictionary <int, string>();

            multiDictionary.Put(1, "A");
            multiDictionary.PutAll(2, Lists.AsList("A", "B", "B"));
            multiDictionary.PutAll(3, Lists.AsList("X", "Y"));

            // when
            var immutableMultiDictionary = multiDictionary.ToImmutableMultiDictionary();

            // then
            Check.That(immutableMultiDictionary).IsInstanceOf <ImmutableListMultiDictionary <int, string> >();
            Check.That(immutableMultiDictionary).IsEqualTo(ImmutableListMultiDictionary <int, string> .Of(
                                                               1, "A",
                                                               2, "A", 2, "B", 2, "B",
                                                               3, "X", 3, "Y"));
        }