in reply to Check if string A and B are made up of same chars
Using unpack, hashes and Test::More:
#!/usr/bin/perl use 5.026001; use warnings; use Test::More; sub same { my ($s1, $s2) = @_; my %l1; $l1{$_}++ for unpack "(A)*" => $s1; my %l2; $l2{$_}++ for unpack "(A)*" => $s2; is_deeply (\%l1, \%l2, "'$s1' ~~~ '$s2'"); } # same sub diff { my ($s1, $s2) = @_; my %l1; $l1{$_}++ for unpack "(A)*" => $s1; my %l2; $l2{$_}++ for unpack "(A)*" => $s2; isnt ((join "" => map { $_, $l1{$_} } sort keys %l1), (join "" => map { $_, $l2{$_} } sort keys %l2), "'$s1' ~!~ '$s2'"); } # diff same ("ABBABAA", "BAABABA"); diff ("ABBABAA", "BAABBBA"); diff ("ABBABAA", "ABBABaA"); diff ("ABBABAA", "BAABBAA "); diff ("ABBABAA", "BAABABA "); diff ("ABBABAA", "BAABABAA"); done_testing;
-->
$ test.pl ok 1 - 'ABBABAA' ~~~ 'BAABABA' ok 2 - 'ABBABAA' ~!~ 'BAABBBA' ok 3 - 'ABBABAA' ~!~ 'ABBABaA' ok 4 - 'ABBABAA' ~!~ 'BAABBAA ' ok 5 - 'ABBABAA' ~!~ 'BAABABA ' ok 6 - 'ABBABAA' ~!~ 'BAABABAA' 1..6
edit: add example for Test2:
use 5.026001; use warnings; use Test2::V0; sub same { my ($s1, $s2) = @_; my %l1; $l1{$_}++ for unpack "(A)*" => $s1; my %l2; $l2{$_}++ for unpack "(A)*" => $s2; is (\%l1, \%l2, "'$s1' ~~~ '$s2'"); } # same sub diff { my ($s1, $s2) = @_; my %l1; $l1{$_}++ for unpack "(A)*" => $s1; my %l2; $l2{$_}++ for unpack "(A)*" => $s2; isnt (\%l1, \%l2, "'$s1' ~!~ '$s2'"); # <- this line is now m +uch simpler } # diff same ("ABBABAA", "BAABABA"); diff ("ABBABAA", "BAABBBA"); diff ("ABBABAA", "ABBABaA"); diff ("ABBABAA", "BAABBAA "); diff ("ABBABAA", "BAABABA "); diff ("ABBABAA", "BAABABAA"); done_testing;
|
---|