Skip to content

Commit e59748f

Browse files
committed
separated split by sequence delimiter tests
1 parent 0297411 commit e59748f

File tree

8 files changed

+454
-414
lines changed

8 files changed

+454
-414
lines changed

tests/fuzzing/Tests/ReadOnlySpan/Split/Split.cs

Lines changed: 0 additions & 114 deletions
Original file line numberDiff line numberDiff line change
@@ -110,120 +110,6 @@ static void AssertOptions<T>(T[] array, T delimiter, int count, CountExceedingBe
110110
}
111111
}
112112
}
113-
114-
public static TheoryData<int, int, int, int, int> SplitWithDelimiterSequenceData(int iterations)
115-
{
116-
const int minValue = 0;
117-
const int maxValue = 100;
118-
119-
TheoryData<int, int, int, int, int> data = new();
120-
121-
foreach(int length in new MultiplierRange(1, 1000, 10).And([0]))
122-
{
123-
foreach(int delimiterLength in new MultiplierRange(3, length * 10, 10).And([0, 1]))
124-
{
125-
data.Add(iterations, length, minValue, maxValue, delimiterLength);
126-
}
127-
}
128-
129-
return data;
130-
}
131-
132-
public sealed class SplitWithDelimiterSequence
133-
{
134-
public static readonly TheoryData<int, int, int, int, int> _SplitWithDelimiterSequenceData = SplitWithDelimiterSequenceData(20000);
135-
136-
[Theory]
137-
[MemberData(nameof(_SplitWithDelimiterSequenceData))]
138-
public void Fuzz(int iterations, int length, int minValue, int maxValue, int delimiterLength)
139-
{
140-
static void AssertOptions<T>(T[] array, T[] delimiter) where T : IEquatable<T>
141-
{
142-
AssertMethodResults(
143-
expected: Split(array, delimiter),
144-
actual: array.AsReadOnlySpan().Split(delimiter).ToSystemEnumerable(),
145-
source: array,
146-
method: nameof(ReadOnlySpanExtensions.Split),
147-
args: ("delimiter", delimiter)
148-
);
149-
}
150-
151-
int[] randomIntDelimiterArray = GenerateRandomIntegers(delimiterLength, minValue, maxValue).ToArray();
152-
char[] randomcharDelimiterArray = GenerateRandomString(delimiterLength).ToCharArray();
153-
for(int iteration = 0; iteration < iterations; iteration++)
154-
{
155-
int[] integerArray = GenerateRandomIntegers(length, minValue, maxValue).ToArray();
156-
int[] integerSequenceDelimiter = integerArray.RandomSubsequenceOrDefault(delimiterLength, randomIntDelimiterArray);
157-
int[] integerSequenceMissingDelimiter = integerSequenceDelimiter.ReplaceRandomElement(maxValue);
158-
AssertOptions(integerArray, integerSequenceDelimiter);
159-
AssertOptions(integerArray, integerSequenceMissingDelimiter);
160-
161-
char[] charArray = GenerateRandomString(length).ToCharArray();
162-
char[] charSequenceDelimiter = charArray.RandomSubsequenceOrDefault(delimiterLength, randomcharDelimiterArray);
163-
char[] charSequenceMissingDelimiter = charSequenceDelimiter.ReplaceRandomElement('ა');
164-
AssertOptions(charArray, charSequenceDelimiter);
165-
AssertOptions(charArray, charSequenceMissingDelimiter);
166-
}
167-
}
168-
}
169-
170-
public sealed class SplitWithDelimiterSequenceAndCount
171-
{
172-
public static readonly TheoryData<int, int, int, int, int> _SplitWithDelimiterSequenceData = SplitWithDelimiterSequenceData(5000);
173-
174-
[Theory]
175-
[MemberData(nameof(_SplitWithDelimiterSequenceData))]
176-
public void Fuzz(int iterations, int length, int minValue, int maxValue, int delimiterLength)
177-
{
178-
static void AssertOptions<T>(T[] array, T[] delimiter, int count, CountExceedingBehaviour countExceedingBehaviour) where T : IEquatable<T>
179-
{
180-
AssertMethodResults(
181-
expected: Split(array, delimiter, count, countExceedingBehaviour),
182-
actual: array.AsReadOnlySpan().Split(delimiter, count, countExceedingBehaviour).ToSystemEnumerable(),
183-
source: array,
184-
method: nameof(ReadOnlySpanExtensions.Split),
185-
args: [("delimiter", delimiter), ("count", count), ("countExceedingBehaviour", countExceedingBehaviour)]
186-
);
187-
}
188-
189-
int[] randomIntDelimiterArray = GenerateRandomIntegers(delimiterLength, minValue, maxValue).ToArray();
190-
char[] randomcharDelimiterArray = GenerateRandomString(delimiterLength).ToCharArray();
191-
for(int iteration = 0; iteration < iterations; iteration++)
192-
{
193-
int[] integerArray = GenerateRandomIntegers(length, minValue, maxValue).ToArray();
194-
int[] integerSequenceDelimiter = integerArray.RandomSubsequenceOrDefault(delimiterLength, randomIntDelimiterArray);
195-
int[] integerSequenceMissingDelimiter = integerSequenceDelimiter.ReplaceRandomElement(maxValue);
196-
int countDelimiters = integerArray.CountSubsequence(integerSequenceDelimiter);
197-
foreach(CountExceedingBehaviour countExceedingBehaviour in countExceedingBehaviours)
198-
{
199-
AssertOptions(integerArray, integerSequenceDelimiter, 0, countExceedingBehaviour);
200-
AssertOptions(integerArray, integerSequenceDelimiter, 1, countExceedingBehaviour);
201-
if(countDelimiters - 1 > 1) AssertOptions(integerArray, integerSequenceDelimiter, countDelimiters - 1, countExceedingBehaviour);
202-
if(countDelimiters > 1) AssertOptions(integerArray, integerSequenceDelimiter, countDelimiters, countExceedingBehaviour);
203-
AssertOptions(integerArray, integerSequenceDelimiter, countDelimiters + 2, countExceedingBehaviour);
204-
AssertOptions(integerArray, integerSequenceMissingDelimiter, 0, countExceedingBehaviour);
205-
AssertOptions(integerArray, integerSequenceMissingDelimiter, 1, countExceedingBehaviour);
206-
AssertOptions(integerArray, integerSequenceMissingDelimiter, 2, countExceedingBehaviour);
207-
}
208-
209-
char[] charArray = GenerateRandomString(length).ToCharArray();
210-
char[] charSequenceDelimiter = charArray.RandomSubsequenceOrDefault(delimiterLength, randomcharDelimiterArray);
211-
char[] charSequenceMissingDelimiter = charSequenceDelimiter.ReplaceRandomElement('ა');
212-
countDelimiters = charArray.CountSubsequence(charSequenceDelimiter);
213-
foreach(CountExceedingBehaviour countExceedingBehaviour in countExceedingBehaviours)
214-
{
215-
AssertOptions(charArray, charSequenceDelimiter, 0, countExceedingBehaviour);
216-
AssertOptions(charArray, charSequenceDelimiter, 1, countExceedingBehaviour);
217-
if(countDelimiters - 1 > 1) AssertOptions(charArray, charSequenceDelimiter, countDelimiters - 1, countExceedingBehaviour);
218-
if(countDelimiters > 1) AssertOptions(charArray, charSequenceDelimiter, countDelimiters, countExceedingBehaviour);
219-
AssertOptions(charArray, charSequenceDelimiter, countDelimiters + 2, countExceedingBehaviour);
220-
AssertOptions(charArray, charSequenceMissingDelimiter, 0, countExceedingBehaviour);
221-
AssertOptions(charArray, charSequenceMissingDelimiter, 1, countExceedingBehaviour);
222-
AssertOptions(charArray, charSequenceMissingDelimiter, 2, countExceedingBehaviour);
223-
}
224-
}
225-
}
226-
}
227113
}
228114
}
229115
}
Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
using static SpanExtensions.Tests.Fuzzing.TestHelper;
2+
3+
namespace SpanExtensions.Tests.Fuzzing
4+
{
5+
public static partial class ReadOnlySpanSplitTests
6+
{
7+
public static class SplitSequence
8+
{
9+
public static TheoryData<int, int, int, int, int> SplitWithDelimiterSequenceData(int iterations)
10+
{
11+
const int minValue = 0;
12+
const int maxValue = 100;
13+
14+
TheoryData<int, int, int, int, int> data = new();
15+
16+
foreach(int length in new MultiplierRange(1, 1000, 10).And([0]))
17+
{
18+
foreach(int delimiterLength in new MultiplierRange(3, length * 10, 10).And([0, 1]))
19+
{
20+
data.Add(iterations, length, minValue, maxValue, delimiterLength);
21+
}
22+
}
23+
24+
return data;
25+
}
26+
27+
public sealed class SplitWithDelimiterSequence
28+
{
29+
public static readonly TheoryData<int, int, int, int, int> _SplitWithDelimiterSequenceData = SplitWithDelimiterSequenceData(20000);
30+
31+
[Theory]
32+
[MemberData(nameof(_SplitWithDelimiterSequenceData))]
33+
public void Fuzz(int iterations, int length, int minValue, int maxValue, int delimiterLength)
34+
{
35+
static void AssertOptions<T>(T[] array, T[] delimiter) where T : IEquatable<T>
36+
{
37+
AssertMethodResults(
38+
expected: Split(array, delimiter),
39+
actual: array.AsReadOnlySpan().Split(delimiter).ToSystemEnumerable(),
40+
source: array,
41+
method: nameof(ReadOnlySpanExtensions.Split),
42+
args: ("delimiter", delimiter)
43+
);
44+
}
45+
46+
int[] randomIntDelimiterArray = GenerateRandomIntegers(delimiterLength, minValue, maxValue).ToArray();
47+
char[] randomcharDelimiterArray = GenerateRandomString(delimiterLength).ToCharArray();
48+
for(int iteration = 0; iteration < iterations; iteration++)
49+
{
50+
int[] integerArray = GenerateRandomIntegers(length, minValue, maxValue).ToArray();
51+
int[] integerSequenceDelimiter = integerArray.RandomSubsequenceOrDefault(delimiterLength, randomIntDelimiterArray);
52+
int[] integerSequenceMissingDelimiter = integerSequenceDelimiter.ReplaceRandomElement(maxValue);
53+
AssertOptions(integerArray, integerSequenceDelimiter);
54+
AssertOptions(integerArray, integerSequenceMissingDelimiter);
55+
56+
char[] charArray = GenerateRandomString(length).ToCharArray();
57+
char[] charSequenceDelimiter = charArray.RandomSubsequenceOrDefault(delimiterLength, randomcharDelimiterArray);
58+
char[] charSequenceMissingDelimiter = charSequenceDelimiter.ReplaceRandomElement('ა');
59+
AssertOptions(charArray, charSequenceDelimiter);
60+
AssertOptions(charArray, charSequenceMissingDelimiter);
61+
}
62+
}
63+
}
64+
65+
public sealed class SplitWithDelimiterSequenceAndCount
66+
{
67+
public static readonly TheoryData<int, int, int, int, int> _SplitWithDelimiterSequenceData = SplitWithDelimiterSequenceData(5000);
68+
69+
[Theory]
70+
[MemberData(nameof(_SplitWithDelimiterSequenceData))]
71+
public void Fuzz(int iterations, int length, int minValue, int maxValue, int delimiterLength)
72+
{
73+
static void AssertOptions<T>(T[] array, T[] delimiter, int count, CountExceedingBehaviour countExceedingBehaviour) where T : IEquatable<T>
74+
{
75+
AssertMethodResults(
76+
expected: Split(array, delimiter, count, countExceedingBehaviour),
77+
actual: array.AsReadOnlySpan().Split(delimiter, count, countExceedingBehaviour).ToSystemEnumerable(),
78+
source: array,
79+
method: nameof(ReadOnlySpanExtensions.Split),
80+
args: [("delimiter", delimiter), ("count", count), ("countExceedingBehaviour", countExceedingBehaviour)]
81+
);
82+
}
83+
84+
int[] randomIntDelimiterArray = GenerateRandomIntegers(delimiterLength, minValue, maxValue).ToArray();
85+
char[] randomcharDelimiterArray = GenerateRandomString(delimiterLength).ToCharArray();
86+
for(int iteration = 0; iteration < iterations; iteration++)
87+
{
88+
int[] integerArray = GenerateRandomIntegers(length, minValue, maxValue).ToArray();
89+
int[] integerSequenceDelimiter = integerArray.RandomSubsequenceOrDefault(delimiterLength, randomIntDelimiterArray);
90+
int[] integerSequenceMissingDelimiter = integerSequenceDelimiter.ReplaceRandomElement(maxValue);
91+
int countDelimiters = integerArray.CountSubsequence(integerSequenceDelimiter);
92+
foreach(CountExceedingBehaviour countExceedingBehaviour in countExceedingBehaviours)
93+
{
94+
AssertOptions(integerArray, integerSequenceDelimiter, 0, countExceedingBehaviour);
95+
AssertOptions(integerArray, integerSequenceDelimiter, 1, countExceedingBehaviour);
96+
if(countDelimiters - 1 > 1) AssertOptions(integerArray, integerSequenceDelimiter, countDelimiters - 1, countExceedingBehaviour);
97+
if(countDelimiters > 1) AssertOptions(integerArray, integerSequenceDelimiter, countDelimiters, countExceedingBehaviour);
98+
AssertOptions(integerArray, integerSequenceDelimiter, countDelimiters + 2, countExceedingBehaviour);
99+
AssertOptions(integerArray, integerSequenceMissingDelimiter, 0, countExceedingBehaviour);
100+
AssertOptions(integerArray, integerSequenceMissingDelimiter, 1, countExceedingBehaviour);
101+
AssertOptions(integerArray, integerSequenceMissingDelimiter, 2, countExceedingBehaviour);
102+
}
103+
104+
char[] charArray = GenerateRandomString(length).ToCharArray();
105+
char[] charSequenceDelimiter = charArray.RandomSubsequenceOrDefault(delimiterLength, randomcharDelimiterArray);
106+
char[] charSequenceMissingDelimiter = charSequenceDelimiter.ReplaceRandomElement('ა');
107+
countDelimiters = charArray.CountSubsequence(charSequenceDelimiter);
108+
foreach(CountExceedingBehaviour countExceedingBehaviour in countExceedingBehaviours)
109+
{
110+
AssertOptions(charArray, charSequenceDelimiter, 0, countExceedingBehaviour);
111+
AssertOptions(charArray, charSequenceDelimiter, 1, countExceedingBehaviour);
112+
if(countDelimiters - 1 > 1) AssertOptions(charArray, charSequenceDelimiter, countDelimiters - 1, countExceedingBehaviour);
113+
if(countDelimiters > 1) AssertOptions(charArray, charSequenceDelimiter, countDelimiters, countExceedingBehaviour);
114+
AssertOptions(charArray, charSequenceDelimiter, countDelimiters + 2, countExceedingBehaviour);
115+
AssertOptions(charArray, charSequenceMissingDelimiter, 0, countExceedingBehaviour);
116+
AssertOptions(charArray, charSequenceMissingDelimiter, 1, countExceedingBehaviour);
117+
AssertOptions(charArray, charSequenceMissingDelimiter, 2, countExceedingBehaviour);
118+
}
119+
}
120+
}
121+
}
122+
}
123+
}
124+
}

0 commit comments

Comments
 (0)