public void ShouldAlwaysHalt() { var waitStrategy = new BusySpinWaitStrategy(); var sequencer = new SingleProducerSequencer(8, waitStrategy); var barrier = new SequenceBarrier(sequencer, waitStrategy, new Sequence(-1), new Sequence[0]); var dp = new ArrayValueDataProvider <long>(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 ArrayValueDataProvider <decimal>(new decimal[16]); provider.Data[0] = 42m; 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)); }