Skip to content

Commit

Permalink
Some more thorough split testing
Browse files Browse the repository at this point in the history
  • Loading branch information
lizmat committed Nov 7, 2013
1 parent 8b95783 commit 390c3b7
Showing 1 changed file with 102 additions and 74 deletions.
176 changes: 102 additions & 74 deletions S32-str/split.t
Original file line number Diff line number Diff line change
Expand Up @@ -4,84 +4,122 @@ use Test;

# L<S32-setting-library/Str"=item split">

plan 37;
plan 54;

# split on empty string
#?niecza todo "split on empty string has leading empty elements"
is split("", "forty-two").join(','),
<f o r t y - t w o>.join(','),
q{split "", Str};
{
is split("", "forty-two").join(','), 'f,o,r,t,y,-,t,w,o',
q{split "", Str};
is "forty-two".split("").join(','), 'f,o,r,t,y,-,t,w,o',
q{Str.split: ""};

is split("", "forty-two", 3).join(','), 'f,o,rty-two',
q{split "", Str};
is "forty-two".split("",3).join(','), 'f,o,rty-two',
q{Str.split: ""};
}

# split on a space
is split(' ', 'split this string').join(','),
<split this string>.join(','),
q{split ' ', Str};
{
is split(' ', 'split this string').join(','), 'split,this,string',
q{split ' ', Str};
is 'split this string'.split(' ').join(','), 'split,this,string',
q{Str.split: ' '};

is split(' ', 'split this string', 2).join(','), 'split,this string',
q{split ' ', Str, 2};
is 'split this string'.split(' ',2).join(','), 'split,this string',
q{Str.split: ' ', 2};
}

# split on a single character delimiter
is split('$', 'try$this$string').join(','),
<try this string>.join(','),
q{split '$', Str};
{
is split('$', 'try$this$string').join(','), 'try,this,string',
q{split '$', Str};
is 'try$this$string'.split('$').join(','), 'try,this,string',
q{Str.split: '$'};

is split('$', 'try$this$string',2).join(','), 'try,this$string',
q{split '$', Str, 2};
is 'try$this$string'.split('$',2).join(','), 'try,this$string',
q{Str.split: '$', 2};
}

# split on a multi-character delimiter
is split(', ', "comma, separated, values").join(','),
<comma separated values>.join(','),
q{split ', ', Str};
{
is split(', ', "comma, separated, values").join('|'),
'comma|separated|values', q{split ', ', Str};
is "comma, separated, values".split(", ").join('|'),
'comma|separated|values', q{Str.split: ', '};

is split(', ', "comma, separated, values",2).join('|'),
'comma|separated, values', q{split ', ', Str,2};
is "comma, separated, values".split(", ",2).join('|'),
'comma|separated, values', q{Str.split: ', ',2};
}

# split on a variable delimiter
{
my $del = '::';
is split($del, "Perl6::Camelia::Test").join(','), 'Perl6,Camelia,Test',
q{split $del, Str};
is 'Perl6::Camelia::Test'.split($del).join(','), 'Perl6,Camelia,Test',
q{Str.split: $del};

is split($del, "Perl6::Camelia::Test",2).join(','), 'Perl6,Camelia::Test',
q{split $del, Str,2};
is 'Perl6::Camelia::Test'.split($del,2).join(','), 'Perl6,Camelia::Test',
q{Str.split: $del,2};
}

my $delimiter = '::';
is split($delimiter, "Perl6::Pugs::Test").join(','),
<Perl6 Pugs Test>.join(','),
q{split $delimiter, Str};

# split with a reg-exp
#?niecza skip 'rx:Perl5'
is split(rx:Perl5 {,}, "split,me").join(','),
qw/split me/.join(','),
q/split rx:Perl5 {,}, Str/;

# split on multiple space characters
#?niecza skip 'rx:Perl5'
is split(rx:Perl5 {\s+}, "Hello World Goodbye Mars").join(','),
qw/Hello World Goodbye Mars/.join(','),
q/split rx:Perl5 {\s+}, Str/;

# split with a single char reg-exp
#?niecza skip 'rx:Perl5'
is split(rx:Perl5 {(\s+)}, "Hello test", :all).join(','),
('Hello', ("Hello test" ~~ rx:Perl5 {(\s+)}), 'test').join(','),
q/split rx:Perl5 {(\s+)}, Str/;

is "to be || ! to be".split(' ').join(','),
<to be || ! to be>.join(','),
q/Str.split(' ')/;
{
is split(rx:Perl5 {,},"split,me,please").join('|'), 'split|me|please',
'split rx:P5 {,},Str';
is 'split,me,please'.split(rx:Perl5 {,}).join('|'), 'split|me|please',
'Str.split: rx:P5 {,}';

is split(rx:Perl5 {,},"split,me,please",2).join('|'), 'split|me,please',
'split rx:P5 {,},Str,2';
is 'split,me,please'.split(rx:Perl5 {,},2).join('|'), 'split|me,please',
'Str.split: rx:P5 {,},2';
}

# split on regex with any whitespace
#?niecza skip 'rx:Perl5'
is "this will be split".split(rx:Perl5 { }).join(','),
<this will be split>.join(','),
q/Str.split(rx:Perl5 { })/;
{
is split(rx:Perl5 {\s+}, "Hello World Goodbye Mars").join(','),
'Hello,World,Goodbye,Mars', q/split rx:Perl5 {\s+}, Str/;
is 'Hello World Goodbye Mars'.split(rx:Perl5 {\s+}).join(','),
'Hello,World,Goodbye,Mars', q/Str.split: rx:Perl5 {\s+}/;

is split(rx:Perl5 {\s+}, "Hello World Goodbye Mars", 3).join(','),
'Hello,World,Goodbye Mars', q/split rx:Perl5 {\s+}, Str, 3/;
is 'Hello World Goodbye Mars'.split(rx:Perl5 {\s+}, 3).join(','),
'Hello,World,Goodbye Mars', q/Str.split: rx:Perl5 {\s+}, 3/;
}

# split on multiple space characters
#?niecza skip 'rx:Perl5'
is split(rx:Perl5 {\s+}, "Hello World Goodbye Mars", 3).join(','),
( <Hello World>, "Goodbye Mars" ).join(','),
q/split rx:Perl5 {\s+}, Str, limit/;

is split(" ", "Hello World Goodbye Mars", 3).join(','),
( <Hello World>, " Goodbye Mars" ).join(','),
q/split " ", Str, limit/;
{
is split(rx:Perl5 {(\s+)}, "Hello test", :all).join(','), 'Hello, ,test',
q/split rx:Perl5 {(\s+)}, Str/;
is "Hello test".split(rx:Perl5 {(\s+)}, :all).join(','), 'Hello, ,test',
q/Str.split rx:Perl5 {(\s+)}/;
}

#?niecza skip 'rx:Perl5'
is "Hello World Goodbye Mars".split(rx:Perl5 {\s+}, 3).join(','),
( <Hello World>, "Goodbye Mars" ).join(','),
q/Str.split(rx:Perl5 {\s+}, limit)/;

is "Hello World Goodbye Mars".split(" ", 3).join(','),
( <Hello World>, " Goodbye Mars" ).join(','),
q/Str.split(" ", limit)/;

#?niecza todo 'initial empty element'
is "Word".split("", 3).join(','), <W o rd>.join(','),
q/Str.split("", limit)/;

{
is split(rx:Perl5 { },"this will be split").join(','), 'this,will,be,split',
q/split(rx:Perl5 { }, Str)/;
is "this will be split".split(rx:Perl5 { }).join(','), 'this,will,be,split',
q/Str.split(rx:Perl5 { })/;
is split(rx:Perl5 { },"this will be split",3).join(','),
'this,will,be split', q/split rx:Perl5 { }, Str,3)/;
is "this will be split".split(rx:Perl5 { },3).join(','),
'this,will,be split', q/Str.split: rx:Perl5 { },3/;
}

#L<S32::Str/Str/"no longer has a default delimiter">
dies_ok {" abc def ".split()}, q/Str.split() disallowed/;
Expand Down Expand Up @@ -117,16 +155,6 @@ is "a.b".split(/\./).join(','), <a b>.join(','),
}
}

# RT #63066
{
#?niecza todo 'has initial empty element'
is 'hello-world'.split(/<ws>/).join(','), ',hello,-,world,',
q{'hello-world'.split(/<ws>/)};
#?niecza skip 'Unable to resolve method wb in class Cursor'
is 'hello-world'.split(/<wb>/).join(','), ',hello,-,world,',
q{'hello-world'.split(/<wb>/)};
}

{
my @a = "hello world".split(/<[aeiou]>/, :all);
is +@a, 7, "split:all resulted in seven pieces";
Expand All @@ -149,13 +177,13 @@ is "a.b".split(/\./).join(','), <a b>.join(','),
# RT #63066
{
is 'hello-world'.split(/<.ws>/).join('|'), '|hello|-|world|',
'zero-width delimiter (<.ws>)';
'zero-width delimiter (<.ws>)';
#?niecza skip 'Unable to resolve method wb in class Cursor'
is 'hello-world'.split(/<.wb>/).join('|'), '|hello|-|world|',
'zero-width delimiter (<.wb>)';
'zero-width delimiter (<.wb>)';
#?niecza skip 'Unable to resolve method wb in class Cursor'
is 'a-b-c'.split(/<.wb>/).join('|'), '|a|-|b|-|c|',
'zero-width delimiter (<.wb>) (2)';
is '-a-b-c-'.split(/<.wb>/).join('|'), '-|a|-|b|-|c|-',
'zero-width delimiter (<.wb>) (2)';
}

# vim: ft=perl6

0 comments on commit 390c3b7

Please sign in to comment.