public void Add_NewItemAdded_ShouldCleanUpOldBuckets() { // Arrange var window = new SlidingWindow <Trade>(TimeSpan.FromMilliseconds(100), 1000, Trade.CreateCalculation, testDateTimeProvider); var olderItem = CreateTradeItem(DateTime.Now.AddMilliseconds(-1000)); var newerItem = CreateTradeItem(DateTime.Now); // Act testDateTimeProvider.Now = olderItem.TimeStamp; window.Add(olderItem); testDateTimeProvider.Now = newerItem.TimeStamp; window.Add(newerItem); // Assert var bucketsList = window.GetBuckets().Item1; var buckets = window.GetBuckets().Item2; Assert.Single(buckets); Assert.Single(bucketsList); Assert.False(buckets.ContainsKey(window.GetTimeStampKey(olderItem.TimeStamp))); Assert.Equal(window.GetTimeStampKey(newerItem.TimeStamp), bucketsList.First.Value.TimeStampKey); }
public void Add_IfTimestampsDifferMoreThanBucketInterval_ShouldCreateNewBucket(int bucketInterval, int shift) { // Arrange var window = new SlidingWindow <Trade>(TimeSpan.FromMinutes(1), bucketInterval, Trade.CreateCalculation); var olderItem = CreateTradeItem(DateTime.Now.AddMilliseconds(shift)); var newerItem = CreateTradeItem(DateTime.Now); // Act window.Add(olderItem); window.Add(newerItem); // Assert var buckets = window.GetBuckets().Item2; var firstBucket = buckets[window.GetTimeStampKey(olderItem.TimeStamp)]; var secondBucket = buckets[window.GetTimeStampKey(newerItem.TimeStamp)]; Assert.NotEqual(firstBucket, secondBucket); }
public void Add_WhenBucketsAreOlderThanInterval_ShouldRemoveOlderBuckets() { // Arrange var windowInterval = TimeSpan.FromMilliseconds(500); var items = CreateTradeItemsList(new[] { -2000, -1000, 0 }, new[] { 200, 100, 10 }); var window = new SlidingWindow <Trade>(windowInterval, 500, Trade.CreateCalculation, testDateTimeProvider); // Act foreach (var item in items) { testDateTimeProvider.Now = item.TimeStamp; window.Add(item); } var buckets = window.GetBuckets().Item1; var expectedOldestTimeStampKey = window.GetTimeStampKey(testDateTimeProvider.Now.Add(-windowInterval * 2)); // Assert Assert.True(buckets.All(b => b.TimeStampKey >= expectedOldestTimeStampKey)); }