diff --git a/ICD.Common.Utils.Tests/Collections/BiDictionaryTest.cs b/ICD.Common.Utils.Tests/Collections/BiDictionaryTest.cs new file mode 100644 index 0000000..2820615 --- /dev/null +++ b/ICD.Common.Utils.Tests/Collections/BiDictionaryTest.cs @@ -0,0 +1,219 @@ +using System; +using ICD.Common.Utils.Collections; +using NUnit.Framework; + +namespace ICD.Common.Utils.Tests.Collections +{ + [TestFixture] + public sealed class BiDictionaryTest + { + #region Properties + + [Test] + public void CountTest() + { + BiDictionary dict = new BiDictionary(); + + dict.Set(1, "10"); + dict.Set(2, "10"); + dict.Set(3, "30"); + + Assert.AreEqual(2, dict.Count); + } + + [Test] + public void KeysTest() + { + BiDictionary dict = new BiDictionary(); + + dict.Set(1, "10"); + dict.Set(2, "10"); + dict.Set(3, "30"); + + Assert.AreEqual(2, dict.Keys.Count); + + Assert.IsTrue(dict.Keys.Contains(2)); + Assert.IsTrue(dict.Keys.Contains(3)); + } + + [Test] + public void ValuesTest() + { + BiDictionary dict = new BiDictionary(); + + dict.Set(1, "10"); + dict.Set(1, "20"); + dict.Set(3, "30"); + + Assert.AreEqual(2, dict.Values.Count); + + Assert.IsTrue(dict.Values.Contains("20")); + Assert.IsTrue(dict.Values.Contains("30")); + } + + #endregion + + #region Methods + + [Test] + public void ClearTest() + { + BiDictionary dict = new BiDictionary(); + + dict.Set(1, "10"); + dict.Set(1, "20"); + dict.Set(3, "30"); + + Assert.AreEqual(2, dict.Count); + + dict.Clear(); + + Assert.AreEqual(0, dict.Count); + } + + [Test] + public void ContainsKeyTest() + { + BiDictionary dict = new BiDictionary(); + + Assert.IsFalse(dict.ContainsKey(1)); + + dict.Set(1, "10"); + + Assert.IsTrue(dict.ContainsKey(1)); + } + + [Test] + public void ContainsValueTest() + { + BiDictionary dict = new BiDictionary(); + + Assert.IsFalse(dict.ContainsValue("10")); + + dict.Set(1, "10"); + + Assert.IsTrue(dict.ContainsValue("10")); + } + + [Test] + public void AddTest() + { + BiDictionary dict = new BiDictionary(); + + dict.Add(1, "10"); + + Assert.AreEqual(1, dict.Count); + + Assert.Throws(() => dict.Add(1, "10")); + Assert.Throws(() => dict.Add(1, "20")); + Assert.Throws(() => dict.Add(2, "10")); + + Assert.DoesNotThrow(() => dict.Add(2, "20")); + + Assert.AreEqual(2, dict.Count); + } + + [Test] + public void SetTest() + { + BiDictionary dict = new BiDictionary(); + + dict.Set(1, "10"); + dict.Set(1, "20"); + dict.Set(3, "30"); + + Assert.AreEqual("20", dict.GetValue(1)); + Assert.AreEqual("30", dict.GetValue(3)); + + Assert.AreEqual(1, dict.GetKey("20")); + Assert.AreEqual(3, dict.GetKey("30")); + } + + [Test] + public void GetKeyTest() + { + BiDictionary dict = new BiDictionary(); + + dict.Set(1, "10"); + dict.Set(1, "20"); + dict.Set(3, "30"); + + Assert.AreEqual(1, dict.GetKey("20")); + Assert.AreEqual(3, dict.GetKey("30")); + } + + [Test] + public void GetValueTest() + { + BiDictionary dict = new BiDictionary(); + + dict.Set(1, "10"); + dict.Set(1, "20"); + dict.Set(3, "30"); + + Assert.AreEqual("20", dict.GetValue(1)); + Assert.AreEqual("30", dict.GetValue(3)); + } + + [Test] + public void RemoveKeyTest() + { + BiDictionary dict = new BiDictionary(); + + dict.Add(1, "10"); + + Assert.AreEqual(1, dict.Count); + + dict.RemoveKey(1); + + Assert.AreEqual(0, dict.Count); + } + + [Test] + public void RemoveValueTest() + { + BiDictionary dict = new BiDictionary(); + + dict.Add(1, "10"); + + Assert.AreEqual(1, dict.Count); + + dict.RemoveValue("10"); + + Assert.AreEqual(0, dict.Count); + } + + [Test] + public void TryGetValueTest() + { + BiDictionary dict = new BiDictionary(); + + string value; + Assert.IsFalse(dict.TryGetValue(1, out value)); + // ReSharper disable once ExpressionIsAlwaysNull + Assert.AreEqual(null, value); + + dict.Add(1, "10"); + + Assert.IsTrue(dict.TryGetValue(1, out value)); + Assert.AreEqual("10", value); + } + + [Test] + public void TryGetKeyTest() + { + BiDictionary dict = new BiDictionary(); + + int value; + Assert.IsFalse(dict.TryGetKey("10", out value)); + Assert.AreEqual(0, value); + + dict.Add(1, "10"); + + Assert.IsTrue(dict.TryGetKey("10", out value)); + Assert.AreEqual(1, value); + } + + #endregion + } +}