Commit 0d87e836 authored by Marc Gravell's avatar Marc Gravell

make fact into theory

parent dfccbd4a
...@@ -9,10 +9,11 @@ namespace StackExchange.Redis.Tests ...@@ -9,10 +9,11 @@ namespace StackExchange.Redis.Tests
public class Parse : TestBase public class Parse : TestBase
{ {
public Parse(ITestOutputHelper output) : base(output) { } public Parse(ITestOutputHelper output) : base(output) { }
[Fact] [Theory]
public void EvilParse() [InlineData("$4\r\nPING\r\n$4\r\nPONG\r\n$4\r\r", 2)]
public void ParseAsSingleChunk(string ascii, int expected)
{ {
ReadOnlySequence<byte> buffer = new ReadOnlySequence<byte>(Encoding.ASCII.GetBytes($"$4\r\nPING\r\n$4\r\nPONG\r\n")); ReadOnlySequence<byte> buffer = new ReadOnlySequence<byte>(Encoding.ASCII.GetBytes(ascii));
var reader = new BufferReader(buffer); var reader = new BufferReader(buffer);
...@@ -23,37 +24,31 @@ public void EvilParse() ...@@ -23,37 +24,31 @@ public void EvilParse()
Writer.WriteLine($"{result} - {result.GetString()}"); Writer.WriteLine($"{result} - {result.GetString()}");
found++; found++;
} }
Assert.Equal(2, found); Assert.Equal(expected, found);
} }
class FragmentedSegment : ReadOnlySequenceSegment<byte> class FragmentedSegment : ReadOnlySequenceSegment<byte>
{ {
public FragmentedSegment(long runningIndex, ReadOnlyMemory<byte> memory)
{
RunningIndex = runningIndex;
Memory = memory;
}
public new FragmentedSegment Next public new FragmentedSegment Next
{ {
get => (FragmentedSegment)base.Next; get => (FragmentedSegment)base.Next;
set => base.Next = value; set => base.Next = value;
} }
public new ReadOnlyMemory<byte> Memory
{
get => base.Memory;
set => base.Memory = value;
}
public new long RunningIndex
{
get => base.RunningIndex;
set => base.RunningIndex = value;
}
} }
[Fact] [Theory]
public void EvilParse2() [InlineData("$4\r\nPING\r\n$4\r\nPONG\r\n$4\r\r", 2)]
public void ParseAsLotsOfChunks(string ascii, int messages)
{ {
var bytes = Encoding.ASCII.GetBytes($"$4\r\nPING\r\n$4\r\nPONG\r\n"); var bytes = Encoding.ASCII.GetBytes(ascii);
FragmentedSegment chain = null, tail = null; FragmentedSegment chain = null, tail = null;
for(int i = 0; i < bytes.Length; i++) for(int i = 0; i < bytes.Length; i++)
{ {
var next = new FragmentedSegment(); var next = new FragmentedSegment(i, new ReadOnlyMemory<byte>(bytes, i, 1));
next.RunningIndex = i;
next.Memory = new ReadOnlyMemory<byte>(bytes, i, 1);
if(tail == null) if(tail == null)
{ {
chain = next; chain = next;
...@@ -77,7 +72,7 @@ public void EvilParse2() ...@@ -77,7 +72,7 @@ public void EvilParse2()
Writer.WriteLine($"{result} - {result.GetString()}"); Writer.WriteLine($"{result} - {result.GetString()}");
found++; found++;
} }
Assert.Equal(2, found); Assert.Equal(messages, found);
} }
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment