示例#1
0
        protected static void Unbounded_Trim1(IMemoizationCacheFactory mcf)
        {
            var res = mcf.Create <int, int>(x => x * 2, MemoizationOptions.None, EqualityComparer <int> .Default);

            Assert.AreEqual(42, res.GetOrAdd(21));
            Assert.AreEqual(1, res.Count);

            var trim = res.AsTrimmableByArgumentAndResult();

            Assert.IsNotNull(trim);

            trim.Trim(kv => kv.Key % 2 == 0);
            Assert.AreEqual(1, res.Count);

            trim.Trim(kv => kv.Key % 3 == 0);
            Assert.AreEqual(0, res.Count);

            Assert.AreEqual(42, res.GetOrAdd(21));
            Assert.AreEqual(1, res.Count);

            trim.Trim(kv => kv.Value % 2 != 0);
            Assert.AreEqual(1, res.Count);

            trim.Trim(kv => kv.Value % 3 == 0);
            Assert.AreEqual(0, res.Count);
        }
示例#2
0
        protected static void Unbounded_Trim2(IMemoizationCacheFactory mcf)
        {
            var res = mcf.Create <int, int>(x => 100 / x, MemoizationOptions.CacheException, EqualityComparer <int> .Default);

            Assert.ThrowsException <DivideByZeroException>(() => res.GetOrAdd(0));
            Assert.AreEqual(1, res.Count);

            Assert.AreEqual(50, res.GetOrAdd(2));
            Assert.AreEqual(2, res.Count);

            var trim = res.AsTrimmableByArgumentAndResult();

            Assert.IsNotNull(trim);

            trim.Trim(kv => kv.Key % 2 == 0);
            Assert.AreEqual(1, res.Count);

            var trimErr = res.AsTrimmableByArgumentAndResultOrError();

            Assert.IsNotNull(trimErr);

            trimErr.Trim(kv => kv.Value.Kind == ValueOrErrorKind.Error && kv.Key == 0);
            Assert.AreEqual(0, res.Count);

            trimErr.Trim(kv => kv.Key % 3 == 0);
            Assert.AreEqual(0, res.Count);

            Assert.ThrowsException <DivideByZeroException>(() => res.GetOrAdd(0));
            Assert.AreEqual(1, res.Count);

            Assert.AreEqual(50, res.GetOrAdd(2));
            Assert.AreEqual(2, res.Count);
        }
示例#3
0
        protected static void Unbounded_ErrorCaching(IMemoizationCacheFactory mcf)
        {
            var n     = 0;
            var cache = mcf.Create <string, int>(s => { n++; return(s.Length); }, MemoizationOptions.CacheException, comparer: null);

            Assert.AreEqual(0, cache.Count);
            Assert.AreEqual(0, n);

            for (var i = 1; i <= 3; i++)
            {
                Assert.ThrowsException <NullReferenceException>(() => cache.GetOrAdd(argument: null));
                Assert.AreEqual(1, cache.Count);
                Assert.AreEqual(1, n);
            }
        }
示例#4
0
        protected static void Unbounded_Simple(IMemoizationCacheFactory mcf)
        {
            foreach (var options in new[] { MemoizationOptions.None, MemoizationOptions.CacheException })
            {
                var n     = 0;
                var cache = mcf.Create <string, int>(s => { n++; return(s.Length); }, options, comparer: null);

                Assert.AreEqual(0, cache.Count);
                Assert.AreEqual(0, n);

                Assert.AreEqual(3, cache.GetOrAdd("foo"));
                Assert.AreEqual(1, cache.Count);
                Assert.AreEqual(1, n);

                Assert.AreEqual(3, cache.GetOrAdd("foo"));
                Assert.AreEqual(1, cache.Count);
                Assert.AreEqual(1, n);

                Assert.AreEqual(4, cache.GetOrAdd("test"));
                Assert.AreEqual(2, cache.Count);
                Assert.AreEqual(2, n);

                cache.Clear();

                Assert.AreEqual(0, cache.Count);
                Assert.AreEqual(2, n);

                Assert.AreEqual(3, cache.GetOrAdd("foo"));
                Assert.AreEqual(1, cache.Count);
                Assert.AreEqual(3, n);

                Assert.AreEqual(3, cache.GetOrAdd("foo"));
                Assert.AreEqual(1, cache.Count);
                Assert.AreEqual(3, n);

                Assert.AreEqual(4, cache.GetOrAdd("test"));
                Assert.AreEqual(2, cache.Count);
                Assert.AreEqual(4, n);

                Assert.IsTrue(!string.IsNullOrEmpty(cache.DebugView));
            }
        }
示例#5
0
 protected static void Unbounded_ArgumentChecking(IMemoizationCacheFactory mcf)
 {
     Assert.ThrowsException <ArgumentNullException>(() => mcf.Create(default(Func <int, int>), MemoizationOptions.None, EqualityComparer <int> .Default));
 }