Esempio n. 1
0
        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);
        }