App-Music-ChordPro
view release on metacpan or search on metacpan
t/107_chords_latin_o.t view on Meta::CPAN
s!/E!/Mi! or
s!/F#!/Fa#! or
s!/F!/Fa! or
s!/Gb!/Solb! or
s!/G#!/Sol#! or
s!/G!/Sol! or
s!/Ab!/Lab! or
s!/A#!/La#! or
s!/A!/La! or
s!/Bb!/Sib! or
s!/B!/Si!;
}
my $c = $chord;
$c =~ s/[()]//g;
my $res = $p->parse($c);
unless ( $res ) {
print( "$chord\tFAIL\n");
next;
}
$res = {%$res};
delete($res->{parser});
print("$chord\t", reformat($res), "\n");
}
exit;
=cut
while ( <DATA> ) {
chomp;
my ( $chord, $info ) = split( /\t/, $_ );
my $c = $chord;
$c =~ s/[()]//g;
$tbl{$c} = $info;
}
plan tests => 0 + keys(%tbl);
while ( my ( $c, $info ) = each %tbl ) {
my $res = ChordPro::Chords::parse_chord($c);
$res //= "FAIL";
if ( UNIVERSAL::isa( $res, 'HASH' ) ) {
$res = reformat($res);
}
is( $res, $info, "parsing chord $c");
}
sub reformat {
my ( $res ) = @_;
$res = {%$res};
delete($res->{parser});
use Data::Dumper qw();
local $Data::Dumper::Sortkeys = 1;
local $Data::Dumper::Indent = 1;
local $Data::Dumper::Quotekeys = 0;
local $Data::Dumper::Deparse = 1;
local $Data::Dumper::Terse = 1;
local $Data::Dumper::Trailingcomma = 1;
local $Data::Dumper::Useperl = 1;
local $Data::Dumper::Useqq = 0; # I want unicode visible
my $s = Data::Dumper::Dumper($res);
$s =~ s/\s+/ /gs;
$s =~ s/, \}/ }/gs;
$s =~ s/\s+$//;
return $s;
}
__DATA__
Doo { bass => '', ext => '', ext_canon => '', name => 'Doo', qual => 'o', qual_canon => 0, root => 'Do', root_canon => 'Do', root_mod => 0, root_ord => 0, system => 'latin' }
Do#o { bass => '', ext => '', ext_canon => '', name => 'Do#o', qual => 'o', qual_canon => 0, root => 'Do#', root_canon => 'Do#', root_mod => 1, root_ord => 1, system => 'latin' }
Rebo { bass => '', ext => '', ext_canon => '', name => 'Rebo', qual => 'o', qual_canon => 0, root => 'Reb', root_canon => 'Reb', root_mod => -1, root_ord => 1, system => 'latin' }
Reo { bass => '', ext => '', ext_canon => '', name => 'Reo', qual => 'o', qual_canon => 0, root => 'Re', root_canon => 'Re', root_mod => 0, root_ord => 2, system => 'latin' }
Re#o { bass => '', ext => '', ext_canon => '', name => 'Re#o', qual => 'o', qual_canon => 0, root => 'Re#', root_canon => 'Re#', root_mod => 1, root_ord => 3, system => 'latin' }
Mibo { bass => '', ext => '', ext_canon => '', name => 'Mibo', qual => 'o', qual_canon => 0, root => 'Mib', root_canon => 'Mib', root_mod => -1, root_ord => 3, system => 'latin' }
Mio { bass => '', ext => '', ext_canon => '', name => 'Mio', qual => 'o', qual_canon => 0, root => 'Mi', root_canon => 'Mi', root_mod => 0, root_ord => 4, system => 'latin' }
Fao { bass => '', ext => '', ext_canon => '', name => 'Fao', qual => 'o', qual_canon => 0, root => 'Fa', root_canon => 'Fa', root_mod => 0, root_ord => 5, system => 'latin' }
Fa#o { bass => '', ext => '', ext_canon => '', name => 'Fa#o', qual => 'o', qual_canon => 0, root => 'Fa#', root_canon => 'Fa#', root_mod => 1, root_ord => 6, system => 'latin' }
Solbo { bass => '', ext => '', ext_canon => '', name => 'Solbo', qual => 'o', qual_canon => 0, root => 'Solb', root_canon => 'Solb', root_mod => -1, root_ord => 6, system => 'latin' }
Solo { bass => '', ext => '', ext_canon => '', name => 'Solo', qual => 'o', qual_canon => 0, root => 'Sol', root_canon => 'Sol', root_mod => 0, root_ord => 7, system => 'latin' }
Sol#o { bass => '', ext => '', ext_canon => '', name => 'Sol#o', qual => 'o', qual_canon => 0, root => 'Sol#', root_canon => 'Sol#', root_mod => 1, root_ord => 8, system => 'latin' }
Labo { bass => '', ext => '', ext_canon => '', name => 'Labo', qual => 'o', qual_canon => 0, root => 'Lab', root_canon => 'Lab', root_mod => -1, root_ord => 8, system => 'latin' }
Lao { bass => '', ext => '', ext_canon => '', name => 'Lao', qual => 'o', qual_canon => 0, root => 'La', root_canon => 'La', root_mod => 0, root_ord => 9, system => 'latin' }
La#o { bass => '', ext => '', ext_canon => '', name => 'La#o', qual => 'o', qual_canon => 0, root => 'La#', root_canon => 'La#', root_mod => 1, root_ord => 10, system => 'latin' }
Sibo { bass => '', ext => '', ext_canon => '', name => 'Sibo', qual => 'o', qual_canon => 0, root => 'Sib', root_canon => 'Sib', root_mod => -1, root_ord => 10, system => 'latin' }
Sio { bass => '', ext => '', ext_canon => '', name => 'Sio', qual => 'o', qual_canon => 0, root => 'Si', root_canon => 'Si', root_mod => 0, root_ord => 11, system => 'latin' }
( run in 1.464 second using v1.01-cache-2.11-cpan-ad19def0cd9 )