public void ShouldPollForEvents() { var gatingSequence = new Sequence(); var sequencer = new SingleProducerSequencer(16, new BusySpinWaitStrategy()); bool Handler(object e, long s, bool b) => false; var data = new object[16]; var provider = new DataProvider(data); var poller = sequencer.NewPoller(provider, gatingSequence); var evt = new object(); data[0] = evt; Assert.That(poller.Poll(Handler), Is.EqualTo(PollState.Idle)); // Publish Event. sequencer.Publish(sequencer.Next()); Assert.That(poller.Poll(Handler), Is.EqualTo(PollState.Gating)); gatingSequence.IncrementAndGet(); Assert.That(poller.Poll(Handler), Is.EqualTo(PollState.Processing)); }
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 UseDirectCalls() { for (var i = 0; i < _operationsPerInvoke; i++) { var sequence = _singleProducerSequencer.Next(); _singleProducerSequencer.Publish(sequence); } }
public void ShouldNotUpdateCursorDuringHasAvailableCapacity() { var sequencer = new SingleProducerSequencer(16, new BusySpinWaitStrategy()); for (int i = 0; i < 32; i++) { var next = sequencer.Next(); Assert.That(sequencer.Cursor, Is.Not.EqualTo(next)); sequencer.HasAvailableCapacity(13); Assert.That(sequencer.Cursor, Is.Not.EqualTo(next)); sequencer.Publish(next); } }
public void Should_Poll_For_Events() { var gatingSequence = new Sequence(); var sequencer = new SingleProducerSequencer(16, new BusySpinWaitStrategy()); var handler = new EventPollerHandler(); var data = new object[16]; var provider = new DataProvider(data); var poller = sequencer.NewPoller(provider, gatingSequence); var @event = new object(); data[0] = @event; Assert.Equal(EventPoller <object> .PollState.Idle, poller.Poll(handler)); sequencer.Publish(sequencer.Next()); Assert.Equal(EventPoller <object> .PollState.Gating, poller.Poll(handler)); gatingSequence.IncrementAndGet(); Assert.Equal(EventPoller <object> .PollState.Processing, poller.Poll(handler)); }
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)); }