public void GetOrCreate() { var a = new LruDictionary <int, string>(15); var removed = new HashSet <int>(); var s1 = a.GetOrCreate(1, () => ("one", 3), (k, v, s) => removed.Add(1)); Assert.IsTrue(s1 == "one"); Assert.IsTrue(a.Count == 1); Assert.IsTrue(a.ContainsKey(1)); var s1a = a.GetOrCreate(1, () => throw new Exception(), (k, v, s) => removed.Add(-1)); Assert.IsTrue(s1 == "one"); Assert.IsTrue(a.Count == 1); Assert.IsTrue(a.ContainsKey(1)); Assert.IsTrue(a.Remove(1, true)); Assert.IsTrue(removed.Contains(1)); Assert.IsTrue(!removed.Contains(-1)); Assert.IsTrue(a.Count == 0); }