Пример #1
0
        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));
        }
Пример #2
0
    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);
            }
        }
Пример #5
0
        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));
        }
Пример #6
0
        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));
        }