static void TestWriteRead(SpanWriterAction writeAction, byte[] checkResult, SpanReaderAction readAction, SpanReaderAction?skipAction) { Span <byte> buf = stackalloc byte[1]; var sw = new SpanWriter(buf); writeAction(ref sw); Assert.Equal(checkResult, sw.GetSpan().ToArray()); SpanReader sr; if (checkResult.Length > 1) { sw = new SpanWriter(new Span <byte>()); writeAction(ref sw); Assert.Equal(checkResult, sw.GetSpanAndReset().ToArray()); writeAction(ref sw); Assert.Equal(checkResult, sw.GetSpan().ToArray()); } sr = new SpanReader(checkResult); readAction(ref sr); Assert.True(sr.Eof); sw = new SpanWriter(); writeAction(ref sw); writeAction(ref sw); Assert.Equal(checkResult.Concat(checkResult).ToArray(), sw.GetByteBufferAndReset().ToByteArray()); sr = new SpanReader(checkResult.Concat(checkResult).ToArray()); readAction(ref sr); readAction(ref sr); if (skipAction != null) { sr = new SpanReader(checkResult.Concat(checkResult).ToArray()); skipAction(ref sr); readAction(ref sr); Assert.True(sr.Eof); sr = new SpanReader(checkResult.Concat(checkResult).ToArray()); readAction(ref sr); skipAction(ref sr); Assert.True(sr.Eof); } }