From 836742e39f6bc86b453cc9957f0e963b3e6eb191 Mon Sep 17 00:00:00 2001 From: Ben Adams Date: Thu, 1 Nov 2018 04:14:59 +0000 Subject: [PATCH 1/2] Extend Span.IndexOfAny(..., ROS) tests --- .../tests/ReadOnlySpan/IndexOfAny.byte.cs | 70 +++++++++++++++++++ .../tests/Span/IndexOfAny.byte.cs | 70 +++++++++++++++++++ 2 files changed, 140 insertions(+) diff --git a/src/System.Memory/tests/ReadOnlySpan/IndexOfAny.byte.cs b/src/System.Memory/tests/ReadOnlySpan/IndexOfAny.byte.cs index 1a62c4067749..67bb7babc641 100644 --- a/src/System.Memory/tests/ReadOnlySpan/IndexOfAny.byte.cs +++ b/src/System.Memory/tests/ReadOnlySpan/IndexOfAny.byte.cs @@ -61,12 +61,14 @@ public static void ZeroLengthIndexOfTwo_Byte() ReadOnlySpan sp = new ReadOnlySpan(Array.Empty()); int idx = sp.IndexOfAny(0, 0); Assert.Equal(-1, idx); + Assert.Equal(idx, sp.IndexOfAny(new byte[2])); } [Fact] public static void DefaultFilledIndexOfTwo_Byte() { Random rnd = new Random(42); + Span values = new Span(new byte[2]); for (int length = 0; length < byte.MaxValue; length++) { @@ -80,8 +82,11 @@ public static void DefaultFilledIndexOfTwo_Byte() int index = rnd.Next(0, 2) == 0 ? 0 : 1; byte target0 = targets[index]; byte target1 = targets[(index + 1) % 2]; + values[0] = target0; + values[1] = target1; int idx = span.IndexOfAny(target0, target1); Assert.Equal(0, idx); + Assert.Equal(idx, span.IndexOfAny(values)); } } } @@ -97,29 +102,39 @@ public static void TestMatchTwo_Byte() a[i] = (byte)(i + 1); } ReadOnlySpan span = new ReadOnlySpan(a); + Span values = new Span(new byte[2]); for (int targetIndex = 0; targetIndex < length; targetIndex++) { byte target0 = a[targetIndex]; byte target1 = 0; + values[0] = target0; + values[1] = target1; int idx = span.IndexOfAny(target0, target1); Assert.Equal(targetIndex, idx); + Assert.Equal(idx, span.IndexOfAny(values)); } for (int targetIndex = 0; targetIndex < length - 1; targetIndex++) { byte target0 = a[targetIndex]; byte target1 = a[targetIndex + 1]; + values[0] = target0; + values[1] = target1; int idx = span.IndexOfAny(target0, target1); Assert.Equal(targetIndex, idx); + Assert.Equal(idx, span.IndexOfAny(values)); } for (int targetIndex = 0; targetIndex < length - 1; targetIndex++) { byte target0 = 0; byte target1 = a[targetIndex + 1]; + values[0] = target0; + values[1] = target1; int idx = span.IndexOfAny(target0, target1); Assert.Equal(targetIndex + 1, idx); + Assert.Equal(idx, span.IndexOfAny(values)); } } } @@ -128,21 +143,29 @@ public static void TestMatchTwo_Byte() public static void TestNoMatchTwo_Byte() { Random rnd = new Random(42); + Span values = new Span(new byte[2]); for (int length = 0; length < byte.MaxValue; length++) { byte[] a = new byte[length]; byte target0 = (byte)rnd.Next(1, 256); byte target1 = (byte)rnd.Next(1, 256); + values[0] = target0; + values[1] = target1; ReadOnlySpan span = new ReadOnlySpan(a); int idx = span.IndexOfAny(target0, target1); Assert.Equal(-1, idx); + Assert.Equal(idx, span.IndexOfAny(values)); } } [Fact] public static void TestMultipleMatchTwo_Byte() { + Span values = new Span(new byte[2]); + values[0] = 200; + values[1] = 200; + for (int length = 3; length < byte.MaxValue; length++) { byte[] a = new byte[length]; @@ -159,12 +182,17 @@ public static void TestMultipleMatchTwo_Byte() ReadOnlySpan span = new ReadOnlySpan(a); int idx = span.IndexOfAny(200, 200); Assert.Equal(length - 3, idx); + Assert.Equal(idx, span.IndexOfAny(values)); } } [Fact] public static void MakeSureNoChecksGoOutOfRangeTwo_Byte() { + Span values = new Span(new byte[2]); + values[0] = 99; + values[1] = 98; + for (int length = 1; length < byte.MaxValue; length++) { byte[] a = new byte[length + 2]; @@ -173,8 +201,11 @@ public static void MakeSureNoChecksGoOutOfRangeTwo_Byte() ReadOnlySpan span = new ReadOnlySpan(a, 1, length - 1); int index = span.IndexOfAny(99, 98); Assert.Equal(-1, index); + Assert.Equal(index, span.IndexOfAny(values)); } + values[0] = 99; + values[1] = 99; for (int length = 1; length < byte.MaxValue; length++) { byte[] a = new byte[length + 2]; @@ -183,6 +214,7 @@ public static void MakeSureNoChecksGoOutOfRangeTwo_Byte() ReadOnlySpan span = new ReadOnlySpan(a, 1, length - 1); int index = span.IndexOfAny(99, 99); Assert.Equal(-1, index); + Assert.Equal(index, span.IndexOfAny(values)); } } @@ -192,12 +224,14 @@ public static void ZeroLengthIndexOfThree_Byte() ReadOnlySpan sp = new ReadOnlySpan(Array.Empty()); int idx = sp.IndexOfAny(0, 0, 0); Assert.Equal(-1, idx); + Assert.Equal(idx, sp.IndexOfAny(new byte[3])); } [Fact] public static void DefaultFilledIndexOfThree_Byte() { Random rnd = new Random(42); + Span values = new Span(new byte[3]); for (int length = 0; length < byte.MaxValue; length++) { @@ -212,8 +246,12 @@ public static void DefaultFilledIndexOfThree_Byte() byte target0 = targets[index]; byte target1 = targets[(index + 1) % 2]; byte target2 = targets[(index + 1) % 3]; + values[0] = target0; + values[1] = target1; + values[2] = target2; int idx = span.IndexOfAny(target0, target1, target2); Assert.Equal(0, idx); + Assert.Equal(idx, span.IndexOfAny(values)); } } } @@ -221,6 +259,7 @@ public static void DefaultFilledIndexOfThree_Byte() [Fact] public static void TestMatchThree_Byte() { + Span values = new Span(new byte[3]); for (int length = 0; length < byte.MaxValue; length++) { byte[] a = new byte[length]; @@ -235,8 +274,12 @@ public static void TestMatchThree_Byte() byte target0 = a[targetIndex]; byte target1 = 0; byte target2 = 0; + values[0] = target0; + values[1] = target1; + values[2] = target2; int idx = span.IndexOfAny(target0, target1, target2); Assert.Equal(targetIndex, idx); + Assert.Equal(idx, span.IndexOfAny(values)); } for (int targetIndex = 0; targetIndex < length - 2; targetIndex++) @@ -244,8 +287,12 @@ public static void TestMatchThree_Byte() byte target0 = a[targetIndex]; byte target1 = a[targetIndex + 1]; byte target2 = a[targetIndex + 2]; + values[0] = target0; + values[1] = target1; + values[2] = target2; int idx = span.IndexOfAny(target0, target1, target2); Assert.Equal(targetIndex, idx); + Assert.Equal(idx, span.IndexOfAny(values)); } for (int targetIndex = 0; targetIndex < length - 2; targetIndex++) @@ -253,8 +300,12 @@ public static void TestMatchThree_Byte() byte target0 = 0; byte target1 = 0; byte target2 = a[targetIndex + 2]; + values[0] = target0; + values[1] = target1; + values[2] = target2; int idx = span.IndexOfAny(target0, target1, target2); Assert.Equal(targetIndex + 2, idx); + Assert.Equal(idx, span.IndexOfAny(values)); } } } @@ -262,6 +313,7 @@ public static void TestMatchThree_Byte() [Fact] public static void TestNoMatchThree_Byte() { + Span values = new Span(new byte[3]); Random rnd = new Random(42); for (int length = 0; length < byte.MaxValue; length++) { @@ -269,16 +321,24 @@ public static void TestNoMatchThree_Byte() byte target0 = (byte)rnd.Next(1, 256); byte target1 = (byte)rnd.Next(1, 256); byte target2 = (byte)rnd.Next(1, 256); + values[0] = target0; + values[1] = target1; + values[2] = target2; ReadOnlySpan span = new ReadOnlySpan(a); int idx = span.IndexOfAny(target0, target1, target2); Assert.Equal(-1, idx); + Assert.Equal(idx, span.IndexOfAny(values)); } } [Fact] public static void TestMultipleMatchThree_Byte() { + Span values = new Span(new byte[3]); + values[0] = 200; + values[1] = 200; + values[2] = 200; for (int length = 4; length < byte.MaxValue; length++) { byte[] a = new byte[length]; @@ -296,12 +356,17 @@ public static void TestMultipleMatchThree_Byte() ReadOnlySpan span = new ReadOnlySpan(a); int idx = span.IndexOfAny(200, 200, 200); Assert.Equal(length - 4, idx); + Assert.Equal(idx, span.IndexOfAny(values)); } } [Fact] public static void MakeSureNoChecksGoOutOfRangeThree_Byte() { + Span values = new Span(new byte[3]); + values[0] = 99; + values[1] = 98; + values[2] = 99; for (int length = 1; length < byte.MaxValue; length++) { byte[] a = new byte[length + 2]; @@ -310,8 +375,12 @@ public static void MakeSureNoChecksGoOutOfRangeThree_Byte() ReadOnlySpan span = new ReadOnlySpan(a, 1, length - 1); int index = span.IndexOfAny(99, 98, 99); Assert.Equal(-1, index); + Assert.Equal(index, span.IndexOfAny(values)); } + values[0] = 99; + values[1] = 99; + values[2] = 99; for (int length = 1; length < byte.MaxValue; length++) { byte[] a = new byte[length + 2]; @@ -320,6 +389,7 @@ public static void MakeSureNoChecksGoOutOfRangeThree_Byte() ReadOnlySpan span = new ReadOnlySpan(a, 1, length - 1); int index = span.IndexOfAny(99, 99, 99); Assert.Equal(-1, index); + Assert.Equal(index, span.IndexOfAny(values)); } } diff --git a/src/System.Memory/tests/Span/IndexOfAny.byte.cs b/src/System.Memory/tests/Span/IndexOfAny.byte.cs index 699477dd80eb..798de85ffb80 100644 --- a/src/System.Memory/tests/Span/IndexOfAny.byte.cs +++ b/src/System.Memory/tests/Span/IndexOfAny.byte.cs @@ -61,12 +61,14 @@ public static void ZeroLengthIndexOfTwo_Byte() Span sp = new Span(Array.Empty()); int idx = sp.IndexOfAny(0, 0); Assert.Equal(-1, idx); + Assert.Equal(idx, sp.IndexOfAny(new byte[2])); } [Fact] public static void DefaultFilledIndexOfTwo_Byte() { Random rnd = new Random(42); + Span values = new Span(new byte[2]); for (int length = 0; length < byte.MaxValue; length++) { @@ -80,8 +82,11 @@ public static void DefaultFilledIndexOfTwo_Byte() int index = rnd.Next(0, 2) == 0 ? 0 : 1; byte target0 = targets[index]; byte target1 = targets[(index + 1) % 2]; + values[0] = target0; + values[1] = target1; int idx = span.IndexOfAny(target0, target1); Assert.Equal(0, idx); + Assert.Equal(idx, span.IndexOfAny(values)); } } } @@ -97,29 +102,39 @@ public static void TestMatchTwo_Byte() a[i] = (byte)(i + 1); } Span span = new Span(a); + Span values = new Span(new byte[2]); for (int targetIndex = 0; targetIndex < length; targetIndex++) { byte target0 = a[targetIndex]; byte target1 = 0; + values[0] = target0; + values[1] = target1; int idx = span.IndexOfAny(target0, target1); Assert.Equal(targetIndex, idx); + Assert.Equal(idx, span.IndexOfAny(values)); } for (int targetIndex = 0; targetIndex < length - 1; targetIndex++) { byte target0 = a[targetIndex]; byte target1 = a[targetIndex + 1]; + values[0] = target0; + values[1] = target1; int idx = span.IndexOfAny(target0, target1); Assert.Equal(targetIndex, idx); + Assert.Equal(idx, span.IndexOfAny(values)); } for (int targetIndex = 0; targetIndex < length - 1; targetIndex++) { byte target0 = 0; byte target1 = a[targetIndex + 1]; + values[0] = target0; + values[1] = target1; int idx = span.IndexOfAny(target0, target1); Assert.Equal(targetIndex + 1, idx); + Assert.Equal(idx, span.IndexOfAny(values)); } } } @@ -128,21 +143,29 @@ public static void TestMatchTwo_Byte() public static void TestNoMatchTwo_Byte() { var rnd = new Random(42); + Span values = new Span(new byte[2]); for (int length = 0; length < byte.MaxValue; length++) { byte[] a = new byte[length]; byte target0 = (byte)rnd.Next(1, 256); byte target1 = (byte)rnd.Next(1, 256); + values[0] = target0; + values[1] = target1; Span span = new Span(a); int idx = span.IndexOfAny(target0, target1); Assert.Equal(-1, idx); + Assert.Equal(idx, span.IndexOfAny(values)); } } [Fact] public static void TestMultipleMatchTwo_Byte() { + Span values = new Span(new byte[2]); + values[0] = 200; + values[1] = 200; + for (int length = 3; length < byte.MaxValue; length++) { byte[] a = new byte[length]; @@ -159,12 +182,17 @@ public static void TestMultipleMatchTwo_Byte() Span span = new Span(a); int idx = span.IndexOfAny(200, 200); Assert.Equal(length - 3, idx); + Assert.Equal(idx, span.IndexOfAny(values)); } } [Fact] public static void MakeSureNoChecksGoOutOfRangeTwo_Byte() { + Span values = new Span(new byte[2]); + values[0] = 99; + values[1] = 98; + for (int length = 1; length < byte.MaxValue; length++) { byte[] a = new byte[length + 2]; @@ -173,8 +201,11 @@ public static void MakeSureNoChecksGoOutOfRangeTwo_Byte() Span span = new Span(a, 1, length - 1); int index = span.IndexOfAny(99, 98); Assert.Equal(-1, index); + Assert.Equal(index, span.IndexOfAny(values)); } + values[0] = 99; + values[1] = 99; for (int length = 1; length < byte.MaxValue; length++) { byte[] a = new byte[length + 2]; @@ -183,6 +214,7 @@ public static void MakeSureNoChecksGoOutOfRangeTwo_Byte() Span span = new Span(a, 1, length - 1); int index = span.IndexOfAny(99, 99); Assert.Equal(-1, index); + Assert.Equal(index, span.IndexOfAny(values)); } } @@ -192,12 +224,14 @@ public static void ZeroLengthIndexOfThree_Byte() Span sp = new Span(Array.Empty()); int idx = sp.IndexOfAny(0, 0, 0); Assert.Equal(-1, idx); + Assert.Equal(idx, sp.IndexOfAny(new byte[3])); } [Fact] public static void DefaultFilledIndexOfThree_Byte() { Random rnd = new Random(42); + Span values = new Span(new byte[3]); for (int length = 0; length < byte.MaxValue; length++) { @@ -212,8 +246,12 @@ public static void DefaultFilledIndexOfThree_Byte() byte target0 = targets[index]; byte target1 = targets[(index + 1) % 2]; byte target2 = targets[(index + 1) % 3]; + values[0] = target0; + values[1] = target1; + values[2] = target2; int idx = span.IndexOfAny(target0, target1, target2); Assert.Equal(0, idx); + Assert.Equal(idx, span.IndexOfAny(values)); } } } @@ -221,6 +259,7 @@ public static void DefaultFilledIndexOfThree_Byte() [Fact] public static void TestMatchThree_Byte() { + Span values = new Span(new byte[3]); for (int length = 0; length < byte.MaxValue; length++) { byte[] a = new byte[length]; @@ -235,8 +274,12 @@ public static void TestMatchThree_Byte() byte target0 = a[targetIndex]; byte target1 = 0; byte target2 = 0; + values[0] = target0; + values[1] = target1; + values[2] = target2; int idx = span.IndexOfAny(target0, target1, target2); Assert.Equal(targetIndex, idx); + Assert.Equal(idx, span.IndexOfAny(values)); } for (int targetIndex = 0; targetIndex < length - 2; targetIndex++) @@ -244,8 +287,12 @@ public static void TestMatchThree_Byte() byte target0 = a[targetIndex]; byte target1 = a[targetIndex + 1]; byte target2 = a[targetIndex + 2]; + values[0] = target0; + values[1] = target1; + values[2] = target2; int idx = span.IndexOfAny(target0, target1, target2); Assert.Equal(targetIndex, idx); + Assert.Equal(idx, span.IndexOfAny(values)); } for (int targetIndex = 0; targetIndex < length - 2; targetIndex++) @@ -253,8 +300,12 @@ public static void TestMatchThree_Byte() byte target0 = 0; byte target1 = 0; byte target2 = a[targetIndex + 2]; + values[0] = target0; + values[1] = target1; + values[2] = target2; int idx = span.IndexOfAny(target0, target1, target2); Assert.Equal(targetIndex + 2, idx); + Assert.Equal(idx, span.IndexOfAny(values)); } } } @@ -262,6 +313,7 @@ public static void TestMatchThree_Byte() [Fact] public static void TestNoMatchThree_Byte() { + Span values = new Span(new byte[3]); var rnd = new Random(42); for (int length = 0; length < byte.MaxValue; length++) { @@ -269,16 +321,24 @@ public static void TestNoMatchThree_Byte() byte target0 = (byte)rnd.Next(1, 256); byte target1 = (byte)rnd.Next(1, 256); byte target2 = (byte)rnd.Next(1, 256); + values[0] = target0; + values[1] = target1; + values[2] = target2; Span span = new Span(a); int idx = span.IndexOfAny(target0, target1, target2); Assert.Equal(-1, idx); + Assert.Equal(idx, span.IndexOfAny(values)); } } [Fact] public static void TestMultipleMatchThree_Byte() { + Span values = new Span(new byte[3]); + values[0] = 200; + values[1] = 200; + values[2] = 200; for (int length = 4; length < byte.MaxValue; length++) { byte[] a = new byte[length]; @@ -296,12 +356,17 @@ public static void TestMultipleMatchThree_Byte() Span span = new Span(a); int idx = span.IndexOfAny(200, 200, 200); Assert.Equal(length - 4, idx); + Assert.Equal(idx, span.IndexOfAny(values)); } } [Fact] public static void MakeSureNoChecksGoOutOfRangeThree_Byte() { + Span values = new Span(new byte[3]); + values[0] = 99; + values[1] = 98; + values[2] = 99; for (int length = 1; length < byte.MaxValue; length++) { byte[] a = new byte[length + 2]; @@ -310,8 +375,12 @@ public static void MakeSureNoChecksGoOutOfRangeThree_Byte() Span span = new Span(a, 1, length - 1); int index = span.IndexOfAny(99, 98, 99); Assert.Equal(-1, index); + Assert.Equal(index, span.IndexOfAny(values)); } + values[0] = 99; + values[1] = 99; + values[2] = 99; for (int length = 1; length < byte.MaxValue; length++) { byte[] a = new byte[length + 2]; @@ -320,6 +389,7 @@ public static void MakeSureNoChecksGoOutOfRangeThree_Byte() Span span = new Span(a, 1, length - 1); int index = span.IndexOfAny(99, 99, 99); Assert.Equal(-1, index); + Assert.Equal(index, span.IndexOfAny(values)); } } From d8f82587dd952a1235e4f2c699817823b46bd97f Mon Sep 17 00:00:00 2001 From: Ben Adams Date: Fri, 2 Nov 2018 00:31:11 +0000 Subject: [PATCH 2/2] Simplify tests --- .../tests/ReadOnlySpan/IndexOfAny.byte.cs | 162 ++++++------------ .../tests/Span/IndexOfAny.byte.cs | 162 ++++++------------ 2 files changed, 108 insertions(+), 216 deletions(-) diff --git a/src/System.Memory/tests/ReadOnlySpan/IndexOfAny.byte.cs b/src/System.Memory/tests/ReadOnlySpan/IndexOfAny.byte.cs index 67bb7babc641..b6384aacaff1 100644 --- a/src/System.Memory/tests/ReadOnlySpan/IndexOfAny.byte.cs +++ b/src/System.Memory/tests/ReadOnlySpan/IndexOfAny.byte.cs @@ -58,17 +58,16 @@ public static void IndexOfAnyStrings_Byte(string raw, string search, char expect [Fact] public static void ZeroLengthIndexOfTwo_Byte() { - ReadOnlySpan sp = new ReadOnlySpan(Array.Empty()); - int idx = sp.IndexOfAny(0, 0); - Assert.Equal(-1, idx); - Assert.Equal(idx, sp.IndexOfAny(new byte[2])); + ReadOnlySpan span = new ReadOnlySpan(Array.Empty()); + + Assert.Equal(-1, span.IndexOfAny(0, 0)); + Assert.Equal(-1, span.IndexOfAny(new byte[2])); } [Fact] public static void DefaultFilledIndexOfTwo_Byte() { Random rnd = new Random(42); - Span values = new Span(new byte[2]); for (int length = 0; length < byte.MaxValue; length++) { @@ -82,11 +81,9 @@ public static void DefaultFilledIndexOfTwo_Byte() int index = rnd.Next(0, 2) == 0 ? 0 : 1; byte target0 = targets[index]; byte target1 = targets[(index + 1) % 2]; - values[0] = target0; - values[1] = target1; - int idx = span.IndexOfAny(target0, target1); - Assert.Equal(0, idx); - Assert.Equal(idx, span.IndexOfAny(values)); + + Assert.Equal(0, span.IndexOfAny(target0, target1)); + Assert.Equal(0, span.IndexOfAny(new[] { target0, target1 })); } } } @@ -102,39 +99,32 @@ public static void TestMatchTwo_Byte() a[i] = (byte)(i + 1); } ReadOnlySpan span = new ReadOnlySpan(a); - Span values = new Span(new byte[2]); for (int targetIndex = 0; targetIndex < length; targetIndex++) { byte target0 = a[targetIndex]; byte target1 = 0; - values[0] = target0; - values[1] = target1; - int idx = span.IndexOfAny(target0, target1); - Assert.Equal(targetIndex, idx); - Assert.Equal(idx, span.IndexOfAny(values)); + + Assert.Equal(targetIndex, span.IndexOfAny(target0, target1)); + Assert.Equal(targetIndex, span.IndexOfAny(new[] { target0, target1 })); } for (int targetIndex = 0; targetIndex < length - 1; targetIndex++) { byte target0 = a[targetIndex]; byte target1 = a[targetIndex + 1]; - values[0] = target0; - values[1] = target1; - int idx = span.IndexOfAny(target0, target1); - Assert.Equal(targetIndex, idx); - Assert.Equal(idx, span.IndexOfAny(values)); + + Assert.Equal(targetIndex, span.IndexOfAny(target0, target1)); + Assert.Equal(targetIndex, span.IndexOfAny(new[] { target0, target1 })); } for (int targetIndex = 0; targetIndex < length - 1; targetIndex++) { byte target0 = 0; byte target1 = a[targetIndex + 1]; - values[0] = target0; - values[1] = target1; - int idx = span.IndexOfAny(target0, target1); - Assert.Equal(targetIndex + 1, idx); - Assert.Equal(idx, span.IndexOfAny(values)); + + Assert.Equal(targetIndex + 1, span.IndexOfAny(target0, target1)); + Assert.Equal(targetIndex + 1, span.IndexOfAny(new[] { target0, target1 })); } } } @@ -143,29 +133,21 @@ public static void TestMatchTwo_Byte() public static void TestNoMatchTwo_Byte() { Random rnd = new Random(42); - Span values = new Span(new byte[2]); for (int length = 0; length < byte.MaxValue; length++) { byte[] a = new byte[length]; byte target0 = (byte)rnd.Next(1, 256); byte target1 = (byte)rnd.Next(1, 256); - values[0] = target0; - values[1] = target1; ReadOnlySpan span = new ReadOnlySpan(a); - int idx = span.IndexOfAny(target0, target1); - Assert.Equal(-1, idx); - Assert.Equal(idx, span.IndexOfAny(values)); + Assert.Equal(-1, span.IndexOfAny(target0, target1)); + Assert.Equal(-1, span.IndexOfAny(new[] { target0, target1 })); } } [Fact] public static void TestMultipleMatchTwo_Byte() { - Span values = new Span(new byte[2]); - values[0] = 200; - values[1] = 200; - for (int length = 3; length < byte.MaxValue; length++) { byte[] a = new byte[length]; @@ -180,58 +162,51 @@ public static void TestMultipleMatchTwo_Byte() a[length - 3] = 200; ReadOnlySpan span = new ReadOnlySpan(a); - int idx = span.IndexOfAny(200, 200); - Assert.Equal(length - 3, idx); - Assert.Equal(idx, span.IndexOfAny(values)); + + Assert.Equal(length - 3, span.IndexOfAny(200, 200)); + Assert.Equal(length - 3, span.IndexOfAny(new byte[] { 200, 200 })); } } [Fact] public static void MakeSureNoChecksGoOutOfRangeTwo_Byte() { - Span values = new Span(new byte[2]); - values[0] = 99; - values[1] = 98; - for (int length = 1; length < byte.MaxValue; length++) { byte[] a = new byte[length + 2]; a[0] = 99; a[length + 1] = 98; ReadOnlySpan span = new ReadOnlySpan(a, 1, length - 1); - int index = span.IndexOfAny(99, 98); - Assert.Equal(-1, index); - Assert.Equal(index, span.IndexOfAny(values)); + + Assert.Equal(-1, span.IndexOfAny(99, 98)); + Assert.Equal(-1, span.IndexOfAny(new byte[] { 99, 98 })); } - values[0] = 99; - values[1] = 99; for (int length = 1; length < byte.MaxValue; length++) { byte[] a = new byte[length + 2]; a[0] = 99; a[length + 1] = 99; ReadOnlySpan span = new ReadOnlySpan(a, 1, length - 1); - int index = span.IndexOfAny(99, 99); - Assert.Equal(-1, index); - Assert.Equal(index, span.IndexOfAny(values)); + + Assert.Equal(-1, span.IndexOfAny(99, 99)); + Assert.Equal(-1, span.IndexOfAny(new byte[] { 99, 99 })); } } [Fact] public static void ZeroLengthIndexOfThree_Byte() { - ReadOnlySpan sp = new ReadOnlySpan(Array.Empty()); - int idx = sp.IndexOfAny(0, 0, 0); - Assert.Equal(-1, idx); - Assert.Equal(idx, sp.IndexOfAny(new byte[3])); + ReadOnlySpan span = new ReadOnlySpan(Array.Empty()); + + Assert.Equal(-1, span.IndexOfAny(0, 0, 0)); + Assert.Equal(-1, span.IndexOfAny(new byte[3])); } [Fact] public static void DefaultFilledIndexOfThree_Byte() { Random rnd = new Random(42); - Span values = new Span(new byte[3]); for (int length = 0; length < byte.MaxValue; length++) { @@ -246,12 +221,9 @@ public static void DefaultFilledIndexOfThree_Byte() byte target0 = targets[index]; byte target1 = targets[(index + 1) % 2]; byte target2 = targets[(index + 1) % 3]; - values[0] = target0; - values[1] = target1; - values[2] = target2; - int idx = span.IndexOfAny(target0, target1, target2); - Assert.Equal(0, idx); - Assert.Equal(idx, span.IndexOfAny(values)); + + Assert.Equal(0, span.IndexOfAny(target0, target1, target2)); + Assert.Equal(0, span.IndexOfAny(new[] { target0, target1, target2 })); } } } @@ -259,7 +231,6 @@ public static void DefaultFilledIndexOfThree_Byte() [Fact] public static void TestMatchThree_Byte() { - Span values = new Span(new byte[3]); for (int length = 0; length < byte.MaxValue; length++) { byte[] a = new byte[length]; @@ -274,12 +245,9 @@ public static void TestMatchThree_Byte() byte target0 = a[targetIndex]; byte target1 = 0; byte target2 = 0; - values[0] = target0; - values[1] = target1; - values[2] = target2; - int idx = span.IndexOfAny(target0, target1, target2); - Assert.Equal(targetIndex, idx); - Assert.Equal(idx, span.IndexOfAny(values)); + + Assert.Equal(targetIndex, span.IndexOfAny(target0, target1, target2)); + Assert.Equal(targetIndex, span.IndexOfAny(new[] { target0, target1, target2 })); } for (int targetIndex = 0; targetIndex < length - 2; targetIndex++) @@ -287,12 +255,9 @@ public static void TestMatchThree_Byte() byte target0 = a[targetIndex]; byte target1 = a[targetIndex + 1]; byte target2 = a[targetIndex + 2]; - values[0] = target0; - values[1] = target1; - values[2] = target2; - int idx = span.IndexOfAny(target0, target1, target2); - Assert.Equal(targetIndex, idx); - Assert.Equal(idx, span.IndexOfAny(values)); + + Assert.Equal(targetIndex, span.IndexOfAny(target0, target1, target2)); + Assert.Equal(targetIndex, span.IndexOfAny(new[] { target0, target1, target2 })); } for (int targetIndex = 0; targetIndex < length - 2; targetIndex++) @@ -300,12 +265,9 @@ public static void TestMatchThree_Byte() byte target0 = 0; byte target1 = 0; byte target2 = a[targetIndex + 2]; - values[0] = target0; - values[1] = target1; - values[2] = target2; - int idx = span.IndexOfAny(target0, target1, target2); - Assert.Equal(targetIndex + 2, idx); - Assert.Equal(idx, span.IndexOfAny(values)); + + Assert.Equal(targetIndex + 2, span.IndexOfAny(target0, target1, target2)); + Assert.Equal(targetIndex + 2, span.IndexOfAny(new[] { target0, target1, target2 })); } } } @@ -313,7 +275,6 @@ public static void TestMatchThree_Byte() [Fact] public static void TestNoMatchThree_Byte() { - Span values = new Span(new byte[3]); Random rnd = new Random(42); for (int length = 0; length < byte.MaxValue; length++) { @@ -321,24 +282,16 @@ public static void TestNoMatchThree_Byte() byte target0 = (byte)rnd.Next(1, 256); byte target1 = (byte)rnd.Next(1, 256); byte target2 = (byte)rnd.Next(1, 256); - values[0] = target0; - values[1] = target1; - values[2] = target2; ReadOnlySpan span = new ReadOnlySpan(a); - int idx = span.IndexOfAny(target0, target1, target2); - Assert.Equal(-1, idx); - Assert.Equal(idx, span.IndexOfAny(values)); + Assert.Equal(-1, span.IndexOfAny(target0, target1, target2)); + Assert.Equal(-1, span.IndexOfAny(new[] { target0, target1, target2 })); } } [Fact] public static void TestMultipleMatchThree_Byte() { - Span values = new Span(new byte[3]); - values[0] = 200; - values[1] = 200; - values[2] = 200; for (int length = 4; length < byte.MaxValue; length++) { byte[] a = new byte[length]; @@ -354,42 +307,35 @@ public static void TestMultipleMatchThree_Byte() a[length - 4] = 200; ReadOnlySpan span = new ReadOnlySpan(a); - int idx = span.IndexOfAny(200, 200, 200); - Assert.Equal(length - 4, idx); - Assert.Equal(idx, span.IndexOfAny(values)); + + Assert.Equal(length - 4, span.IndexOfAny(200, 200, 200)); + Assert.Equal(length - 4, span.IndexOfAny(new byte[] { 200, 200, 200 })); } } [Fact] public static void MakeSureNoChecksGoOutOfRangeThree_Byte() { - Span values = new Span(new byte[3]); - values[0] = 99; - values[1] = 98; - values[2] = 99; for (int length = 1; length < byte.MaxValue; length++) { byte[] a = new byte[length + 2]; a[0] = 99; a[length + 1] = 98; ReadOnlySpan span = new ReadOnlySpan(a, 1, length - 1); - int index = span.IndexOfAny(99, 98, 99); - Assert.Equal(-1, index); - Assert.Equal(index, span.IndexOfAny(values)); + + Assert.Equal(-1, span.IndexOfAny(99, 98, 99)); + Assert.Equal(-1, span.IndexOfAny(new byte[] { 99, 98, 99 })); } - values[0] = 99; - values[1] = 99; - values[2] = 99; for (int length = 1; length < byte.MaxValue; length++) { byte[] a = new byte[length + 2]; a[0] = 99; a[length + 1] = 99; ReadOnlySpan span = new ReadOnlySpan(a, 1, length - 1); - int index = span.IndexOfAny(99, 99, 99); - Assert.Equal(-1, index); - Assert.Equal(index, span.IndexOfAny(values)); + + Assert.Equal(-1, span.IndexOfAny(99, 99, 99)); + Assert.Equal(-1, span.IndexOfAny(new byte[] { 99, 99, 99 })); } } diff --git a/src/System.Memory/tests/Span/IndexOfAny.byte.cs b/src/System.Memory/tests/Span/IndexOfAny.byte.cs index 798de85ffb80..a5250a03e582 100644 --- a/src/System.Memory/tests/Span/IndexOfAny.byte.cs +++ b/src/System.Memory/tests/Span/IndexOfAny.byte.cs @@ -58,17 +58,16 @@ public static void IndexOfAnyStrings_Byte(string raw, string search, char expect [Fact] public static void ZeroLengthIndexOfTwo_Byte() { - Span sp = new Span(Array.Empty()); - int idx = sp.IndexOfAny(0, 0); - Assert.Equal(-1, idx); - Assert.Equal(idx, sp.IndexOfAny(new byte[2])); + Span span = new Span(Array.Empty()); + + Assert.Equal(-1, span.IndexOfAny(0, 0)); + Assert.Equal(-1, span.IndexOfAny(new byte[2])); } [Fact] public static void DefaultFilledIndexOfTwo_Byte() { Random rnd = new Random(42); - Span values = new Span(new byte[2]); for (int length = 0; length < byte.MaxValue; length++) { @@ -82,11 +81,9 @@ public static void DefaultFilledIndexOfTwo_Byte() int index = rnd.Next(0, 2) == 0 ? 0 : 1; byte target0 = targets[index]; byte target1 = targets[(index + 1) % 2]; - values[0] = target0; - values[1] = target1; - int idx = span.IndexOfAny(target0, target1); - Assert.Equal(0, idx); - Assert.Equal(idx, span.IndexOfAny(values)); + + Assert.Equal(0, span.IndexOfAny(target0, target1)); + Assert.Equal(0, span.IndexOfAny(new[] { target0, target1 })); } } } @@ -102,39 +99,32 @@ public static void TestMatchTwo_Byte() a[i] = (byte)(i + 1); } Span span = new Span(a); - Span values = new Span(new byte[2]); for (int targetIndex = 0; targetIndex < length; targetIndex++) { byte target0 = a[targetIndex]; byte target1 = 0; - values[0] = target0; - values[1] = target1; - int idx = span.IndexOfAny(target0, target1); - Assert.Equal(targetIndex, idx); - Assert.Equal(idx, span.IndexOfAny(values)); + + Assert.Equal(targetIndex, span.IndexOfAny(target0, target1)); + Assert.Equal(targetIndex, span.IndexOfAny(new[] { target0, target1 })); } for (int targetIndex = 0; targetIndex < length - 1; targetIndex++) { byte target0 = a[targetIndex]; byte target1 = a[targetIndex + 1]; - values[0] = target0; - values[1] = target1; - int idx = span.IndexOfAny(target0, target1); - Assert.Equal(targetIndex, idx); - Assert.Equal(idx, span.IndexOfAny(values)); + + Assert.Equal(targetIndex, span.IndexOfAny(target0, target1)); + Assert.Equal(targetIndex, span.IndexOfAny(new[] { target0, target1 })); } for (int targetIndex = 0; targetIndex < length - 1; targetIndex++) { byte target0 = 0; byte target1 = a[targetIndex + 1]; - values[0] = target0; - values[1] = target1; - int idx = span.IndexOfAny(target0, target1); - Assert.Equal(targetIndex + 1, idx); - Assert.Equal(idx, span.IndexOfAny(values)); + + Assert.Equal(targetIndex + 1, span.IndexOfAny(target0, target1)); + Assert.Equal(targetIndex + 1, span.IndexOfAny(new[] { target0, target1 })); } } } @@ -143,29 +133,21 @@ public static void TestMatchTwo_Byte() public static void TestNoMatchTwo_Byte() { var rnd = new Random(42); - Span values = new Span(new byte[2]); for (int length = 0; length < byte.MaxValue; length++) { byte[] a = new byte[length]; byte target0 = (byte)rnd.Next(1, 256); byte target1 = (byte)rnd.Next(1, 256); - values[0] = target0; - values[1] = target1; Span span = new Span(a); - int idx = span.IndexOfAny(target0, target1); - Assert.Equal(-1, idx); - Assert.Equal(idx, span.IndexOfAny(values)); + Assert.Equal(-1, span.IndexOfAny(target0, target1)); + Assert.Equal(-1, span.IndexOfAny(new[] { target0, target1 })); } } [Fact] public static void TestMultipleMatchTwo_Byte() { - Span values = new Span(new byte[2]); - values[0] = 200; - values[1] = 200; - for (int length = 3; length < byte.MaxValue; length++) { byte[] a = new byte[length]; @@ -180,58 +162,51 @@ public static void TestMultipleMatchTwo_Byte() a[length - 3] = 200; Span span = new Span(a); - int idx = span.IndexOfAny(200, 200); - Assert.Equal(length - 3, idx); - Assert.Equal(idx, span.IndexOfAny(values)); + + Assert.Equal(length - 3, span.IndexOfAny(200, 200)); + Assert.Equal(length - 3, span.IndexOfAny(new byte[] { 200, 200 })); } } [Fact] public static void MakeSureNoChecksGoOutOfRangeTwo_Byte() { - Span values = new Span(new byte[2]); - values[0] = 99; - values[1] = 98; - for (int length = 1; length < byte.MaxValue; length++) { byte[] a = new byte[length + 2]; a[0] = 99; a[length + 1] = 98; Span span = new Span(a, 1, length - 1); - int index = span.IndexOfAny(99, 98); - Assert.Equal(-1, index); - Assert.Equal(index, span.IndexOfAny(values)); + + Assert.Equal(-1, span.IndexOfAny(99, 98)); + Assert.Equal(-1, span.IndexOfAny(new byte[] { 99, 98 })); } - values[0] = 99; - values[1] = 99; for (int length = 1; length < byte.MaxValue; length++) { byte[] a = new byte[length + 2]; a[0] = 99; a[length + 1] = 99; Span span = new Span(a, 1, length - 1); - int index = span.IndexOfAny(99, 99); - Assert.Equal(-1, index); - Assert.Equal(index, span.IndexOfAny(values)); + + Assert.Equal(-1, span.IndexOfAny(99, 99)); + Assert.Equal(-1, span.IndexOfAny(new byte[] { 99, 99 })); } } [Fact] public static void ZeroLengthIndexOfThree_Byte() { - Span sp = new Span(Array.Empty()); - int idx = sp.IndexOfAny(0, 0, 0); - Assert.Equal(-1, idx); - Assert.Equal(idx, sp.IndexOfAny(new byte[3])); + Span span = new Span(Array.Empty()); + + Assert.Equal(-1, span.IndexOfAny(0, 0, 0)); + Assert.Equal(-1, span.IndexOfAny(new byte[3])); } [Fact] public static void DefaultFilledIndexOfThree_Byte() { Random rnd = new Random(42); - Span values = new Span(new byte[3]); for (int length = 0; length < byte.MaxValue; length++) { @@ -246,12 +221,9 @@ public static void DefaultFilledIndexOfThree_Byte() byte target0 = targets[index]; byte target1 = targets[(index + 1) % 2]; byte target2 = targets[(index + 1) % 3]; - values[0] = target0; - values[1] = target1; - values[2] = target2; - int idx = span.IndexOfAny(target0, target1, target2); - Assert.Equal(0, idx); - Assert.Equal(idx, span.IndexOfAny(values)); + + Assert.Equal(0, span.IndexOfAny(target0, target1, target2)); + Assert.Equal(0, span.IndexOfAny(new[] { target0, target1, target2 })); } } } @@ -259,7 +231,6 @@ public static void DefaultFilledIndexOfThree_Byte() [Fact] public static void TestMatchThree_Byte() { - Span values = new Span(new byte[3]); for (int length = 0; length < byte.MaxValue; length++) { byte[] a = new byte[length]; @@ -274,12 +245,9 @@ public static void TestMatchThree_Byte() byte target0 = a[targetIndex]; byte target1 = 0; byte target2 = 0; - values[0] = target0; - values[1] = target1; - values[2] = target2; - int idx = span.IndexOfAny(target0, target1, target2); - Assert.Equal(targetIndex, idx); - Assert.Equal(idx, span.IndexOfAny(values)); + + Assert.Equal(targetIndex, span.IndexOfAny(target0, target1, target2)); + Assert.Equal(targetIndex, span.IndexOfAny(new[] { target0, target1, target2 })); } for (int targetIndex = 0; targetIndex < length - 2; targetIndex++) @@ -287,12 +255,9 @@ public static void TestMatchThree_Byte() byte target0 = a[targetIndex]; byte target1 = a[targetIndex + 1]; byte target2 = a[targetIndex + 2]; - values[0] = target0; - values[1] = target1; - values[2] = target2; - int idx = span.IndexOfAny(target0, target1, target2); - Assert.Equal(targetIndex, idx); - Assert.Equal(idx, span.IndexOfAny(values)); + + Assert.Equal(targetIndex, span.IndexOfAny(target0, target1, target2)); + Assert.Equal(targetIndex, span.IndexOfAny(new[] { target0, target1, target2 })); } for (int targetIndex = 0; targetIndex < length - 2; targetIndex++) @@ -300,12 +265,9 @@ public static void TestMatchThree_Byte() byte target0 = 0; byte target1 = 0; byte target2 = a[targetIndex + 2]; - values[0] = target0; - values[1] = target1; - values[2] = target2; - int idx = span.IndexOfAny(target0, target1, target2); - Assert.Equal(targetIndex + 2, idx); - Assert.Equal(idx, span.IndexOfAny(values)); + + Assert.Equal(targetIndex + 2, span.IndexOfAny(target0, target1, target2)); + Assert.Equal(targetIndex + 2, span.IndexOfAny(new[] { target0, target1, target2 })); } } } @@ -313,7 +275,6 @@ public static void TestMatchThree_Byte() [Fact] public static void TestNoMatchThree_Byte() { - Span values = new Span(new byte[3]); var rnd = new Random(42); for (int length = 0; length < byte.MaxValue; length++) { @@ -321,24 +282,16 @@ public static void TestNoMatchThree_Byte() byte target0 = (byte)rnd.Next(1, 256); byte target1 = (byte)rnd.Next(1, 256); byte target2 = (byte)rnd.Next(1, 256); - values[0] = target0; - values[1] = target1; - values[2] = target2; Span span = new Span(a); - int idx = span.IndexOfAny(target0, target1, target2); - Assert.Equal(-1, idx); - Assert.Equal(idx, span.IndexOfAny(values)); + Assert.Equal(-1, span.IndexOfAny(target0, target1, target2)); + Assert.Equal(-1, span.IndexOfAny(new[] { target0, target1, target2 })); } } [Fact] public static void TestMultipleMatchThree_Byte() { - Span values = new Span(new byte[3]); - values[0] = 200; - values[1] = 200; - values[2] = 200; for (int length = 4; length < byte.MaxValue; length++) { byte[] a = new byte[length]; @@ -354,42 +307,35 @@ public static void TestMultipleMatchThree_Byte() a[length - 4] = 200; Span span = new Span(a); - int idx = span.IndexOfAny(200, 200, 200); - Assert.Equal(length - 4, idx); - Assert.Equal(idx, span.IndexOfAny(values)); + + Assert.Equal(length - 4, span.IndexOfAny(200, 200, 200)); + Assert.Equal(length - 4, span.IndexOfAny(new byte[] { 200, 200, 200 })); } } [Fact] public static void MakeSureNoChecksGoOutOfRangeThree_Byte() { - Span values = new Span(new byte[3]); - values[0] = 99; - values[1] = 98; - values[2] = 99; for (int length = 1; length < byte.MaxValue; length++) { byte[] a = new byte[length + 2]; a[0] = 99; a[length + 1] = 98; Span span = new Span(a, 1, length - 1); - int index = span.IndexOfAny(99, 98, 99); - Assert.Equal(-1, index); - Assert.Equal(index, span.IndexOfAny(values)); + + Assert.Equal(-1, span.IndexOfAny(99, 98, 99)); + Assert.Equal(-1, span.IndexOfAny(new byte[] { 99, 98, 99 })); } - values[0] = 99; - values[1] = 99; - values[2] = 99; for (int length = 1; length < byte.MaxValue; length++) { byte[] a = new byte[length + 2]; a[0] = 99; a[length + 1] = 99; Span span = new Span(a, 1, length - 1); - int index = span.IndexOfAny(99, 99, 99); - Assert.Equal(-1, index); - Assert.Equal(index, span.IndexOfAny(values)); + + Assert.Equal(-1, span.IndexOfAny(99, 99, 99)); + Assert.Equal(-1, span.IndexOfAny(new byte[] { 99, 99, 99 })); } }