From 1ec79ef0959dcb61a9455e4ffef1dbcd1bc6788c Mon Sep 17 00:00:00 2001 From: Ben Adams Date: Sun, 1 Apr 2018 05:58:18 +0100 Subject: [PATCH] Use a non-contigous Dictionary for tests --- .../Generic/Dictionary/Dictionary.Tests.cs | 66 ++++++++++++++++++- 1 file changed, 65 insertions(+), 1 deletion(-) diff --git a/src/System.Collections/tests/Generic/Dictionary/Dictionary.Tests.cs b/src/System.Collections/tests/Generic/Dictionary/Dictionary.Tests.cs index 9f954f6152f7..1161d62729f1 100644 --- a/src/System.Collections/tests/Generic/Dictionary/Dictionary.Tests.cs +++ b/src/System.Collections/tests/Generic/Dictionary/Dictionary.Tests.cs @@ -164,6 +164,67 @@ public void CopyConstructorExceptions() AssertExtensions.Throws("capacity", () => new Dictionary(new NegativeCountDictionary(), EqualityComparer.Default)); } + [Theory] + [InlineData(0)] + [InlineData(1)] + [InlineData(101)] + public void ICollection_NonGeneric_CopyTo_NonContiguousDictionary(int count) + { + ICollection collection = (ICollection)CreateDictionary(count, k => k.ToString()); + KeyValuePair[] array = new KeyValuePair[count]; + collection.CopyTo(array, 0); + int i = 0; + foreach (object obj in collection) + Assert.Equal(array[i++], obj); + } + + [Theory] + [InlineData(0)] + [InlineData(1)] + [InlineData(101)] + public void ICollection_Generic_CopyTo_NonContiguousDictionary(int count) + { + ICollection> collection = CreateDictionary(count, k => k.ToString()); + KeyValuePair[] array = new KeyValuePair[count]; + collection.CopyTo(array, 0); + int i = 0; + foreach (KeyValuePair obj in collection) + Assert.Equal(array[i++], obj); + } + + [Theory] + [InlineData(0)] + [InlineData(1)] + [InlineData(101)] + public void IDictionary_Generic_CopyTo_NonContiguousDictionary(int count) + { + IDictionary collection = CreateDictionary(count, k => k.ToString()); + KeyValuePair[] array = new KeyValuePair[count]; + collection.CopyTo(array, 0); + int i = 0; + foreach (KeyValuePair obj in collection) + Assert.Equal(array[i++], obj); + } + + [Theory] + [InlineData(0)] + [InlineData(1)] + [InlineData(101)] + public void CopyTo_NonContiguousDictionary(int count) + { + Dictionary collection = (Dictionary)CreateDictionary(count, k => k.ToString()); + string[] array = new string[count]; + collection.Keys.CopyTo(array, 0); + int i = 0; + foreach (KeyValuePair obj in collection) + Assert.Equal(array[i++], obj.Key); + + collection.Values.CopyTo(array, 0); + i = 0; + foreach (KeyValuePair obj in collection) + Assert.Equal(array[i++], obj.Key); + } + [Theory] [MemberData(nameof(CopyConstructorInt32Data))] public void CopyConstructorInt32(int size, Func keyValueSelector, Func, IDictionary> dictionarySelector) @@ -287,7 +348,10 @@ private static IEnumerable GetCopyConstructorData(Func keyV private static IDictionary CreateDictionary(int size, Func keyValueSelector, IEqualityComparer comparer = null) { - return Enumerable.Range(1, size).ToDictionary(keyValueSelector, keyValueSelector, comparer); + Dictionary dict = Enumerable.Range(0, size + 1).ToDictionary(keyValueSelector, keyValueSelector, comparer); + // Remove first item to reduce Count to size and alter the contiguity of the dictionary + dict.Remove(keyValueSelector(0)); + return dict; } private sealed class DictionarySubclass : Dictionary