public async Task AddEvent_RemovesExpiredItems() { var window = new SlidingWindow <MyItem>(TimeSpan.FromSeconds(1)); StringBuilder log = new StringBuilder(); for (int i = 0; i < 5; i++) { window.AddEvent(new MyItem { Data = i }); log.AppendLine($"{DateTime.UtcNow.ToString("HH:mm:ss.FFFZ")}: Added item: {i}"); Thread.Sleep(50); } var eventsField = window.GetType().GetField("_events", BindingFlags.Instance | BindingFlags.NonPublic); var events = (List <SlidingWindow <MyItem> .Event>)eventsField.GetValue(window); int count = events.Count; Assert.True(count == 5, $"{DateTime.UtcNow} | Expected 5. Actual {count}.{Environment.NewLine}{log.ToString()}"); // now let the items expire await Task.Delay(1000); // add a new event that shouldn't be expired var evt = new MyItem { Data = 8 }; window.AddEvent(evt); Assert.Equal(1, events.Count); }
public async Task AddEvent_RemovesExpiredItems() { var window = new SlidingWindow <MyItem>(TimeSpan.FromSeconds(1)); for (int i = 0; i < 5; i++) { window.AddEvent(new MyItem { Data = i }); await Task.Delay(100); } var eventsField = window.GetType().GetField("_events", BindingFlags.Instance | BindingFlags.NonPublic); var events = (List <SlidingWindow <MyItem> .Event>)eventsField.GetValue(window); Assert.Equal(5, events.Count); // now let the items expire await Task.Delay(1000); // add a new event that shouldn't be expired var evt = new MyItem { Data = 8 }; window.AddEvent(evt); Assert.Equal(1, events.Count); }