public void ZeroSegmentPayload() { var sliceBuffer = new ReusableSliceBuffer(); var sequence = sliceBuffer.PopulateFrom(fakeBufferReaderManager.CreateMultiSegmentBufferReader(new List <byte[]> { })); Assert.AreEqual(ReadOnlySequence <byte> .Empty, sequence); Assert.IsTrue(sequence.IsEmpty); Assert.IsTrue(sequence.IsSingleSegment); }
public void MultiSegmentPayload_LotsOfSegments() { var bufferSegments = Enumerable.Range(0, ReusableSliceBuffer.MaxCachedSegments + 100).Select((_) => GetTestBuffer(10)).ToList(); var sliceBuffer = new ReusableSliceBuffer(); var sequence = sliceBuffer.PopulateFrom(fakeBufferReaderManager.CreateMultiSegmentBufferReader(bufferSegments)); int index = 0; foreach (var memory in sequence) { CollectionAssert.AreEqual(bufferSegments[index], memory.ToArray()); index++; } }
public void InvalidateMakesSequenceUnusable() { var origBuffer = GetTestBuffer(100); var sliceBuffer = new ReusableSliceBuffer(); var sequence = sliceBuffer.PopulateFrom(fakeBufferReaderManager.CreateMultiSegmentBufferReader(new List <byte[]> { origBuffer })); Assert.AreEqual(origBuffer.Length, sequence.Length); sliceBuffer.Invalidate(); // Invalidate with make the returned sequence completely unusable and broken, users must not use it beyond the deserializer functions. Assert.Throws(typeof(ArgumentOutOfRangeException), () => { var first = sequence.First; }); }
public void SegmentsAreCached() { var bufferSegments1 = Enumerable.Range(0, 100).Select((_) => GetTestBuffer(50)).ToList(); var bufferSegments2 = Enumerable.Range(0, 100).Select((_) => GetTestBuffer(50)).ToList(); var sliceBuffer = new ReusableSliceBuffer(); var sequence1 = sliceBuffer.PopulateFrom(fakeBufferReaderManager.CreateMultiSegmentBufferReader(bufferSegments1)); var memoryManagers1 = GetMemoryManagersForSequenceSegments(sequence1); sliceBuffer.Invalidate(); var sequence2 = sliceBuffer.PopulateFrom(fakeBufferReaderManager.CreateMultiSegmentBufferReader(bufferSegments2)); var memoryManagers2 = GetMemoryManagersForSequenceSegments(sequence2); // check memory managers are identical objects (i.e. they've been reused) CollectionAssert.AreEquivalent(memoryManagers1, memoryManagers2); }
public void NullPayload() { var sliceBuffer = new ReusableSliceBuffer(); Assert.Throws(typeof(ArgumentNullException), () => sliceBuffer.PopulateFrom(fakeBufferReaderManager.CreateNullPayloadBufferReader())); }