#!/usr/bin/perl use strict; use warnings; use String::Substrings; use String::Random qw/random_string/; use Test::Differences; use Test::ManyParams; use constant STANDARD_STRINGS => ( ["" => [] ], ["a" => ["a"] ], ["ab" => ["a", "b", "ab"] ], ["aa" => ["a", "a", "aa"] ], ["aba" => ["a", "b", "a", "ab", "ba", "aba"] ] ); use Test::More tests => 5*STANDARD_STRINGS() + 3; foreach (STANDARD_STRINGS) { my $string = $_->[0]; my @substrings_exp = @{$_->[1]}; eq_or_diff [substrings $string], \@substrings_exp, "Expected substrings of '$string'"; for my $length (0 .. 3) { eq_or_diff [substrings $string, $length], [grep {length($_) == $length} substrings $string], "Expected substrings of '$string' with length $length"; } } is substrings(undef), undef, "undef string returns undef result"; my $long_string = random_string("." x 100); my @substrings_exp = (); foreach my $length (1 .. 100) { foreach my $index (0 .. 100-$length) { push @substrings_exp, substr $long_string, $index, $length; } } eq_or_diff [substrings $long_string], \@substrings_exp, "Expected substrings of '$long_string'"; all_ok { eq_array [substrings $long_string, $_[0]], [grep {length($_) == $_[0]} substrings $long_string] } [0 .. 100], "Expected substrings of '$long_string' with length"; 1;