@@ -364,6 +364,185 @@ static void AssertOptions(StringSplitOptions options)
364364 AssertOptions ( _options ) ;
365365 }
366366 }
367+
368+ [ Fact ]
369+ public void TestSplitSequence ( )
370+ {
371+ int [ ] integerArray = GenerateRandomIntegers ( count , minValue , maxValue ) . ToArray ( ) ;
372+ ReadOnlySpan < int > integerSpan = integerArray ;
373+
374+ // source contains delimiter
375+ int startIndex = random . Next ( integerArray . Length - 3 ) ;
376+ int [ ] integerSequenceDelimiter = integerArray [ startIndex ..( startIndex + 3 ) ] ;
377+ AssertMethodResults (
378+ expected : Split ( integerArray , integerSequenceDelimiter ) ,
379+ actual : integerSpan . Split ( integerSequenceDelimiter ) . ToSystemEnumerable ( ) ,
380+ source : integerArray ,
381+ method : nameof ( ReadOnlySpanExtensions . Split ) ,
382+ args : ( "delimiter" , integerSequenceDelimiter )
383+ ) ;
384+
385+ // source does not contain delimiter
386+ integerSequenceDelimiter [ ^ 1 ] = maxValue ;
387+ AssertMethodResults (
388+ expected : Split ( integerArray , integerSequenceDelimiter ) ,
389+ actual : integerSpan . Split ( integerSequenceDelimiter ) . ToSystemEnumerable ( ) ,
390+ source : integerArray ,
391+ method : nameof ( ReadOnlySpanExtensions . Split ) ,
392+ args : ( "delimiter" , integerSequenceDelimiter )
393+ ) ;
394+
395+ char [ ] charArray = GenerateRandomString ( length ) . ToCharArray ( ) ;
396+ ReadOnlySpan < char > charSpan = charArray ;
397+
398+ // source contains delimiter
399+ startIndex = random . Next ( charArray . Length - 3 ) ;
400+ char [ ] charSequenceDelimiter = charArray [ startIndex ..( startIndex + 3 ) ] ;
401+ AssertMethodResults (
402+ expected : Split ( charArray , charSequenceDelimiter ) ,
403+ actual : charSpan . Split ( charSequenceDelimiter ) . ToSystemEnumerable ( ) ,
404+ source : charArray ,
405+ method : nameof ( ReadOnlySpanExtensions . Split ) ,
406+ args : ( "delimiter" , charSequenceDelimiter )
407+ ) ;
408+
409+ // source does not contain delimiter
410+ charSequenceDelimiter [ ^ 1 ] = '!' ; // the generated array only consists of lowercase letters and numbers
411+ AssertMethodResults (
412+ expected : Split ( charArray , charSequenceDelimiter ) ,
413+ actual : charSpan . Split ( charSequenceDelimiter ) . ToSystemEnumerable ( ) ,
414+ source : charArray ,
415+ method : nameof ( ReadOnlySpanExtensions . Split ) ,
416+ args : ( "delimiter" , charSequenceDelimiter )
417+ ) ;
418+ }
419+
420+ [ Fact ]
421+ public void TestSplitSequenceWithCount ( )
422+ {
423+ int [ ] integerArray = GenerateRandomIntegers ( count , minValue , maxValue ) . ToArray ( ) ;
424+ ReadOnlySpan < int > integerSpan = integerArray ;
425+
426+ // source contains delimiter
427+ int startIndex = random . Next ( integerArray . Length - 3 ) ;
428+ int [ ] integerSequenceDelimiter = integerArray [ startIndex ..( startIndex + 3 ) ] ;
429+ int countDelimiters = integerSpan . CountSequence ( integerSequenceDelimiter ) ;
430+ AssertMethodResults (
431+ expected : Split ( integerArray , integerSequenceDelimiter , countDelimiters ) ,
432+ actual : integerSpan . Split ( integerSequenceDelimiter , countDelimiters ) . ToSystemEnumerable ( ) ,
433+ source : integerArray ,
434+ method : nameof ( ReadOnlySpanExtensions . Split ) ,
435+ args : [ ( "delimiter" , integerSequenceDelimiter ) , ( "count" , countDelimiters ) ]
436+ ) ;
437+
438+ // source does not contain delimiter
439+ integerSequenceDelimiter [ ^ 1 ] = maxValue ;
440+ AssertMethodResults (
441+ expected : Split ( integerArray , integerSequenceDelimiter , countDelimiters ) ,
442+ actual : integerSpan . Split ( integerSequenceDelimiter , countDelimiters ) . ToSystemEnumerable ( ) ,
443+ source : integerArray ,
444+ method : nameof ( ReadOnlySpanExtensions . Split ) ,
445+ args : [ ( "delimiter" , integerSequenceDelimiter ) , ( "count" , countDelimiters ) ]
446+ ) ;
447+
448+ char [ ] charArray = GenerateRandomString ( length ) . ToCharArray ( ) ;
449+ ReadOnlySpan < char > charSpan = charArray ;
450+
451+ // source contains delimiter
452+ startIndex = random . Next ( charArray . Length - 3 ) ;
453+ char [ ] charSequenceDelimiter = charArray [ startIndex ..( startIndex + 3 ) ] ;
454+ countDelimiters = charSpan . CountSequence ( charSequenceDelimiter ) ;
455+ AssertMethodResults (
456+ expected : Split ( charArray , charSequenceDelimiter , countDelimiters ) ,
457+ actual : charSpan . Split ( charSequenceDelimiter , countDelimiters ) . ToSystemEnumerable ( ) ,
458+ source : charArray ,
459+ method : nameof ( ReadOnlySpanExtensions . Split ) ,
460+ args : [ ( "delimiter" , charSequenceDelimiter ) , ( "count" , countDelimiters ) ]
461+ ) ;
462+
463+ // source does not contain delimiter
464+ charSequenceDelimiter [ ^ 1 ] = '!' ; // the generated array only consists of lowercase letters and numbers
465+ AssertMethodResults (
466+ expected : Split ( charArray , charSequenceDelimiter , countDelimiters ) ,
467+ actual : charSpan . Split ( charSequenceDelimiter , countDelimiters ) . ToSystemEnumerable ( ) ,
468+ source : charArray ,
469+ method : nameof ( ReadOnlySpanExtensions . Split ) ,
470+ args : [ ( "delimiter" , charSequenceDelimiter ) , ( "count" , countDelimiters ) ]
471+ ) ;
472+ }
473+
474+ [ Fact ]
475+ public void TestSplitSequenceString ( )
476+ {
477+ static void AssertOptions ( StringSplitOptions options )
478+ {
479+ string @string = GenerateRandomString ( length ) ;
480+ ReadOnlySpan < char > charSpan = @string ;
481+
482+ // source contains delimiter
483+ int startIndex = random . Next ( @string . Length - 3 ) ;
484+ char [ ] charSequenceDelimiter = @string . AsSpan ( ) [ startIndex ..( startIndex + 3 ) ] . ToArray ( ) ;
485+ AssertMethodResults (
486+ expected : @string . Split ( new string ( charSequenceDelimiter ) , options ) ,
487+ actual : charSpan . Split ( charSequenceDelimiter , options ) . ToSystemEnumerable ( ) ,
488+ source : @string ,
489+ method : nameof ( ReadOnlySpanExtensions . Split ) ,
490+ args : [ ( "delimiter" , charSequenceDelimiter ) , ( "options" , options ) ]
491+ ) ;
492+
493+ // source does not contain delimiter
494+ charSequenceDelimiter [ ^ 1 ] = '!' ; // the generated array only consists of lowercase letters and numbers
495+ AssertMethodResults (
496+ expected : @string . Split ( new string ( charSequenceDelimiter ) , options ) ,
497+ actual : charSpan . Split ( charSequenceDelimiter , options ) . ToSystemEnumerable ( ) ,
498+ source : @string ,
499+ method : nameof ( ReadOnlySpanExtensions . Split ) ,
500+ args : [ ( "delimiter" , charSequenceDelimiter ) , ( "options" , options ) ]
501+ ) ;
502+ }
503+
504+ foreach ( StringSplitOptions _options in stringSplitOptions )
505+ {
506+ AssertOptions ( _options ) ;
507+ }
508+ }
509+
510+ [ Fact ]
511+ public void TestSplitSequenceStringWithCount ( )
512+ {
513+ static void AssertOptions ( StringSplitOptions options )
514+ {
515+ string @string = GenerateRandomString ( length ) ;
516+ ReadOnlySpan < char > charSpan = @string ;
517+
518+ // source contains delimiter
519+ int startIndex = random . Next ( @string . Length - 3 ) ;
520+ char [ ] charSequenceDelimiter = @string . AsSpan ( ) [ startIndex ..( startIndex + 3 ) ] . ToArray ( ) ;
521+ int countDelimiters = @string . Count ( new string ( charSequenceDelimiter ) ) ;
522+ AssertMethodResults (
523+ expected : @string . Split ( new string ( charSequenceDelimiter ) , countDelimiters , options ) ,
524+ actual : charSpan . Split ( charSequenceDelimiter , options , countDelimiters ) . ToSystemEnumerable ( ) ,
525+ source : @string ,
526+ method : nameof ( ReadOnlySpanExtensions . Split ) ,
527+ args : [ ( "delimiter" , charSequenceDelimiter ) , ( "options" , options ) , ( "count" , countDelimiters ) ]
528+ ) ;
529+
530+ // source does not contain delimiter
531+ charSequenceDelimiter [ ^ 1 ] = '!' ; // the generated array only consists of lowercase letters and numbers
532+ AssertMethodResults (
533+ expected : @string . Split ( new string ( charSequenceDelimiter ) , countDelimiters , options ) ,
534+ actual : charSpan . Split ( charSequenceDelimiter , options , countDelimiters ) . ToSystemEnumerable ( ) ,
535+ source : @string ,
536+ method : nameof ( ReadOnlySpanExtensions . Split ) ,
537+ args : [ ( "delimiter" , charSequenceDelimiter ) , ( "options" , options ) , ( "count" , countDelimiters ) ]
538+ ) ;
539+ }
540+
541+ foreach ( StringSplitOptions _options in stringSplitOptions )
542+ {
543+ AssertOptions ( _options ) ;
544+ }
545+ }
367546 }
368547
369548 public static class Facts
0 commit comments