@@ -6,8 +6,29 @@ public static partial class ReadOnlySpanSplitTests
66 {
77 public sealed class SplitAny
88 {
9- [ Fact ]
10- public void FuzzSplitAny ( )
9+ public static TheoryData < int , int , int , int , int , float > SplitAnyData ( )
10+ {
11+ const int iterations = 10000 ;
12+
13+ TheoryData < int , int , int , int , int , float > data = new ( ) ;
14+
15+ foreach ( int length in new MultiplierRange ( 1 , 1000 , 10 ) . And ( [ 0 ] ) )
16+ {
17+ foreach ( int delimitersLength in ( ( IEnumerable < int > ) [ 0 , 1 , 5 , 25 , 50 ] ) . Where ( x => x <= length * 3 ) )
18+ {
19+ foreach ( float delimitersOccurencePart in ( IEnumerable < float > ) ( delimitersLength > 1 ? [ 0f , 0.5f , 1f ] : [ 0f , 1f ] ) )
20+ {
21+ data . Add ( iterations , length , minValue , maxValue , delimitersLength , delimitersOccurencePart ) ;
22+ }
23+ }
24+ }
25+
26+ return data ;
27+ }
28+
29+ [ Theory ]
30+ [ MemberData ( nameof ( SplitAnyData ) ) ]
31+ public void FuzzSplitAny ( int iterations , int length , int minValue , int maxValue , int delimitersLength , float delimitersOccurencePart )
1132 {
1233 static void AssertOptions < T > ( T [ ] array , T [ ] delimiters ) where T : IEquatable < T >
1334 {
@@ -20,21 +41,27 @@ static void AssertOptions<T>(T[] array, T[] delimiters) where T : IEquatable<T>
2041 ) ;
2142 }
2243
23- int [ ] integerArray = GenerateRandomIntegers ( count , minValue , maxValue ) . ToArray ( ) ;
24- int [ ] integerDelimiters = Enumerable . Range ( 0 , 5 ) . Select ( _ => integerArray [ random . Next ( integerArray . Length ) ] ) . ToArray ( ) ;
25- int [ ] integerMissingDelimiters = Enumerable . Range ( 0 , 5 ) . Select ( i => maxValue + i ) . ToArray ( ) ;
26- AssertOptions ( integerArray , integerDelimiters ) ;
27- AssertOptions ( integerArray , integerMissingDelimiters ) ;
44+ for ( int iteration = 0 ; iteration < iterations ; iteration ++ )
45+ {
46+ int [ ] integerArray = GenerateRandomIntegers ( length , minValue , maxValue ) . ToArray ( ) ;
47+ int [ ] integerDelimiters = Enumerable . Range ( 0 , delimitersLength ) . Select ( i =>
48+ i < delimitersLength * delimitersOccurencePart ? integerArray . RandomElementOrDefault ( )
49+ : maxValue + i
50+ ) . ToArray ( ) ;
51+ AssertOptions ( integerArray , integerDelimiters ) ;
2852
29- char [ ] charArray = GenerateRandomString ( length ) . ToCharArray ( ) ;
30- char [ ] charDelimiters = Enumerable . Range ( 0 , 5 ) . Select ( _ => charArray [ random . Next ( charArray . Length ) ] ) . ToArray ( ) ;
31- char [ ] charMissingDelimiters = Enumerable . Range ( 0 , 5 ) . Select ( i => ( char ) ( 'ა' + i ) ) . ToArray ( ) ;
32- AssertOptions ( charArray , charDelimiters ) ;
33- AssertOptions ( charArray , charMissingDelimiters ) ;
53+ char [ ] charArray = GenerateRandomString ( length ) . ToCharArray ( ) ;
54+ char [ ] charDelimiters = Enumerable . Range ( 0 , delimitersLength ) . Select ( i =>
55+ i < delimitersLength * delimitersOccurencePart ? charArray . RandomElementOrDefault ( )
56+ : ( char ) ( 'ა' + i )
57+ ) . ToArray ( ) ;
58+ AssertOptions ( charArray , charDelimiters ) ;
59+ }
3460 }
3561
36- [ Fact ]
37- public void FuzzSplitAnyWithCount ( )
62+ [ Theory ]
63+ [ MemberData ( nameof ( SplitAnyData ) ) ]
64+ public void FuzzSplitAnyWithCount ( int iterations , int length , int minValue , int maxValue , int delimitersLength , float delimitersOccurencePart )
3865 {
3966 static void AssertOptions < T > ( T [ ] array , T [ ] delimiters , int count , CountExceedingBehaviour countExceedingBehaviour ) where T : IEquatable < T >
4067 {
@@ -47,24 +74,29 @@ static void AssertOptions<T>(T[] array, T[] delimiters, int count, CountExceedin
4774 ) ;
4875 }
4976
50- int [ ] integerArray = GenerateRandomIntegers ( count , minValue , maxValue ) . ToArray ( ) ;
51- int [ ] integerDelimiters = Enumerable . Range ( 0 , 5 ) . Select ( _ => integerArray [ random . Next ( integerArray . Length ) ] ) . ToArray ( ) ;
52- int [ ] integerMissingDelimiters = Enumerable . Range ( 0 , 5 ) . Select ( i => maxValue + i ) . ToArray ( ) ;
53- int countDelimiters = integerArray . AsSpan ( ) . Count ( integerDelimiters ) ;
54- foreach ( CountExceedingBehaviour countExceedingBehaviour in countExceedingBehaviours )
77+ for ( int iteration = 0 ; iteration < iterations ; iteration ++ )
5578 {
56- AssertOptions ( integerArray , integerDelimiters , countDelimiters , countExceedingBehaviour ) ;
57- AssertOptions ( integerArray , integerMissingDelimiters , countDelimiters , countExceedingBehaviour ) ;
58- }
79+ int [ ] integerArray = GenerateRandomIntegers ( count , minValue , maxValue ) . ToArray ( ) ;
80+ int [ ] integerDelimiters = Enumerable . Range ( 0 , delimitersLength ) . Select ( i =>
81+ i < delimitersLength * delimitersOccurencePart ? integerArray . RandomElementOrDefault ( )
82+ : maxValue + i
83+ ) . ToArray ( ) ;
84+ int countDelimiters = integerArray . Count ( integerDelimiters ) ;
85+ foreach ( CountExceedingBehaviour countExceedingBehaviour in countExceedingBehaviours )
86+ {
87+ AssertOptions ( integerArray , integerDelimiters , countDelimiters , countExceedingBehaviour ) ;
88+ }
5989
60- char [ ] charArray = GenerateRandomString ( length ) . ToCharArray ( ) ;
61- char [ ] charDelimiters = Enumerable . Range ( 0 , 5 ) . Select ( _ => charArray [ random . Next ( charArray . Length ) ] ) . ToArray ( ) ;
62- char [ ] cahrMissingDelimiters = Enumerable . Range ( 0 , 5 ) . Select ( i => ( char ) ( 'ა' + i ) ) . ToArray ( ) ;
63- countDelimiters = charArray . AsSpan ( ) . Count ( charDelimiters ) ;
64- foreach ( CountExceedingBehaviour countExceedingBehaviour in countExceedingBehaviours )
65- {
66- AssertOptions ( charArray , charDelimiters , countDelimiters , countExceedingBehaviour ) ;
67- AssertOptions ( charArray , cahrMissingDelimiters , countDelimiters , countExceedingBehaviour ) ;
90+ char [ ] charArray = GenerateRandomString ( length ) . ToCharArray ( ) ;
91+ char [ ] charDelimiters = Enumerable . Range ( 0 , delimitersLength ) . Select ( i =>
92+ i < delimitersLength * delimitersOccurencePart ? charArray . RandomElementOrDefault ( )
93+ : ( char ) ( 'ა' + i )
94+ ) . ToArray ( ) ;
95+ countDelimiters = charArray . Count ( charDelimiters ) ;
96+ foreach ( CountExceedingBehaviour countExceedingBehaviour in countExceedingBehaviours )
97+ {
98+ AssertOptions ( charArray , charDelimiters , countDelimiters , countExceedingBehaviour ) ;
99+ }
68100 }
69101 }
70102 }
0 commit comments