11using BenchmarkDotNet . Attributes ;
22
3- namespace SpanExtensions . Tests . Performance ;
4-
5- [ MemoryDiagnoser ( false ) ]
6- public class ReadOnlySpan_Split_Count_StringSplitOptions_Benchmark
3+ namespace SpanExtensions . Tests . Performance
74{
8- [ Benchmark ]
9- [ ArgumentsSource ( nameof ( GetArgsWithDelimiterAndCountAndStringSplitOptions ) ) ]
10- public int Split_Count_StringSplitOptions_ReadOnlySpan ( ReadOnlySpan < char > value , char delimiter , int count , StringSplitOptions options )
5+ [ MemoryDiagnoser ( false ) ]
6+ public class ReadOnlySpan_Split_Count_StringSplitOptions_Benchmark
117 {
12- int iterations = 0 ;
13-
14- foreach ( ReadOnlySpan < char > part in value . Split ( delimiter , count , options ) )
8+ [ Benchmark ]
9+ [ ArgumentsSource ( nameof ( GetArgsWithDelimiterAndCountAndStringSplitOptions ) ) ]
10+ public int Split_Count_StringSplitOptions_ReadOnlySpan ( ReadOnlySpan < char > value , char delimiter , int count , StringSplitOptions options )
1511 {
16- iterations ++ ;
17- }
12+ int iterations = 0 ;
1813
19- return iterations ;
20- }
14+ foreach ( ReadOnlySpan < char > part in value . Split ( delimiter , count , options ) )
15+ {
16+ iterations ++ ;
17+ }
2118
22- [ Benchmark ( Baseline = true ) ]
23- [ ArgumentsSource ( nameof ( GetArgsWithDelimiterAndCountAndStringSplitOptions ) ) ]
24- public int Split_Count_StringSplitOptions_String ( string value , char delimiter , int count , StringSplitOptions options )
25- {
26- int iterations = 0 ;
19+ return iterations ;
20+ }
2721
28- foreach ( string part in value . Split ( delimiter , count , options ) )
22+ [ Benchmark ( Baseline = true ) ]
23+ [ ArgumentsSource ( nameof ( GetArgsWithDelimiterAndCountAndStringSplitOptions ) ) ]
24+ public int Split_Count_StringSplitOptions_String ( string value , char delimiter , int count , StringSplitOptions options )
2925 {
30- iterations ++ ;
31- }
26+ int iterations = 0 ;
3227
33- return iterations ;
34- }
28+ foreach ( string part in value . Split ( delimiter , count , options ) )
29+ {
30+ iterations ++ ;
31+ }
3532
36- [ Benchmark ]
37- [ ArgumentsSource ( nameof ( GetArgsWithDelimiterAndCountAndStringSplitOptions ) ) ]
38- public int Split_Count_StringSplitOptions_CountExceedingBehaviour_CutLastElements_ReadOnlySpan ( ReadOnlySpan < char > value , char delimiter , int count , StringSplitOptions options )
39- {
40- int iterations = 0 ;
33+ return iterations ;
34+ }
4135
42- foreach ( ReadOnlySpan < char > part in value . Split ( delimiter , count , options , CountExceedingBehaviour . CutRemainingElements ) )
36+ [ Benchmark ]
37+ [ ArgumentsSource ( nameof ( GetArgsWithDelimiterAndCountAndStringSplitOptions ) ) ]
38+ public int Split_Count_StringSplitOptions_CountExceedingBehaviour_CutLastElements_ReadOnlySpan ( ReadOnlySpan < char > value , char delimiter , int count , StringSplitOptions options )
4339 {
44- iterations ++ ;
45- }
40+ int iterations = 0 ;
4641
47- return iterations ;
48- }
42+ foreach ( ReadOnlySpan < char > part in value . Split ( delimiter , count , options , CountExceedingBehaviour . CutRemainingElements ) )
43+ {
44+ iterations ++ ;
45+ }
4946
50- public IEnumerable < object [ ] > GetArgsWithDelimiterAndCountAndStringSplitOptions ( )
51- {
52- yield return new object [ ] { "12131415161718190" , '1' , 3 , StringSplitOptions . None } ;
53- yield return new object [ ] { "12131415161718190" , '1' , 2 , StringSplitOptions . None } ;
54- yield return [ "abba" , 'b' , 4 , StringSplitOptions . None ] ;
55- yield return [ "aaa" , 'a' , 1 , StringSplitOptions . None ] ;
56- yield return [ "aba" , 'a' , 10 , StringSplitOptions . None ] ;
57- yield return [ "12131415161718190" , '1' , 12 , StringSplitOptions . None ] ;
58- yield return [ " xy z" , 'y' , 2 , StringSplitOptions . TrimEntries ] ;
59- yield return [ "a bcd e" , 'c' , 1 , StringSplitOptions . TrimEntries ] ;
60- yield return [ " ab cdef g " , 'd' , 4 , StringSplitOptions . TrimEntries ] ;
61- yield return [ "abb" , 'b' , 1 , StringSplitOptions . RemoveEmptyEntries ] ;
62- yield return [ "abb" , 'b' , 2 , StringSplitOptions . RemoveEmptyEntries ] ;
63- yield return [ "aaa" , 'a' , 1 , StringSplitOptions . RemoveEmptyEntries ] ;
64- yield return [ "aaa" , 'a' , 2 , StringSplitOptions . RemoveEmptyEntries ] ;
65- yield return [ "aba " , 'a' , 1 , StringSplitOptions . TrimEntries | StringSplitOptions . RemoveEmptyEntries ] ;
66- yield return [ "aba " , 'a' , 2 , StringSplitOptions . TrimEntries | StringSplitOptions . RemoveEmptyEntries ] ;
67- yield return [ "aba " , 'a' , 3 , StringSplitOptions . TrimEntries | StringSplitOptions . RemoveEmptyEntries ] ;
68- yield return [ "1 13141516171 190" , '1' , 2 , StringSplitOptions . TrimEntries | StringSplitOptions . RemoveEmptyEntries ] ;
69- yield return [ "1 131 151 171 190" , '1' , 2 , StringSplitOptions . TrimEntries | StringSplitOptions . RemoveEmptyEntries ] ;
70- yield return [ "1131151171 190" , '1' , 2 , StringSplitOptions . TrimEntries | StringSplitOptions . RemoveEmptyEntries ] ;
47+ return iterations ;
48+ }
49+
50+ public IEnumerable < object [ ] > GetArgsWithDelimiterAndCountAndStringSplitOptions ( )
51+ {
52+ yield return new object [ ] { "12131415161718190" , '1' , 3 , StringSplitOptions . None } ;
53+ yield return new object [ ] { "12131415161718190" , '1' , 2 , StringSplitOptions . None } ;
54+ yield return [ "abba" , 'b' , 4 , StringSplitOptions . None ] ;
55+ yield return [ "aaa" , 'a' , 1 , StringSplitOptions . None ] ;
56+ yield return [ "aba" , 'a' , 10 , StringSplitOptions . None ] ;
57+ yield return [ "12131415161718190" , '1' , 12 , StringSplitOptions . None ] ;
58+ yield return [ " xy z" , 'y' , 2 , StringSplitOptions . TrimEntries ] ;
59+ yield return [ "a bcd e" , 'c' , 1 , StringSplitOptions . TrimEntries ] ;
60+ yield return [ " ab cdef g " , 'd' , 4 , StringSplitOptions . TrimEntries ] ;
61+ yield return [ "abb" , 'b' , 1 , StringSplitOptions . RemoveEmptyEntries ] ;
62+ yield return [ "abb" , 'b' , 2 , StringSplitOptions . RemoveEmptyEntries ] ;
63+ yield return [ "aaa" , 'a' , 1 , StringSplitOptions . RemoveEmptyEntries ] ;
64+ yield return [ "aaa" , 'a' , 2 , StringSplitOptions . RemoveEmptyEntries ] ;
65+ yield return [ "aba " , 'a' , 1 , StringSplitOptions . TrimEntries | StringSplitOptions . RemoveEmptyEntries ] ;
66+ yield return [ "aba " , 'a' , 2 , StringSplitOptions . TrimEntries | StringSplitOptions . RemoveEmptyEntries ] ;
67+ yield return [ "aba " , 'a' , 3 , StringSplitOptions . TrimEntries | StringSplitOptions . RemoveEmptyEntries ] ;
68+ yield return [ "1 13141516171 190" , '1' , 2 , StringSplitOptions . TrimEntries | StringSplitOptions . RemoveEmptyEntries ] ;
69+ yield return [ "1 131 151 171 190" , '1' , 2 , StringSplitOptions . TrimEntries | StringSplitOptions . RemoveEmptyEntries ] ;
70+ yield return [ "1131151171 190" , '1' , 2 , StringSplitOptions . TrimEntries | StringSplitOptions . RemoveEmptyEntries ] ;
71+ }
7172 }
7273}
0 commit comments