public async Task Add_RemoveItem_DoesntKeepItem()
        {
            var key  = "good";
            var item = new Item();

            var dictionary = new WeakMultiValueDictionary <string, Item>();
            await dictionary.AddAsync(key, item);

            await dictionary.RemoveAsync(key, item);

            var result = await dictionary.GetAsync(key);

            Assert.Empty(result);
        }
        public async Task Add_MultipleItems_RemovingItems_KeepsOnlyNonRemovedItems()
        {
            var key      = "good";
            var expected = GenerateItems(4);
            var removed  = GenerateItems(4);

            var dictionary = new WeakMultiValueDictionary <string, Item>();

            foreach (var item in expected.Union(removed))
            {
                await dictionary.AddAsync(key, item);
            }

            foreach (var item in removed)
            {
                await dictionary.RemoveAsync(key, item);
            }

            var actual = await dictionary.GetAsync(key);

            TestHelper.AssertEquivalent(expected, actual);
        }