Esempio n. 1
0
        public void SerializationTest(StringComparison comparison)
        {
            var dict = new StringKeyedDictionary <int>(StringSegmentComparer.FromComparison(comparison))
            {
                { "alpha", 1 },
                { "beta", 2 },
                { "gamma", 3 },
                { "delta", 4 },
                { "epsilon", 5 }
            };

            // By BinarySerializationFormatter
            StringKeyedDictionary <int> clone = dict.DeepClone();

            Assert.AreNotSame(dict, clone);
            Assert.AreEqual(dict.Count, clone.Count);
            CollectionAssert.AreEqual(dict, clone);

            // By BinaryFormatter
            var formatter = new BinaryFormatter();

            using var ms = new MemoryStream();
            formatter.Serialize(ms, dict);
            ms.Position = 0;
            clone       = (StringKeyedDictionary <int>)formatter.Deserialize(ms);
            CollectionAssert.AreEqual(dict, clone);
        }
        public void AccessTest(StringComparison?comparison)
        {
            const int             count = 100_000;
            StringComparer        sc    = null;
            StringSegmentComparer ssc   = null;

            if (comparison != null)
            {
#if NETFRAMEWORK || NETSTANDARD2_0
                sc = comparison.Value switch
                {
                    StringComparison.Ordinal => StringComparer.Ordinal,
                    StringComparison.OrdinalIgnoreCase => StringComparer.OrdinalIgnoreCase,
                    StringComparison.InvariantCulture => StringComparer.InvariantCulture,
                    StringComparison.InvariantCultureIgnoreCase => StringComparer.InvariantCultureIgnoreCase,
                    _ => throw new ArgumentOutOfRangeException(nameof(comparison))
                };
#else
                sc = StringComparer.FromComparison(comparison.Value);
#endif
                ssc = StringSegmentComparer.FromComparison(comparison.Value);
            }

            Dictionary <string, int> dictionary = Enumerable.Range(0, count).ToDictionary(i => i.ToString(CultureInfo.InvariantCulture), sc);
            var strDict = new StringKeyedDictionary <int>(dictionary, ssc);

            new IteratorPerformanceTest <int> {
                TestName = "Indexer access test", Iterations = count
            }
            .AddCase(i => dictionary[i.ToString(CultureInfo.InvariantCulture)], "Dictionary read")
            .AddCase(i => strDict[i.ToString(CultureInfo.InvariantCulture)], "StringKeyedDictionary read (string)")
            .AddCase(i => strDict[i.ToString(CultureInfo.InvariantCulture).AsSegment()], "StringKeyedDictionary read (StringSegment)")
#if !(NETFRAMEWORK || NETSTANDARD2_0 || NETCOREAPP2_0)
            .AddCase(i => strDict[i.ToString(CultureInfo.InvariantCulture).AsSpan()], "StringKeyedDictionary read (ReadOnlySpan<char>)")
#endif
            .DoTest()
            .DumpResults(Console.Out);
        }
Esempio n. 3
0
        public void UsageTest(StringComparison?comparison)
        {
            var dict = comparison == null ? new StringKeyedDictionary <int>() : new StringKeyedDictionary <int>(StringSegmentComparer.FromComparison(comparison.Value));

            dict.Add("alpha", 1);
            dict.Add("beta", 2);
            dict.Add("gamma", 3);
            Assert.AreEqual(3, dict.Count);
            Assert.AreEqual(1, dict["alpha"]);
            Assert.AreEqual(1, dict["alpha".AsSegment()]);
#if !(NETFRAMEWORK || NETSTANDARD2_0 || NETCOREAPP2_0)
            Assert.AreEqual(1, dict["alpha".AsSpan()]);
#endif

            // remove and re-add by string
            Assert.IsTrue(dict.Remove("alpha"));
            Assert.AreEqual(2, dict.Count);
            Assert.IsFalse(dict.Remove("alpha"));
            Assert.IsTrue(dict.Remove("beta"));
            dict.Add("alpha", -1);
            Assert.AreEqual(2, dict.Count);
            Assert.AreEqual(-1, dict["alpha"]);
            Assert.AreEqual(-1, dict["alpha".AsSegment()]);
#if !(NETFRAMEWORK || NETSTANDARD2_0 || NETCOREAPP2_0)
            Assert.AreEqual(-1, dict["alpha".AsSpan()]);
#endif

            // Clear
            dict.Clear();
            Assert.AreEqual(0, dict.Count);
            dict.Add("alpha", 42);
            Assert.AreEqual(42, dict["alpha"]);
        }