Esempio n. 1
0
        public void RingBuffer_SingleItemPush()
        {
            var rb = new SingleConsumerRingBuffer <long>(3);

            long item = 910;

            Assert.True(rb.TryPush(ref item));
            Assert.True(rb.TryPush(ref item));
            Assert.True(rb.TryPush(ref item));
            Assert.True(rb.TryPush(ref item));
            Assert.False(rb.TryPush(ref item));

            var span = rb.Acquire();

            Assert.Equal(4, span.Length);
            Assert.Equal(910, span[0].Item);
            Assert.Equal(910, span[1].Item);
            Assert.Equal(910, span[2].Item);
            Assert.Equal(910, span[3].Item);

            item = 911;
            Assert.False(rb.TryPush(ref item));
            rb.Release();

            Assert.True(rb.TryPush(ref item));

            span = rb.Acquire();
            Assert.Equal(1, span.Length);
            Assert.Equal(911, span[0].Item);
            rb.Release();
        }
Esempio n. 2
0
        public void RingBuffer_MultipleAcquires_SingleRelease()
        {
            var rb = new SingleConsumerRingBuffer <long>(4);

            long item = 910;

            Assert.True(rb.TryPush(ref item));
            Assert.True(rb.TryPush(ref item));

            var span = rb.Acquire();

            Assert.Equal(2, span.Length);
            Assert.Equal(910, span[0].Item);
            Assert.Equal(910, span[1].Item);

            item = 911;
            Assert.True(rb.TryPush(ref item));
            Assert.True(rb.TryPush(ref item));

            span = rb.Acquire();
            Assert.Equal(2, span.Length);
            Assert.Equal(911, span[0].Item);
            Assert.Equal(911, span[1].Item);

            item = 912;
            Assert.False(rb.TryPush(ref item));

            rb.Release();

            item = 912;
            Assert.True(rb.TryPush(ref item));
        }