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); }
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); }
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); }
public void BeCreated() { var MyCache = new MicroCacheExt(); }