use v6-alpha; use Test; # L # XXX - this needs to be updated when Str.split(Str) works again # this test really wants is_deeply() plan 121; # split on an empty string my %ords = ( 1 => 'first', 2 => 'second', 3 => 'third', 4 => 'fourth', 5 => 'fifth', 6 => 'sixth', 7 => 'seventh', 8 => 'eighth', 9 => 'ninth', ); sub split_test(@splitted, @expected, Str $desc, $todo = 0) { is +@splitted, +@expected, "split created the correct value amount for: $desc", :todo($todo); is @splitted[$_], @expected[$_], "the %ords{$_ + 1} value matched for: $desc", :todo($todo) for 0 .. @splitted.end; is_deeply [~<< @splitted], [~<< @expected], "values match", :todo($todo); } split_test split("", "forty-two"), qw/f o r t y - t w o/, q{split "", Str}; split_test "forty-two".comb(/./), qw/f o r t y - t w o/, q{Str.comb(/./)}; split_test "forty two".comb(/./), (qw/f o r t y/, ' ', qw/t w o/), q{Str.comb(/./)}; # split on a space split_test split(' ', 'split this string'), qw/split this string/, q{split ' ', Str}; split_test 'split this string'.comb, , q{Str.comb}; # split on a single character delimiter split_test split('$', 'try$this$string'), qw/try this string/, q{split '$', Str}; # split on a multi-character delimiter split_test split(', ', "comma, separated, values"), qw/comma separated values/, q{split ', ', Str}; # split on a variable delimiter my $delimiter = '::'; split_test split($delimiter, "Perl6::Pugs::Test"), qw/Perl6 Pugs Test/, q{split $delimiter, Str}; # split with a reg-exp split_test split(rx:Perl5 {,}, "split,me"), qw/split me/, q/split rx:Perl5 {,}, Str/; # split on multiple space characters split_test split(rx:Perl5 {\s+}, "Hello World Goodbye Mars"), qw/Hello World Goodbye Mars/, q/split rx:Perl5 {\s+}, Str/; split_test split(rx:Perl5 {(\s+)}, "Hello test"), ('Hello', ("Hello test" ~~ rx:Perl5 {(\s+)}), 'test'), q/split rx:Perl5 {(\s+)}, Str/; split_test "to be || ! to be".split(' '), qw/to be || ! to be/, q/Str.split(' ')/; split_test "this will be split".split(rx:Perl5 { }), qw/this will be split/, q/Str.split(rx:Perl5 { })/; # split on multiple space characters diag "here"; split_test split(rx:Perl5 {\s+}, "Hello World Goodbye Mars", 3), ( qw/Hello World/, "Goodbye Mars" ), q/split rx:Perl5 {\s+}, Str, limit/; split_test split(" ", "Hello World Goodbye Mars", 3), ( qw/Hello World/, " Goodbye Mars" ), q/split " ", Str, limit/; split_test "Hello World Goodbye Mars".split(rx:Perl5 {\s+}, 3), ( qw/Hello World/, "Goodbye Mars" ), q/Str.split(rx:Perl5 {\s+}, limit)/; split_test "Hello World Goodbye Mars".split(" ", 3), ( qw/Hello World/, " Goodbye Mars" ), q/Str.split(" ", limit)/; split_test "Word".split("", 3), qw/W o rd/, q/Str.split("", limit)/; # XXX: Here Pugs emulates p5 default awk field splitting behaviour. split_test " abc def ".split(), qw/abc def/, q/Str.split()/; # ... yet how do you do this with p6 function form of split? # Note that split(' ', $x) special casing of ' ' pattern (a la p5) # is not implemented in Pugs. Should it be? # This one returns an empty list split_test "".split(), (), q/"".split()/; # ... yet this one does not (different to p5). # blessed by $Larry at Message-ID: <20060118191046.GB32562@wall.org> split_test "".split(':'), (""), q/"".split(':')/;