public void ShouldPollForEvents_Batch() { var gatingSequence = new Sequence(); var sequencer = new SingleProducerSequencer(16, new BusySpinWaitStrategy()); void Handler(EventBatch <object> batch, long s) { } var provider = new ArrayDataProvider <object>(new object[16]); provider.Data[0] = new object(); var poller = sequencer.NewPoller(provider, gatingSequence); Assert.That(poller.Poll(Handler), Is.EqualTo(EventPoller.PollState.Idle)); // Publish Event. sequencer.Publish(sequencer.Next()); Assert.That(poller.Poll(Handler), Is.EqualTo(EventPoller.PollState.Gating)); gatingSequence.IncrementAndGet(); Assert.That(poller.Poll(Handler), Is.EqualTo(EventPoller.PollState.Processing)); }
public void GetEventAtIndex_IndexOutOfRange_ExceptionThrow(long index) { var arraySize = 6; var array = _fixture.CreateMany <PayloadEvent>(arraySize).ToArray(); var dataProvider = new ArrayDataProvider(array); Assert.ThrowsAsync <IndexOutOfRangeException>(async() => await dataProvider.GetEventAtIndexAsync(index)); }
public void GetGlobalStopTick_ShouldReturnTicksOfLastEvent() { var arraySize = 6; var array = _fixture.CreateMany <PayloadEvent>(arraySize).ToArray(); var dataProvider = new ArrayDataProvider(array); var stopTicks = dataProvider.GetGlobalStopTick(); stopTicks.Should().Be(array[arraySize - 1].Ticks); }
public void GetGlobalEventsCount_ReturnsCount_ShouldBeSuccess() { var arraySize = 6; var array = _fixture.CreateMany <PayloadEvent>(arraySize).ToArray(); var dataProvider = new ArrayDataProvider(array); var globalCount = dataProvider.GetGlobalEventsCount(); globalCount.Should().Be(arraySize); }
public async Task GetEventsBetween_GetAllElements_ArrayShouldBeEquivalentToSource() { var arraySize = 6; var array = _fixture.CreateMany <PayloadEvent>(arraySize).ToArray(); var dataProvider = new ArrayDataProvider(array); var actual = await dataProvider.GetEventsBetweenAsync(0, 5); actual.Should().BeEquivalentTo(array); }
public async Task GetEventsBetween_GetSubsequence_EquivalentElements() { var arraySize = 6; var array = _fixture.CreateMany <PayloadEvent>(arraySize).ToArray(); var dataProvider = new ArrayDataProvider(array); var events = await dataProvider.GetEventsBetweenAsync(2, 3); var actual = events.ToArray(); actual.Length.Should().Be(2); actual[0].Should().BeEquivalentTo(array[2]); actual[1].Should().BeEquivalentTo(array[3]); }
public async Task GetEventAtIndex_SimpleValue_ReturnedEquals() { var arraySize = 6; var array = _fixture.CreateMany <PayloadEvent>(arraySize).ToArray(); var dataProvider = new ArrayDataProvider(array); for (int i = 0; i < arraySize; i++) { var value = await dataProvider.GetEventAtIndexAsync(i); value.Should().BeEquivalentTo(array[i]); } }
public void Init() { _array = _fixture.CreateMany <PayloadEvent>(6).ToArray(); _array[0].Ticks = 50; _array[1].Ticks = 70; _array[2].Ticks = 100; _array[3].Ticks = 120; _array[4].Ticks = 150; _array[5].Ticks = 200; var loggerMock = new Mock <ILogger>(); var dataProvider = new ArrayDataProvider(_array); _densityApi = new DensityApi(loggerMock.Object, dataProvider); }
public void ShouldAlwaysHalt() { var waitStrategy = new AsyncWaitStrategy(); var sequencer = new SingleProducerSequencer(8, waitStrategy); var barrier = new AsyncSequenceBarrier(sequencer, waitStrategy, new Sequence(-1), new Sequence[0]); var dp = new ArrayDataProvider <object>(sequencer.BufferSize); var h1 = new LifeCycleHandler(); var p1 = CreateEventProcessor(dp, barrier, h1); p1.Halt(); p1.Start(); Assert.IsTrue(h1.WaitStart(TimeSpan.FromSeconds(2))); Assert.IsTrue(h1.WaitShutdown(TimeSpan.FromSeconds(2))); for (int i = 0; i < 1000; i++) { var h2 = new LifeCycleHandler(); var p2 = CreateEventProcessor(dp, barrier, h2); p2.Start(); p2.Halt(); Assert.IsTrue(h2.WaitStart(TimeSpan.FromSeconds(2))); Assert.IsTrue(h2.WaitShutdown(TimeSpan.FromSeconds(2))); } for (int i = 0; i < 1000; i++) { var h2 = new LifeCycleHandler(); var p2 = CreateEventProcessor(dp, barrier, h2); p2.Start(); Thread.Yield(); p2.Halt(); Assert.IsTrue(h2.WaitStart(TimeSpan.FromSeconds(2))); Assert.IsTrue(h2.WaitShutdown(TimeSpan.FromSeconds(2))); } }
public void ShouldPollForEvents() { var gatingSequence = new Sequence(); var sequencer = new SingleProducerSequencer(16, new BusySpinWaitStrategy()); bool Handler(ref decimal e, long s, bool b) => false; var provider = new ArrayDataProvider <decimal>(new decimal[16]); provider.Data[0] = 42m; var poller = sequencer.NewPoller(provider.AsValueDataProvider(), gatingSequence); Assert.That(poller.Poll(Handler), Is.EqualTo(EventPoller.PollState.Idle)); // Publish Event. sequencer.Publish(sequencer.Next()); Assert.That(poller.Poll(Handler), Is.EqualTo(EventPoller.PollState.Gating)); gatingSequence.IncrementAndGet(); Assert.That(poller.Poll(Handler), Is.EqualTo(EventPoller.PollState.Processing)); }