public static void Remove_CustomComparerTest() { ObservableStringComparer comparer = new ObservableStringComparer(); ListDictionary ld = Fill(new ListDictionary(comparer), s_dictionaryData); Assert.All(s_dictionaryData.Reverse(), element => { int originalSize = ld.Count; Assert.True(ld.Contains(element.Key)); // Removing items in reverse order, so iterates over everything. comparer.AssertCompared(originalSize, () => ld.Remove(element.Key)); Assert.False(ld.Contains(element.Key)); }); Assert.Equal(0, ld.Count); }
public static void Set_CustomComparerTest() { ObservableStringComparer comparer = new ObservableStringComparer(); ListDictionary ld = Fill(new ListDictionary(comparer), s_dictionaryData); int visited = s_dictionaryData.Length; Assert.All(s_dictionaryData.Reverse(), element => { string newValue = "new" + element.Value; Assert.True(ld.Contains(element.Key)); // Removing items in reverse order, so iterates over everything ahead of the key. comparer.AssertCompared(visited--, () => ld[element.Key] = newValue); Assert.True(ld.Contains(element.Key)); Assert.Equal(newValue, ld[element.Key]); }); }
public static void Add_CustomComparerTest(bool addViaSet) { ObservableStringComparer comparer = new ObservableStringComparer(); ListDictionary added = new ListDictionary(comparer); for (int i = 0; i < s_dictionaryData.Length; i++) { string key = s_dictionaryData[i].Key; string value = s_dictionaryData[i].Value; Assert.Equal(i, added.Count); comparer.AssertCompared(i, () => Assert.Null(added[key])); comparer.AssertCompared(i, () => Assert.False(added.Contains(key))); // comparer is called for each element in sequence during add. comparer.AssertCompared(i, () => added.Add(addViaSet, key, value)); comparer.AssertCompared(i + 1, () => Assert.Equal(value, added[key])); comparer.AssertCompared(i + 1, () => Assert.True(added.Contains(key))); Assert.Equal(i + 1, added.Count); comparer.AssertCompared(i + 1, () => AssertExtensions.Throws <ArgumentException>(null, () => added.Add(key, "duplicate"))); } Assert.Equal(s_dictionaryData.Length, added.Count); // Because the dictionary maintains insertion order, "add"-ing an already-present element only iterates // until the initial key is reached. int middleIndex = s_dictionaryData.Length / 2; string middleKey = s_dictionaryData[middleIndex].Key; string middleValue = s_dictionaryData[middleIndex].Value; Assert.Equal(middleValue, added[middleKey]); Assert.True(added.Contains(middleKey)); // Index is 0-based, count is 1-based // ... Add throws exception comparer.AssertCompared(middleIndex + 1, () => AssertExtensions.Throws <ArgumentException>(null, () => added.Add(middleKey, "middleValue"))); Assert.Equal(middleValue, added[middleKey]); Assert.True(added.Contains(middleKey)); }
public static void Add_CustomComparerTest(bool addViaSet) { ObservableStringComparer comparer = new ObservableStringComparer(); ListDictionary added = new ListDictionary(comparer); for (int i = 0; i < s_dictionaryData.Length; i++) { string key = s_dictionaryData[i].Key; string value = s_dictionaryData[i].Value; Assert.Equal(i, added.Count); comparer.AssertCompared(i, () => Assert.Null(added[key])); comparer.AssertCompared(i, () => Assert.False(added.Contains(key))); // comparer is called for each element in sequence during add. comparer.AssertCompared(i, () => added.Add(addViaSet, key, value)); comparer.AssertCompared(i + 1, () => Assert.Equal(value, added[key])); comparer.AssertCompared(i + 1, () => Assert.True(added.Contains(key))); Assert.Equal(i + 1, added.Count); comparer.AssertCompared(i + 1, () => Assert.Throws<ArgumentException>(() => added.Add(key, "duplicate"))); } Assert.Equal(s_dictionaryData.Length, added.Count); // Because the dictionary maintains insertion order, "add"-ing an already-present element only iterates // until the initial key is reached. int middleIndex = s_dictionaryData.Length / 2; string middleKey = s_dictionaryData[middleIndex].Key; string middleValue = s_dictionaryData[middleIndex].Value; Assert.Equal(middleValue, added[middleKey]); Assert.True(added.Contains(middleKey)); // Index is 0-based, count is 1-based // ... Add throws exception comparer.AssertCompared(middleIndex + 1, () => Assert.Throws<ArgumentException>(() => added.Add(middleKey, "middleValue"))); Assert.Equal(middleValue, added[middleKey]); Assert.True(added.Contains(middleKey)); }