Пример #1
0
        public void ContainsValue_ShouldBehaveTheSameWay()
        {
            // Arrange
            Dictionary <string, int> dictionary = SampleDictionary.ToDictionary(kv => kv.Value, kv => kv.Key);
            Fictionary <string, int, GenericEqualityComparer <string> > fictionary =
                SampleDictionary.ToFictionary(kv => kv.Value, kv => kv.Key);
            const int bound     = 100;
            int       hitCount  = 0;
            int       missCount = 0;

            // Assert
            for (int i = 0; i != bound; ++i)
            {
                bool dictionaryContainsValue = dictionary.ContainsValue(i);
                bool fictionaryContainsValue = fictionary.ContainsValue(i);

                Assert.Equal(dictionaryContainsValue, fictionaryContainsValue);

                hitCount  += Convert.ToInt32(fictionaryContainsValue);
                missCount += Convert.ToInt32(!fictionaryContainsValue);
            }

            Assert.True(hitCount > 0);
            Assert.True(missCount > 0);
        }
Пример #2
0
        public void Dispose_ShouldClear()
        {
            // Arrange
            Dictionary <int, string> dictionary = new(SampleDictionary.Reverse());

            Fictionary <int, string, GenericEqualityComparer <int> > fictionary = DefaultFictionary <int, string> .Create();

            foreach (KeyValuePair <int, string> item in SampleItems)
            {
                fictionary.TryAdd(item.Key, item.Value);
                fictionary.TryAdd(-item.Key, item.Key.ToString(CultureInfo.InvariantCulture));
            }

            // Act
            fictionary.Dispose();
            Assert.Empty(fictionary);

            foreach (KeyValuePair <int, string> kv in SampleDictionary.ToList().Mix())
            {
                fictionary.Add(kv.Key, kv.Value);
            }

            // Assert
            Assert.Empty(dictionary.Except(fictionary));
            Assert.Empty(fictionary.Except(dictionary));
        }
Пример #3
0
        public void TryGetValue_ShouldBehaveTheSameWay()
        {
            // Arrange
            Dictionary <int, string> dictionary = new(SampleDictionary.Reverse());
            Fictionary <int, string, GenericEqualityComparer <int> > fictionary =
                SampleDictionary.ToList().Mix().ToFictionary();

            // Act
            foreach (KeyValuePair <int, string> kv in SampleDictionary)
            {
                {
                    bool foundInDictionary = dictionary.TryGetValue(kv.Key, out string?dictionaryValue);
                    bool foundInFictionary = fictionary.TryGetValue(kv.Key, out string?fictionaryValue);

                    Assert.Equal(foundInDictionary, foundInFictionary);
                    Assert.Equal(dictionaryValue, fictionaryValue);
                }
                {
                    bool foundInDictionary = dictionary.TryGetValue(-kv.Key, out string?dictionaryValue);
                    bool foundInFictionary = fictionary.TryGetValue(-kv.Key, out string?fictionaryValue);

                    Assert.Equal(foundInDictionary, foundInFictionary);
                    Assert.Equal(dictionaryValue, fictionaryValue);
                }
            }
        }
Пример #4
0
        public void Indexer_ShouldBehaveTheSameWay()
        {
            // Arrange
            Dictionary <string, double> dictionary = new(StringComparer.Ordinal);

            using Fictionary <string, double, StringComparer> fictionary =
                      Fictionary <string, double> .Create(StringComparer.Ordinal);

            int count = SampleItems.Length;

            for (int i = 0; i != count; ++i)
            {
                double value = Geometric(i);
                string key   = SampleItems[i].Value;
                dictionary[key] = value;
                fictionary[key] = value;
            }

            // Act
            for (int i = 0; i != count; ++i)
            {
                string key             = SampleItems[i].Value;
                double dictionaryValue = dictionary[key];
                double fictionaryValue = fictionary[key];
                Assert.Equal(dictionaryValue, fictionaryValue);
            }
        }
Пример #5
0
        private static void Main()
        {
            IEnumerable <FileInfo> currentDirFiles =
                new DirectoryInfo(Environment.CurrentDirectory).EnumerateFiles();

            using Fictionary <string, FileInfo, OrdinalStringComparer> fictionary = currentDirFiles
                                                                                    .ToFictionary(fi => fi.Name, new OrdinalStringComparer());

            IEnumerable <FileInfo> userDirFiles =
                new DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)).EnumerateFiles();

            foreach (FileInfo fi in userDirFiles)
            {
                fictionary.TryAdd(fi.Name, fi);
            }

            foreach (KeyValuePair <string, FileInfo> kv in fictionary)
            {
                Console.WriteLine($"{kv.Key}\t{kv.Value.Directory?.FullName}");
            }

            Console.WriteLine();
            if (fictionary.TryGetValue(".gitconfig", out FileInfo? value))
            {
                Console.WriteLine($"{value.Name}: {value.Length} bytes");
            }
        }
Пример #6
0
        public void Values_ShouldBehaveTheSameWay()
        {
            // Arrange
            Dictionary <int, string> dictionary = new(SampleDictionary.Reverse());
            Fictionary <int, string, GenericEqualityComparer <int> > fictionary =
                SampleDictionary.ToList().Mix().ToFictionary();

            // Assert
            Assert.Empty(dictionary.Values.Except(fictionary.Values));
            Assert.Empty(fictionary.Values.Except(dictionary.Values));
        }
Пример #7
0
        public void Create_WithDictionary()
        {
            // Arrange
            GenericEqualityComparer <int> keyComparer = default;

            // Act
            Dictionary <int, string> dictionary = new(SampleDictionary, Int32EqualityComparer.Default);
            Fictionary <int, string, GenericEqualityComparer <int> > fictionary =
                SampleDictionary.ToFictionary(keyComparer);

            // Assert
            Assert.Empty(dictionary.Except(fictionary));
            Assert.Empty(fictionary.Except(dictionary));
        }
Пример #8
0
        public void CopyTo_ShouldBehaveTheSameWay()
        {
            // Arrange
            Dictionary <int, string> dictionary = new(SampleDictionary);
            Fictionary <int, string, GenericEqualityComparer <int> > fictionary = SampleDictionary.ToFictionary();

            var dictionaryArray = new KeyValuePair <int, string> [dictionary.Count];
            var fictionaryArray = new KeyValuePair <int, string> [fictionary.Count];

            // Act
            ((ICollection <KeyValuePair <int, string> >)dictionary).CopyTo(dictionaryArray, 0);
            ((ICollection <KeyValuePair <int, string> >)fictionary).CopyTo(fictionaryArray, 0);

            // Assert
            Assert.Empty(dictionaryArray.Except(fictionaryArray));
            Assert.Empty(fictionaryArray.Except(dictionaryArray));
        }
Пример #9
0
        public void Remove_ShouldBehaveTheSameWay()
        {
            // Arrange
            Dictionary <int, string> dictionary = new(SampleDictionary, Int32EqualityComparer.Default);
            Fictionary <int, string, GenericEqualityComparer <int> > fictionary = SampleDictionary.ToFictionary();
            int count = SampleItems.Length;

            // Act
            for (int i = 0; i != count; ++i)
            {
                int  key = SampleItems[i].Key * (i % 2 == 0 ? 1 : -1);
                bool removedFromDictionary = dictionary.Remove(key);
                bool removedFromFictionary = fictionary.Remove(key);

                Assert.Equal(removedFromDictionary, removedFromFictionary);
                Assert.False(fictionary.ContainsKey(key));
                Assert.False(fictionary.TryGetValue(key, out _));
            }
        }
Пример #10
0
        public void Clear()
        {
            // Arrange
            Fictionary <int, string, GenericEqualityComparer <int> > fictionary = SampleDictionary.ToFictionary();

            foreach (KeyValuePair <int, string> kv in SampleDictionary)
            {
                Assert.True(fictionary.ContainsKey(kv.Key));
            }

            // Act
            fictionary.Clear();

            // Assert
            Assert.Empty(fictionary);
            foreach (KeyValuePair <int, string> kv in SampleDictionary)
            {
                Assert.False(fictionary.ContainsKey(kv.Key));
            }
        }
Пример #11
0
        public void RecycledFictionaries_ShouldBehaveCorrectly()
        {
            // Arrange
            const int count        = 13;
            var       dictionaries = new Dictionary <DateTimeOffset, long> [count];
            var       fictionaries = new Fictionary <DateTimeOffset, long, GenericEqualityComparer <DateTimeOffset> > [count];

            for (int i = 0; i != count; ++i)
            {
                dictionaries[i] = new Dictionary <DateTimeOffset, long>();
                fictionaries[i] = DefaultFictionary <DateTimeOffset, long> .Create();
            }

            // Act
            for (int upper = 1; upper <= count; ++upper)
            {
                for (int i = 0; i < upper; ++i)
                {
                    Dictionary <DateTimeOffset, long> d = dictionaries[i];
                    int newItemCount = Math.Max(1, d.Count);
                    Fictionary <DateTimeOffset, long, GenericEqualityComparer <DateTimeOffset> > f = fictionaries[i];
                    for (int k = 0; k != newItemCount; ++k)
                    {
                        long value = (upper << 24) | (i << 16) | k;
                        d.TryAdd(DateTimeOffset.FromFileTime(value), value);
                        f.TryAdd(DateTimeOffset.FromFileTime(value), value);
                    }
                }
            }

            // Assert
            for (int i = 0; i != count; ++i)
            {
                Dictionary <DateTimeOffset, long> d = dictionaries[i];
                Fictionary <DateTimeOffset, long, GenericEqualityComparer <DateTimeOffset> > f = fictionaries[i];

                Assert.Empty(d.Except(f));
                Assert.Empty(f.Except(d));
            }
        }