public void CanAddAndUpdate()
        {
            var cache  = new MemoryCache <string, string>();
            var values = new List <Common.Caching.Abstract.KeyValuePair <string, string> >();

            cache["key::10"] = "abc";
            cache["key::50"] = "def";
            cache["key::55"] = "duf";

            Assert.AreEqual("abc", cache["key::10"]);
            Assert.AreEqual("def", cache["key::50"]);
            Assert.AreEqual("duf", cache["key::55"]);

            for (var idx = 0; idx < 100; idx++)
            {
                var kvp = new Common.Caching.Abstract.KeyValuePair <string, string> {
                    Key   = $"key::{idx}",
                    Value = $"value::{idx}"
                };

                values.Add(kvp);
            }

            cache.AddOrUpdate(values);
            Assert.AreEqual("value::10", cache["key::10"]);
            Assert.AreEqual("value::50", cache["key::50"]);
            Assert.AreEqual("value::55", cache["key::55"]);
        }
        public void CannotMassUpdate()
        {
            var cache  = new MemoryCache <string, string>();
            var values = new List <Common.Caching.Abstract.KeyValuePair <string, string> >();

            cache["key::10"] = "abc";
            cache["key::50"] = "def";
            cache["key::55"] = "duf";

            Assert.AreEqual("abc", cache["key::10"]);
            Assert.AreEqual("def", cache["key::50"]);
            Assert.AreEqual("duf", cache["key::55"]);

            for (var idx = 0; idx < 100; idx++)
            {
                var kvp = new Common.Caching.Abstract.KeyValuePair <string, string> {
                    Key   = $"key::{idx}",
                    Value = $"value::{idx}"
                };

                values.Add(kvp);
            }

            Assert.ThrowsException <ArgumentOutOfRangeException>(() => cache.Add(values));
        }
        public void CanAddMultipleKVPairs()
        {
            var cache  = new MemoryCache <string, string>();
            var values = new List <Common.Caching.Abstract.KeyValuePair <string, string> >();

            for (var idx = 0; idx < 100; idx++)
            {
                var kvp = new Common.Caching.Abstract.KeyValuePair <string, string> {
                    Key   = $"key::{idx}",
                    Value = $"value::{idx}"
                };

                values.Add(kvp);
            }

            cache.Add(values);
            Assert.AreEqual("value::50", cache["key::50"]);
        }
        private static IMemoryCache <string, string> GenerateCache()
        {
            var cache   = new MemoryCache <string, string>(150);
            var values  = new List <Common.Caching.Abstract.KeyValuePair <string, string> >();
            var options = new CacheEntryOptions {
                Size = 1
            };

            for (var idx = 0; idx < 100; idx++)
            {
                var kvp = new Common.Caching.Abstract.KeyValuePair <string, string> {
                    Key   = $"key::{idx}",
                    Value = $"value::{idx}"
                };

                values.Add(kvp);
            }

            cache.Add(values, options);
            return(cache);
        }
        public void CanMassTimeout()
        {
            var cache   = new MemoryCache <string, string>();
            var values  = new List <Common.Caching.Abstract.KeyValuePair <string, string> >();
            var options = new CacheEntryOptions {
                Timeout = TimeSpan.FromMilliseconds(50)
            };

            for (var idx = 0; idx < 100; idx++)
            {
                var kvp = new Common.Caching.Abstract.KeyValuePair <string, string> {
                    Key   = $"key::{idx}",
                    Value = $"value::{idx}"
                };

                values.Add(kvp);
            }

            cache.AddOrUpdate(values, options);
            Assert.AreEqual("value::50", cache["key::50"]);
            Thread.Sleep(51);
            Assert.ThrowsException <KeyNotFoundException>(() => cache["key::50"]);
        }