diff --git a/CHANGELOG.md b/CHANGELOG.md index 9cf8822..30921a0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -91,6 +91,10 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Better VC-4 support for IcdConsole - JSON refactoring for simpler deserialization +## [8.7.1] - 2019-08-22 +### Changed + - Fixed a bug with the IcdOrderedDict index setter that was creating additional values + ## [8.7.0] - 2019-06-24 ### Added - IcdXmlException exposes line number and position properties diff --git a/ICD.Common.Utils.Tests/Collections/IcdOrderedDictionaryTest.cs b/ICD.Common.Utils.Tests/Collections/IcdOrderedDictionaryTest.cs index dc6effd..65b6931 100644 --- a/ICD.Common.Utils.Tests/Collections/IcdOrderedDictionaryTest.cs +++ b/ICD.Common.Utils.Tests/Collections/IcdOrderedDictionaryTest.cs @@ -69,16 +69,26 @@ namespace ICD.Common.Utils.Tests.Collections [Test] public void IndexerTest() { - IcdOrderedDictionary dict = new IcdOrderedDictionary - { - {0, 0}, - {1, 10}, - {-1, -10} - }; + // ReSharper disable UseObjectOrCollectionInitializer + IcdOrderedDictionary dict = new IcdOrderedDictionary(); + // ReSharper restore UseObjectOrCollectionInitializer + + dict[0] = 0; + dict[1] = 10; + dict[-1] = -10; + dict[-1] = -11; Assert.AreEqual(0, dict[0]); Assert.AreEqual(10, dict[1]); - Assert.AreEqual(-10, dict[-1]); + Assert.AreEqual(-11, dict[-1]); + + Assert.AreEqual(3, dict.Count); + + int[] expectedKeys = {-1, 0, 1 }; + int[] expectedValues = {-11, 0, 10}; + + Assert.AreEqual(expectedKeys, dict.Keys.ToArray()); + Assert.AreEqual(expectedValues, dict.Values.ToArray()); } #endregion diff --git a/ICD.Common.Utils/Collections/IcdOrderedDictionary.cs b/ICD.Common.Utils/Collections/IcdOrderedDictionary.cs index 3699b18..700cc54 100644 --- a/ICD.Common.Utils/Collections/IcdOrderedDictionary.cs +++ b/ICD.Common.Utils/Collections/IcdOrderedDictionary.cs @@ -32,13 +32,8 @@ namespace ICD.Common.Utils.Collections if (key == null) throw new ArgumentNullException("key"); - if (!ContainsKey(key)) - { - int index = m_OrderedKeys.AddSorted(key, m_Comparer); - m_ValuesOrderedByKey.Insert(index, value); - } - - m_Dictionary[key] = value; + Remove(key); + Add(key, value); } } @@ -109,9 +104,12 @@ namespace ICD.Common.Utils.Collections throw new ArgumentNullException("key"); if (m_Dictionary.ContainsKey(key)) - throw new ArgumentException("An item with the same key has already been added.", "key"); + throw new ArgumentOutOfRangeException("key", "An item with the same key has already been added."); - this[key] = value; + int index = m_OrderedKeys.AddSorted(key, m_Comparer); + m_ValuesOrderedByKey.Insert(index, value); + + m_Dictionary[key] = value; } public void Clear()