public async Task LruRemoveExpired() { const int n = 10; const int maxSize = n * 2; var maxAge = TimeSpan.FromMilliseconds(500); LRU <string, string> .FetchValueDelegate f = null; var flushCounter = 0; var target = new LRU <string, string>(maxSize, maxAge, f); target.RaiseFlushEvent += (object o, LRU <string, string> .FlushEventArgs args) => flushCounter++; for (int i = 0; i < n; i++) { var s = i.ToString(); target.Add(s, $"item {s}"); } target.RemoveExpired(); Assert.Equal(0, flushCounter); Assert.Equal(n, target.Count); await Task.Delay(maxAge.Add(maxAge)); target.Add("expected", "value"); target.RemoveExpired(); Assert.Equal(n, flushCounter); Assert.Equal(1, target.Count); Assert.True(target.TryGetValue("expected", out var value)); Assert.Equal("value", value); }