public void WeakCacheDictionary_Simple() { var cd = new WeakCacheDictionary <string, string>(); var n = 0; Assert.AreEqual("FOO", cd.GetOrAdd("foo", s => { n++; return(s.ToUpper()); })); Assert.AreEqual(1, n); Assert.AreEqual("FOO", cd.GetOrAdd("foo", s => { n++; return(s.ToUpper()); })); Assert.AreEqual(1, n); Assert.AreEqual("BAR", cd.GetOrAdd("bar", s => { n++; return(s.ToUpper()); })); Assert.AreEqual(2, n); Assert.IsTrue(cd.Remove("bar")); Assert.AreEqual(2, n); Assert.IsFalse(cd.Remove("qux")); Assert.AreEqual(2, n); Assert.AreEqual("BAR", cd.GetOrAdd("bar", s => { n++; return(s.ToUpper()); })); Assert.AreEqual(3, n); #if DEBUG Assert.IsTrue(cd.Keys.OrderBy(x => x).SequenceEqual(new[] { "bar", "foo" })); #endif }
public void WeakCacheDictionary_Null() { var cd = new WeakCacheDictionary <string, string>(); var n = 0; Assert.AreEqual("NULL", cd.GetOrAdd(key: null, s => { n++; return((s ?? "null").ToUpper()); })); Assert.AreEqual(1, n); Assert.AreEqual("NULL", cd.GetOrAdd(key: null, s => { n++; return((s ?? "null").ToUpper()); })); Assert.AreEqual(1, n); Assert.IsTrue(cd.Remove(key: null)); Assert.AreEqual(1, n); Assert.AreEqual("NULL", cd.GetOrAdd(key: null, s => { n++; return((s ?? "null").ToUpper()); })); Assert.AreEqual(2, n); #if DEBUG Assert.IsTrue(cd.Keys.Any(x => x == null)); #endif }