App-Music-ChordPro
view release on metacpan or search on metacpan
t/110_chords_roman.t view on Meta::CPAN
$c =~ s/[()]//g;
$tbl{$c} = $info;
}
#=cut
plan tests => 0 + keys(%tbl);
ChordPro::Chords::set_parser("roman");
=for generating
for my $r ( 'I', '#I', 'bII', 'II', '#II', 'bIII', 'III', 'IV',
'#IV', 'bV', 'V', '#V', 'bVI', 'VI', '#VI', 'bVII', 'VII' ) {
for my $q ( '', '0', '+' ) {
for my $e ( '', '7', '^', 'h', 'h7', '^7' ) {
my $chord = "$r$q$e";
my $res = ChordPro::Chords::parse_chord($chord);
unless ( $res ) {
print( "$chord\tFAIL\n");
next;
}
print("$chord\t", reformat($res), "\n");
$chord = lc($r)."$q$e";
$res = ChordPro::Chords::parse_chord($chord);
unless ( $res ) {
print( "$chord\tFAIL\n");
next;
}
print("$chord\t", reformat($res), "\n");
}
}
}
exit;
=cut
while ( my ( $c, $info ) = each %tbl ) {
my $res = ChordPro::Chords::parse_chord($c);
$res //= "FAIL";
if ( UNIVERSAL::isa( $res, 'HASH' ) ) {
delete($res->{parser});
$res = reformat($res);
}
is( $res, $info, "parsing chord $c");
}
sub reformat {
my ( $res ) = @_;
delete($res->{parser});
$res = {%$res}; # unbless
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__
I { bass => '', ext => '', ext_canon => '', name => 'I', qual => '', qual_canon => '', root => 'I', root_canon => 'I', root_mod => 0, root_ord => 0, system => 'roman' }
i { bass => '', ext => '', ext_canon => '', name => 'i', qual => '', qual_canon => '-', root => 'i', root_canon => 'i', root_mod => 0, root_ord => 0, system => 'roman' }
I7 { bass => '', ext => 7, ext_canon => 7, name => 'I7', qual => '', qual_canon => '', root => 'I', root_canon => 'I', root_mod => 0, root_ord => 0, system => 'roman' }
i7 { bass => '', ext => 7, ext_canon => 7, name => 'i7', qual => '', qual_canon => '-', root => 'i', root_canon => 'i', root_mod => 0, root_ord => 0, system => 'roman' }
I^ { bass => '', ext => '^', ext_canon => '^', name => 'I^', qual => '', qual_canon => '', root => 'I', root_canon => 'I', root_mod => 0, root_ord => 0, system => 'roman' }
i^ { bass => '', ext => '^', ext_canon => '^', name => 'i^', qual => '', qual_canon => '-', root => 'i', root_canon => 'i', root_mod => 0, root_ord => 0, system => 'roman' }
Ih { bass => '', ext => '', ext_canon => '', name => 'Ih', qual => 'h', qual_canon => 'h', root => 'I', root_canon => 'I', root_mod => 0, root_ord => 0, system => 'roman' }
ih { bass => '', ext => '', ext_canon => '', name => 'ih', qual => 'h', qual_canon => '-', root => 'i', root_canon => 'i', root_mod => 0, root_ord => 0, system => 'roman' }
Ih7 { bass => '', ext => 7, ext_canon => 7, name => 'Ih7', qual => 'h', qual_canon => 'h', root => 'I', root_canon => 'I', root_mod => 0, root_ord => 0, system => 'roman' }
ih7 { bass => '', ext => 7, ext_canon => 7, name => 'ih7', qual => 'h', qual_canon => '-', root => 'i', root_canon => 'i', root_mod => 0, root_ord => 0, system => 'roman' }
I^7 { bass => '', ext => '^7', ext_canon => '^7', name => 'I^7', qual => '', qual_canon => '', root => 'I', root_canon => 'I', root_mod => 0, root_ord => 0, system => 'roman' }
i^7 { bass => '', ext => '^7', ext_canon => '^7', name => 'i^7', qual => '', qual_canon => '-', root => 'i', root_canon => 'i', root_mod => 0, root_ord => 0, system => 'roman' }
I0 { bass => '', ext => '', ext_canon => '', name => 'I0', qual => 0, qual_canon => 0, root => 'I', root_canon => 'I', root_mod => 0, root_ord => 0, system => 'roman' }
i0 { bass => '', ext => '', ext_canon => '', name => 'i0', qual => 0, qual_canon => '-', root => 'i', root_canon => 'i', root_mod => 0, root_ord => 0, system => 'roman' }
I07 { bass => '', ext => 7, ext_canon => 7, name => 'I07', qual => 0, qual_canon => 0, root => 'I', root_canon => 'I', root_mod => 0, root_ord => 0, system => 'roman' }
i07 { bass => '', ext => 7, ext_canon => 7, name => 'i07', qual => 0, qual_canon => '-', root => 'i', root_canon => 'i', root_mod => 0, root_ord => 0, system => 'roman' }
I0^ { bass => '', ext => '^', ext_canon => '^', name => 'I0^', qual => 0, qual_canon => 0, root => 'I', root_canon => 'I', root_mod => 0, root_ord => 0, system => 'roman' }
i0^ { bass => '', ext => '^', ext_canon => '^', name => 'i0^', qual => 0, qual_canon => '-', root => 'i', root_canon => 'i', root_mod => 0, root_ord => 0, system => 'roman' }
I0h { bass => '', ext => 'h', ext_canon => 'h', name => 'I0h', qual => 0, qual_canon => 0, root => 'I', root_canon => 'I', root_mod => 0, root_ord => 0, system => 'roman' }
i0h { bass => '', ext => 'h', ext_canon => 'h', name => 'i0h', qual => 0, qual_canon => '-', root => 'i', root_canon => 'i', root_mod => 0, root_ord => 0, system => 'roman' }
I0h7 { bass => '', ext => 'h7', ext_canon => 'h7', name => 'I0h7', qual => 0, qual_canon => 0, root => 'I', root_canon => 'I', root_mod => 0, root_ord => 0, system => 'roman' }
i0h7 { bass => '', ext => 'h7', ext_canon => 'h7', name => 'i0h7', qual => 0, qual_canon => '-', root => 'i', root_canon => 'i', root_mod => 0, root_ord => 0, system => 'roman' }
I0^7 { bass => '', ext => '^7', ext_canon => '^7', name => 'I0^7', qual => 0, qual_canon => 0, root => 'I', root_canon => 'I', root_mod => 0, root_ord => 0, system => 'roman' }
i0^7 { bass => '', ext => '^7', ext_canon => '^7', name => 'i0^7', qual => 0, qual_canon => '-', root => 'i', root_canon => 'i', root_mod => 0, root_ord => 0, system => 'roman' }
I+ { bass => '', ext => '', ext_canon => '', name => 'I+', qual => '+', qual_canon => '+', root => 'I', root_canon => 'I', root_mod => 0, root_ord => 0, system => 'roman' }
i+ { bass => '', ext => '', ext_canon => '', name => 'i+', qual => '+', qual_canon => '-', root => 'i', root_canon => 'i', root_mod => 0, root_ord => 0, system => 'roman' }
I+7 { bass => '', ext => 7, ext_canon => 7, name => 'I+7', qual => '+', qual_canon => '+', root => 'I', root_canon => 'I', root_mod => 0, root_ord => 0, system => 'roman' }
i+7 { bass => '', ext => 7, ext_canon => 7, name => 'i+7', qual => '+', qual_canon => '-', root => 'i', root_canon => 'i', root_mod => 0, root_ord => 0, system => 'roman' }
I+^ { bass => '', ext => '^', ext_canon => '^', name => 'I+^', qual => '+', qual_canon => '+', root => 'I', root_canon => 'I', root_mod => 0, root_ord => 0, system => 'roman' }
i+^ { bass => '', ext => '^', ext_canon => '^', name => 'i+^', qual => '+', qual_canon => '-', root => 'i', root_canon => 'i', root_mod => 0, root_ord => 0, system => 'roman' }
I+h { bass => '', ext => 'h', ext_canon => 'h', name => 'I+h', qual => '+', qual_canon => '+', root => 'I', root_canon => 'I', root_mod => 0, root_ord => 0, system => 'roman' }
i+h { bass => '', ext => 'h', ext_canon => 'h', name => 'i+h', qual => '+', qual_canon => '-', root => 'i', root_canon => 'i', root_mod => 0, root_ord => 0, system => 'roman' }
I+h7 { bass => '', ext => 'h7', ext_canon => 'h7', name => 'I+h7', qual => '+', qual_canon => '+', root => 'I', root_canon => 'I', root_mod => 0, root_ord => 0, system => 'roman' }
i+h7 { bass => '', ext => 'h7', ext_canon => 'h7', name => 'i+h7', qual => '+', qual_canon => '-', root => 'i', root_canon => 'i', root_mod => 0, root_ord => 0, system => 'roman' }
I+^7 { bass => '', ext => '^7', ext_canon => '^7', name => 'I+^7', qual => '+', qual_canon => '+', root => 'I', root_canon => 'I', root_mod => 0, root_ord => 0, system => 'roman' }
i+^7 { bass => '', ext => '^7', ext_canon => '^7', name => 'i+^7', qual => '+', qual_canon => '-', root => 'i', root_canon => 'i', root_mod => 0, root_ord => 0, system => 'roman' }
#I { bass => '', ext => '', ext_canon => '', name => '#I', qual => '', qual_canon => '', root => '#I', root_canon => '#I', root_mod => 1, root_ord => 1, system => 'roman' }
#i { bass => '', ext => '', ext_canon => '', name => '#i', qual => '', qual_canon => '-', root => '#i', root_canon => '#i', root_mod => 1, root_ord => 1, system => 'roman' }
#I7 { bass => '', ext => 7, ext_canon => 7, name => '#I7', qual => '', qual_canon => '', root => '#I', root_canon => '#I', root_mod => 1, root_ord => 1, system => 'roman' }
#i7 { bass => '', ext => 7, ext_canon => 7, name => '#i7', qual => '', qual_canon => '-', root => '#i', root_canon => '#i', root_mod => 1, root_ord => 1, system => 'roman' }
#I^ { bass => '', ext => '^', ext_canon => '^', name => '#I^', qual => '', qual_canon => '', root => '#I', root_canon => '#I', root_mod => 1, root_ord => 1, system => 'roman' }
#i^ { bass => '', ext => '^', ext_canon => '^', name => '#i^', qual => '', qual_canon => '-', root => '#i', root_canon => '#i', root_mod => 1, root_ord => 1, system => 'roman' }
#Ih { bass => '', ext => '', ext_canon => '', name => '#Ih', qual => 'h', qual_canon => 'h', root => '#I', root_canon => '#I', root_mod => 1, root_ord => 1, system => 'roman' }
#ih { bass => '', ext => '', ext_canon => '', name => '#ih', qual => 'h', qual_canon => '-', root => '#i', root_canon => '#i', root_mod => 1, root_ord => 1, system => 'roman' }
#Ih7 { bass => '', ext => 7, ext_canon => 7, name => '#Ih7', qual => 'h', qual_canon => 'h', root => '#I', root_canon => '#I', root_mod => 1, root_ord => 1, system => 'roman' }
#ih7 { bass => '', ext => 7, ext_canon => 7, name => '#ih7', qual => 'h', qual_canon => '-', root => '#i', root_canon => '#i', root_mod => 1, root_ord => 1, system => 'roman' }
#I^7 { bass => '', ext => '^7', ext_canon => '^7', name => '#I^7', qual => '', qual_canon => '', root => '#I', root_canon => '#I', root_mod => 1, root_ord => 1, system => 'roman' }
#i^7 { bass => '', ext => '^7', ext_canon => '^7', name => '#i^7', qual => '', qual_canon => '-', root => '#i', root_canon => '#i', root_mod => 1, root_ord => 1, system => 'roman' }
#I0 { bass => '', ext => '', ext_canon => '', name => '#I0', qual => 0, qual_canon => 0, root => '#I', root_canon => '#I', root_mod => 1, root_ord => 1, system => 'roman' }
#i0 { bass => '', ext => '', ext_canon => '', name => '#i0', qual => 0, qual_canon => '-', root => '#i', root_canon => '#i', root_mod => 1, root_ord => 1, system => 'roman' }
#I07 { bass => '', ext => 7, ext_canon => 7, name => '#I07', qual => 0, qual_canon => 0, root => '#I', root_canon => '#I', root_mod => 1, root_ord => 1, system => 'roman' }
#i07 { bass => '', ext => 7, ext_canon => 7, name => '#i07', qual => 0, qual_canon => '-', root => '#i', root_canon => '#i', root_mod => 1, root_ord => 1, system => 'roman' }
( run in 0.657 second using v1.01-cache-2.11-cpan-b9db842bd85 )