1+ using BenchmarkDotNet . Attributes ;
2+
3+ namespace SpanExtensions . Tests . Performance
4+ {
5+ [ MemoryDiagnoser ( false ) ]
6+ public class ReadOnlySpan_Split_Count_StringSplitOptions_Benchmark
7+ {
8+
9+ [ Benchmark ]
10+ [ ArgumentsSource ( nameof ( GetArgsWithDelimiterAndCountAndStringSplitOptions ) ) ]
11+ public int Split_Count_StringSplitOptions_ReadOnlySpan ( ReadOnlySpan < char > value , char delimiter , int count , StringSplitOptions options )
12+ {
13+ int length = 0 ;
14+ foreach ( ReadOnlySpan < char > part in value . Split ( delimiter , count , options ) )
15+ {
16+ length += part . Length ;
17+ }
18+ return length ;
19+ }
20+
21+ [ Benchmark ( Baseline = true ) ]
22+ [ ArgumentsSource ( nameof ( GetArgsWithDelimiterAndCountAndStringSplitOptions ) ) ]
23+ public int Split_Count_StringSplitOptions_String ( string value , char delimiter , int count , StringSplitOptions options )
24+ {
25+ return value . Split ( delimiter , count , options ) . Length ;
26+ }
27+
28+ [ Benchmark ]
29+ [ ArgumentsSource ( nameof ( GetArgsWithDelimiterAndCountAndStringSplitOptions ) ) ]
30+ public int Split_Count_StringSplitOptions_CountExceedingBehaviour_CutLastElements_ReadOnlySpan ( ReadOnlySpan < char > value , char delimiter , int count , StringSplitOptions options )
31+ {
32+ int length = 0 ;
33+ foreach ( ReadOnlySpan < char > part in value . Split ( delimiter , count , options , CountExceedingBehaviour . CutLastElements ) )
34+ {
35+ length += part . Length ;
36+ }
37+ return length ;
38+ }
39+
40+ public IEnumerable < object [ ] > GetArgsWithDelimiterAndCountAndStringSplitOptions ( )
41+ {
42+ yield return new object [ ] { "12131415161718190" , '1' , 3 , StringSplitOptions . None } ;
43+ yield return new object [ ] { "12131415161718190" , '1' , 2 , StringSplitOptions . None } ;
44+ yield return [ "abba" , 'b' , 4 , StringSplitOptions . None ] ;
45+ yield return [ "aaa" , 'a' , 1 , StringSplitOptions . None ] ;
46+ yield return [ "aba" , 'a' , 10 , StringSplitOptions . None ] ;
47+ yield return [ "12131415161718190" , '1' , 12 , StringSplitOptions . None ] ;
48+ yield return [ " xy z" , 'y' , 2 , StringSplitOptions . TrimEntries ] ;
49+ yield return [ "a bcd e" , 'c' , 1 , StringSplitOptions . TrimEntries ] ;
50+ yield return [ " ab cdef g " , 'd' , 4 , StringSplitOptions . TrimEntries ] ;
51+ yield return [ "abb" , 'b' , 1 , StringSplitOptions . RemoveEmptyEntries ] ;
52+ yield return [ "abb" , 'b' , 2 , StringSplitOptions . RemoveEmptyEntries ] ;
53+ yield return [ "aaa" , 'a' , 1 , StringSplitOptions . RemoveEmptyEntries ] ;
54+ yield return [ "aaa" , 'a' , 2 , StringSplitOptions . RemoveEmptyEntries ] ;
55+ yield return [ "aba " , 'a' , 1 , StringSplitOptions . TrimEntries | StringSplitOptions . RemoveEmptyEntries ] ;
56+ yield return [ "aba " , 'a' , 2 , StringSplitOptions . TrimEntries | StringSplitOptions . RemoveEmptyEntries ] ;
57+ yield return [ "aba " , 'a' , 3 , StringSplitOptions . TrimEntries | StringSplitOptions . RemoveEmptyEntries ] ;
58+ yield return [ "1 13141516171 190" , '1' , 2 , StringSplitOptions . TrimEntries | StringSplitOptions . RemoveEmptyEntries ] ;
59+ yield return [ "1 131 151 171 190" , '1' , 2 , StringSplitOptions . TrimEntries | StringSplitOptions . RemoveEmptyEntries ] ;
60+ yield return [ "1131151171 190" , '1' , 2 , StringSplitOptions . TrimEntries | StringSplitOptions . RemoveEmptyEntries ] ;
61+ }
62+ }
63+ }
0 commit comments