public void TestExpiryPolicy()
        {
            var cache = new CacheEx();

            Assert.IsNull(cache.ExpiryPolicy);

            var holder = new ExpiryCacheHolder <int, int>(cache);

            // Check same cache for same expiry.
            var cache1 = (CacheEx)holder.GetCacheWithExpiry(15);

            CheckExpiry(TimeSpan.FromSeconds(15), cache1);
            Assert.AreNotSame(cache, cache1);
            Assert.AreSame(cache1, holder.GetCacheWithExpiry(15));

            // Check rounding.
            var cache2 = (CacheEx)holder.GetCacheWithExpiry(DateTime.UtcNow.AddSeconds(15.1));

            Assert.AreSame(cache1, cache2);

            // Check no expiration.
            var cache3 = (CacheEx)holder.GetCacheWithExpiry(DateTime.MaxValue);

            Assert.AreSame(cache, cache3);
        }
示例#2
0
        public void NoneDoesntCache()
        {
            var cache = CacheEx.None <int, string>();
            var str1  = cache.GetOrAdd(1, MakeValue);

            Assert.Equal("1", str1);
            var str2 = cache.GetOrAdd(1, MakeValue);

            Assert.Equal("1", str2);
            Assert.False(ReferenceEquals(str1, str2));
            cache.Upsert(1, "test");
            var str3 = cache.GetOrAdd(1, MakeValue, out bool added);

            Assert.True(added);
            Assert.Equal("1", str3);
            Assert.False(ReferenceEquals(str1, str3));
            Assert.False(ReferenceEquals(str2, str3));
            Assert.False(cache.TryGetValue(1, out string str4));
            Assert.Null(str4);
            cache.Clear();
        }
 /// <summary>
 /// Checks the expiry.
 /// </summary>
 private static void CheckExpiry(TimeSpan timeSpan, CacheEx cache)
 {
     Assert.AreEqual(timeSpan, cache.ExpiryPolicy.GetExpiryForCreate());
     Assert.IsNull(cache.ExpiryPolicy.GetExpiryForUpdate());
     Assert.IsNull(cache.ExpiryPolicy.GetExpiryForAccess());
 }
示例#4
0
 public void ConcurrentOk()
 {
     CacheOk(CacheEx.Concurrent <int, string>());
 }
示例#5
0
 public void ThreadUnsafeOk()
 {
     CacheOk(CacheEx.ThreadUnsafe <int, string>());
 }
示例#6
0
 public void ThreadSafeLockingOk()
 {
     CacheOk(CacheEx.ThreadSafeLocking <int, string>());
 }