public void When_multiple_messages_written_then_they_are_consumed_in_order_leaving_nothing()
        {
            var guidMessages = new GuidMessageReaderWriter();
            var store = new SegmentChainMessageStore(guidMessages, _pool);

            var lowerBoundEstimationOfMessagesPerSegment = SingleThreadSegmentPool.SegmentSize/sizeof (Guid);
            var atLeastTwoSegmentsOfMessages = lowerBoundEstimationOfMessagesPerSegment*2;

            var guids = Enumerable.Range(0, atLeastTwoSegmentsOfMessages).Select(i => Guid.NewGuid()).ToArray();
            var env = new Envelope();
            var head = default(Segment*);

            fixed (Guid* g = guids)
            {
                for (var i = 0; i < guids.Length; i++)
                {
                    store.Write(ref env, ref *(g + i), ref head);
                }
            }

            store.Consume(guidMessages.MessageHandler, ref head);
            CollectionAssert.AreEquivalent(guids, guidMessages.Received);

            // nothing is left
            guidMessages.Received.Clear();

            store.Consume(guidMessages.MessageHandler, ref head);
            CollectionAssert.IsEmpty(guidMessages.Received);
        }
        public void When_multiple_messages_written_then_they_are_consumed_in_order_leaving_nothing()
        {
            var guidMessages = new GuidMessageReaderWriter();
            var store        = new SegmentChainMessageStore(guidMessages, _pool);

            var lowerBoundEstimationOfMessagesPerSegment = SingleThreadSegmentPool.SegmentSize / sizeof(Guid);
            var atLeastTwoSegmentsOfMessages             = lowerBoundEstimationOfMessagesPerSegment * 2;

            var guids = Enumerable.Range(0, atLeastTwoSegmentsOfMessages).Select(i => Guid.NewGuid()).ToArray();
            var env   = new Envelope();
            var head  = default(Segment *);

            fixed(Guid *g = guids)
            {
                for (var i = 0; i < guids.Length; i++)
                {
                    store.Write(ref env, ref *(g + i), ref head);
                }
            }

            store.Consume(guidMessages.MessageHandler, ref head);
            CollectionAssert.AreEquivalent(guids, guidMessages.Received);

            // nothing is left
            guidMessages.Received.Clear();

            store.Consume(guidMessages.MessageHandler, ref head);
            CollectionAssert.IsEmpty(guidMessages.Received);
        }
Beispiel #3
0
 public void SetUp()
 {
     _writer = new GuidMessageReaderWriter();
     _wheel = new TimerWheel(Actor, _pool, _writer, _writer.MessageHandler, TickLength, GetTicks, TicksPerSecond);
 }
Beispiel #4
0
 public void SetUp()
 {
     _writer = new GuidMessageReaderWriter();
     _wheel  = new TimerWheel(Actor, _pool, _writer, _writer.MessageHandler, TickLength, GetTicks, TicksPerSecond);
 }