public void InMemoryTests()
        {
            var obj1 = new InMemoryObject("1", "Test 1");
            var obj2 = new InMemoryObject("A", "Test 2");
            var obj3 = new InMemoryObject("!", "Test 3");
            var rep  = new InMemoryRepository <InMemoryObject, string>();

            Assert.AreEqual(rep.GetAll().Count(x => true), 0);
            Assert.AreEqual(rep.Contains(obj1), false);
            Assert.AreEqual(rep.Contains(obj2), false);
            Assert.AreEqual(rep.Contains(obj3), false);

            // Add 1
            rep.Add(obj1);

            Assert.AreEqual(rep.GetAll().Count(x => true), 1);
            Assert.AreEqual(rep.Contains(obj1), true);
            Assert.AreEqual(rep.Contains(obj2), false);
            Assert.AreEqual(rep.Contains(obj3), false);

            // Add 2
            rep.Add(obj2);

            Assert.AreEqual(rep.GetAll().Count(x => true), 2);
            Assert.AreEqual(rep.Contains(obj1), true);
            Assert.AreEqual(rep.Contains(obj2), true);
            Assert.AreEqual(rep.Contains(obj3), false);

            // Add 3
            rep.Add(obj3);

            Assert.AreEqual(rep.GetAll().Count(x => true), 3);
            Assert.AreEqual(rep.Contains(obj1), true);
            Assert.AreEqual(rep.Contains(obj2), true);
            Assert.AreEqual(rep.Contains(obj3), true);

            // Readd
            rep.Add(obj3);

            Assert.AreEqual(rep.GetAll().Count(x => true), 3);
            Assert.AreEqual(rep.Contains(obj1), true);
            Assert.AreEqual(rep.Contains(obj2), true);
            Assert.AreEqual(rep.Contains(obj3), true);

            // Store
            var obj1Get = rep.GetAll().Where(x => x.ID == "1").FirstOrDefault();

            obj1Get.UpdateTest("Test 1a");
            Assert.AreEqual(true, rep.Store(obj1Get));

            // Remove 2
            rep.Remove(obj2);

            Assert.AreEqual(rep.GetAll().Count(x => true), 2);
            Assert.AreEqual(rep.Contains(obj1), true);
            Assert.AreEqual(rep.Contains(obj2), false);
            Assert.AreEqual(rep.Contains(obj3), true);

            // Remove 1
            rep.Remove(obj1);

            Assert.AreEqual(rep.GetAll().Count(x => true), 1);
            Assert.AreEqual(rep.Contains(obj1), false);
            Assert.AreEqual(rep.Contains(obj2), false);
            Assert.AreEqual(rep.Contains(obj3), true);

            // Add 1 & 2
            rep.AddRange(new[] { obj1, obj2 });

            Assert.AreEqual(rep.GetAll().Count(x => true), 3);
            Assert.AreEqual(rep.Contains(obj1), true);
            Assert.AreEqual(rep.Contains(obj2), true);
            Assert.AreEqual(rep.Contains(obj3), true);

            rep.Clear();

            Assert.AreEqual(rep.GetAll().Count(x => true), 0);
            Assert.AreEqual(rep.Contains(obj1), false);
            Assert.AreEqual(rep.Contains(obj2), false);
            Assert.AreEqual(rep.Contains(obj3), false);
        }