Exemplo n.º 1
0
        public void SupportInvalidateKey()
        {
            var MyCache = new MicroCacheExt();

            int Maker1CallCount     = 0;
            Func <int, long> Maker1 = (a) =>
            {
                Maker1CallCount++;
                return(a + 1);
            };

            Assert.AreEqual(5, MyCache.GetOrMake(Maker1, 4));
            Assert.AreEqual(5, MyCache.GetOrMake(Maker1, 4));
            Assert.AreEqual(1, Maker1CallCount);

            // Still the same key, but added explicitely
            Assert.AreEqual(5, MyCache.GetOrMakeWithKey(MyCache.DeriveKey(FuncCall.Create(Maker1, 4)), () => Maker1(4)));
            Assert.AreEqual(1, Maker1CallCount);

            MyCache.InvalidateKey(MyCache.DeriveKey(FuncCall.Create(Maker1, 4)));

            // Recreation of value as key is invalidated
            Assert.AreEqual(5, MyCache.GetOrMake(Maker1, 4));
            Assert.AreEqual(5, MyCache.GetOrMake(Maker1, 4));
            Assert.AreEqual(2, Maker1CallCount);
        }
Exemplo n.º 2
0
        public void SupportCustomKeys()
        {
            var MyCache = new MicroCacheExt();

            int Maker1CallCount     = 0;
            Func <int, long> Maker1 = (a) =>
            {
                Maker1CallCount++;
                return(a + 1);
            };

            Assert.AreEqual(5, MyCache.GetOrMakeWithKey("AAA", () => Maker1(4)));
            Assert.AreEqual(5, MyCache.GetOrMakeWithKey("AAA", () => Maker1(4)));
            Assert.AreEqual(1, Maker1CallCount);

            // Function is the same, but key is different
            Assert.AreEqual(5, MyCache.GetOrMakeWithKey("BBB", () => Maker1(4)));
            Assert.AreEqual(5, MyCache.GetOrMakeWithKey("BBB", () => Maker1(4)));
            Assert.AreEqual(2, Maker1CallCount);

            // Function is the same, but key is different, interlevaed (still no calls)
            Assert.AreEqual(5, MyCache.GetOrMakeWithKey("AAA", () => Maker1(4)));
            Assert.AreEqual(5, MyCache.GetOrMakeWithKey("BBB", () => Maker1(4)));
            Assert.AreEqual(2, Maker1CallCount);

            MyCache.InvalidateKey("AAA");

            // Function is the same, one of 2 keys invalitaed, only one extra call
            Assert.AreEqual(5, MyCache.GetOrMakeWithKey("AAA", () => Maker1(4)));
            Assert.AreEqual(5, MyCache.GetOrMakeWithKey("BBB", () => Maker1(4)));
            Assert.AreEqual(3, Maker1CallCount);
        }
Exemplo n.º 3
0
        public void SupportDirectCallWithKeyDerivation()
        {
            var MyCache = new MicroCacheExt();

            int Maker1CallCount     = 0;
            Func <int, long> Maker1 = (a) =>
            {
                Maker1CallCount++;
                return(a + 1);
            };

            Assert.AreEqual(5, MyCache.GetOrMake(Maker1, 4));
            Assert.AreEqual(5, MyCache.GetOrMake(Maker1, 4));
            Assert.AreEqual(5, MyCache.GetOrMakeWithKey(MyCache.DeriveKey(FuncCall.Create(Maker1, 4)), () => Maker1(4)));
            Assert.AreEqual(1, Maker1CallCount);
        }
Exemplo n.º 4
0
 public void BeCreated()
 {
     var MyCache = new MicroCacheExt();
 }