public void Add_WhenItemIsNotInsideOfWindowRangeButItsBucketIs_ShouldIncludeTheBucketInWindow() { // Arrange var items = CreateTradeItemsList(new[] { 0, 990 }, new[] { 10, 20 }); var window = new SlidingWindow <Trade>(TimeSpan.FromMilliseconds(999), 100, Trade.CreateCalculation, testDateTimeProvider); // Act testDateTimeProvider.Now = items[0].TimeStamp; window.Add(items[0]); testDateTimeProvider.Now = items[1].TimeStamp; window.Add(items[1]); var calculation = window.GetCalculationFor(items[0].TimeStamp.AddMilliseconds(900)) as Calculation; // Assert Assert.Equal((15, 2), (calculation.Volume, calculation.CurrentCount)); }
public void SlidingWindow_IfShiftToRight_AdjustsCorrectly(int shift, int expectedVolume, int expectedCount) { // Arrange var items = CreateTradeItemsList(new[] { -1000, -900, -800, -700, -600, -500, -400, -300, -200, -100, 0 }, new[] { 1000, 900, 800, 700, 600, 500, 400, 300, 200, 100, 0 }); var window = new SlidingWindow <Trade>(TimeSpan.FromMilliseconds(500), 10, Trade.CreateCalculation, testDateTimeProvider); // Act foreach (var item in items) { testDateTimeProvider.Now = item.TimeStamp; window.Add(item); } var currentCalculation = window.GetCurrentWindowCalculation() as Calculation; var shiftRight = window.GetCalculationFor(testDateTimeProvider.Now.AddMilliseconds(shift)) as Calculation; // Assert Assert.Equal((1500m / 6, 6), (currentCalculation.Volume, currentCalculation.CurrentCount)); Assert.Equal((expectedVolume, expectedCount), (shiftRight.Volume, shiftRight.CurrentCount)); }
public void SlidingWindow_IfShiftToLeft_AdjustsCorrectly() { // Arrange var trades = CreateTradeItemsList(new[] { -1000, -900, -800, -700, -600, -500, -400, -300, -200, -100, 0 }, new[] { 1000, 900, 800, 700, 600, 500, 400, 300, 200, 100, 0 }); var window = new SlidingWindow <Trade>(TimeSpan.FromMilliseconds(500), 10, Trade.CreateCalculation, testDateTimeProvider); // Act foreach (var trade in trades) { testDateTimeProvider.Now = trade.TimeStamp; window.Add(trade); } var currentCalculation = window.GetCurrentWindowCalculation() as Calculation; var shiftLeft = window.GetCalculationFor(testDateTimeProvider.Now.AddMilliseconds(-250)) as Calculation; // Assert Assert.Equal((250, 6), (currentCalculation.Volume, currentCalculation.CurrentCount)); Assert.Equal((2500m / 5, 5), (shiftLeft.Volume, shiftLeft.CurrentCount)); }