App-Music-ChordPro
view release on metacpan or search on metacpan
t/107_chords_latin.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__
Do { bass => '', ext => '', ext_canon => '', name => 'Do', qual => '', qual_canon => '', root => 'Do', root_canon => 'Do', root_mod => 0, root_ord => 0, system => 'latin' }
Do+ { bass => '', ext => '', ext_canon => '', name => 'Do+', qual => '+', qual_canon => '+', root => 'Do', root_canon => 'Do', root_mod => 0, root_ord => 0, system => 'latin' }
Do4 { bass => '', ext => 4, ext_canon => 4, name => 'Do4', qual => '', qual_canon => '', root => 'Do', root_canon => 'Do', root_mod => 0, root_ord => 0, system => 'latin' }
Do6 { bass => '', ext => 6, ext_canon => 6, name => 'Do6', qual => '', qual_canon => '', root => 'Do', root_canon => 'Do', root_mod => 0, root_ord => 0, system => 'latin' }
Do7 { bass => '', ext => 7, ext_canon => 7, name => 'Do7', qual => '', qual_canon => '', root => 'Do', root_canon => 'Do', root_mod => 0, root_ord => 0, system => 'latin' }
Do9 { bass => '', ext => 9, ext_canon => 9, name => 'Do9', qual => '', qual_canon => '', root => 'Do', root_canon => 'Do', root_mod => 0, root_ord => 0, system => 'latin' }
Do9(11) { bass => '', ext => 911, ext_canon => 911, name => 'Do911', qual => '', qual_canon => '', root => 'Do', root_canon => 'Do', root_mod => 0, root_ord => 0, system => 'latin' }
Do11 { bass => '', ext => 11, ext_canon => 11, name => 'Do11', qual => '', qual_canon => '', root => 'Do', root_canon => 'Do', root_mod => 0, root_ord => 0, system => 'latin' }
Dosus { bass => '', ext => 'sus', ext_canon => 'sus4', name => 'Dosus', qual => '', qual_canon => '', root => 'Do', root_canon => 'Do', root_mod => 0, root_ord => 0, system => 'latin' }
Dosus2 { bass => '', ext => 'sus2', ext_canon => 'sus2', name => 'Dosus2', qual => '', qual_canon => '', root => 'Do', root_canon => 'Do', root_mod => 0, root_ord => 0, system => 'latin' }
Dosus4 { bass => '', ext => 'sus4', ext_canon => 'sus4', name => 'Dosus4', qual => '', qual_canon => '', root => 'Do', root_canon => 'Do', root_mod => 0, root_ord => 0, system => 'latin' }
Dosus9 { bass => '', ext => 'sus9', ext_canon => 'sus9', name => 'Dosus9', qual => '', qual_canon => '', root => 'Do', root_canon => 'Do', root_mod => 0, root_ord => 0, system => 'latin' }
Domaj { bass => '', ext => '', ext_canon => '', name => 'Domaj', qual => '', qual_canon => '', root => 'Do', root_canon => 'Do', root_mod => 0, root_ord => 0, system => 'latin' }
Domaj7 { bass => '', ext => 'maj7', ext_canon => 'maj7', name => 'Domaj7', qual => '', qual_canon => '', root => 'Do', root_canon => 'Do', root_mod => 0, root_ord => 0, system => 'latin' }
Dom { bass => '', ext => '', ext_canon => '', name => 'Dom', qual => 'm', qual_canon => '-', root => 'Do', root_canon => 'Do', root_mod => 0, root_ord => 0, system => 'latin' }
Domin { bass => '', ext => '', ext_canon => '', name => 'Domin', qual => 'min', qual_canon => '-', root => 'Do', root_canon => 'Do', root_mod => 0, root_ord => 0, system => 'latin' }
Dodim { bass => '', ext => '', ext_canon => '', name => 'Dodim', qual => 'dim', qual_canon => 0, root => 'Do', root_canon => 'Do', root_mod => 0, root_ord => 0, system => 'latin' }
Do/Si { bass => 'Si', bass_canon => 'Si', bass_mod => 0, bass_ord => 11, ext => '', ext_canon => '', name => 'Do/Si', qual => '', qual_canon => '', root => 'Do', root_canon => 'Do', root_mod => 0, root_ord => 0, system => 'latin' }
Doadd9 { bass => '', ext => 'add9', ext_canon => 'add9', name => 'Doadd9', qual => '', qual_canon => '', root => 'Do', root_canon => 'Do', root_mod => 0, root_ord => 0, system => 'latin' }
Do3 { bass => '', ext => 3, ext_canon => 3, name => 'Do3', qual => '', qual_canon => '', root => 'Do', root_canon => 'Do', root_mod => 0, root_ord => 0, system => 'latin' }
Dom7 { bass => '', ext => 7, ext_canon => 7, name => 'Dom7', qual => 'm', qual_canon => '-', root => 'Do', root_canon => 'Do', root_mod => 0, root_ord => 0, system => 'latin' }
Dom11 { bass => '', ext => 11, ext_canon => 11, name => 'Dom11', qual => 'm', qual_canon => '-', root => 'Do', root_canon => 'Do', root_mod => 0, root_ord => 0, system => 'latin' }
Do# { bass => '', ext => '', ext_canon => '', name => 'Do#', qual => '', qual_canon => '', root => 'Do#', root_canon => 'Do#', root_mod => 1, root_ord => 1, system => 'latin' }
Do#+ { bass => '', ext => '', ext_canon => '', name => 'Do#+', qual => '+', qual_canon => '+', root => 'Do#', root_canon => 'Do#', root_mod => 1, root_ord => 1, system => 'latin' }
Do#4 { bass => '', ext => 4, ext_canon => 4, name => 'Do#4', qual => '', qual_canon => '', root => 'Do#', root_canon => 'Do#', root_mod => 1, root_ord => 1, system => 'latin' }
Do#7 { bass => '', ext => 7, ext_canon => 7, name => 'Do#7', qual => '', qual_canon => '', root => 'Do#', root_canon => 'Do#', root_mod => 1, root_ord => 1, system => 'latin' }
Do#7(b5) { bass => '', ext => '7b5', ext_canon => '7b5', name => 'Do#7b5', qual => '', qual_canon => '', root => 'Do#', root_canon => 'Do#', root_mod => 1, root_ord => 1, system => 'latin' }
Do#sus { bass => '', ext => 'sus', ext_canon => 'sus4', name => 'Do#sus', qual => '', qual_canon => '', root => 'Do#', root_canon => 'Do#', root_mod => 1, root_ord => 1, system => 'latin' }
Do#sus4 { bass => '', ext => 'sus4', ext_canon => 'sus4', name => 'Do#sus4', qual => '', qual_canon => '', root => 'Do#', root_canon => 'Do#', root_mod => 1, root_ord => 1, system => 'latin' }
Do#maj { bass => '', ext => '', ext_canon => '', name => 'Do#maj', qual => '', qual_canon => '', root => 'Do#', root_canon => 'Do#', root_mod => 1, root_ord => 1, system => 'latin' }
Do#maj7 { bass => '', ext => 'maj7', ext_canon => 'maj7', name => 'Do#maj7', qual => '', qual_canon => '', root => 'Do#', root_canon => 'Do#', root_mod => 1, root_ord => 1, system => 'latin' }
Do#dim { bass => '', ext => '', ext_canon => '', name => 'Do#dim', qual => 'dim', qual_canon => 0, root => 'Do#', root_canon => 'Do#', root_mod => 1, root_ord => 1, system => 'latin' }
Do#m { bass => '', ext => '', ext_canon => '', name => 'Do#m', qual => 'm', qual_canon => '-', root => 'Do#', root_canon => 'Do#', root_mod => 1, root_ord => 1, system => 'latin' }
Do#min { bass => '', ext => '', ext_canon => '', name => 'Do#min', qual => 'min', qual_canon => '-', root => 'Do#', root_canon => 'Do#', root_mod => 1, root_ord => 1, system => 'latin' }
Do#add9 { bass => '', ext => 'add9', ext_canon => 'add9', name => 'Do#add9', qual => '', qual_canon => '', root => 'Do#', root_canon => 'Do#', root_mod => 1, root_ord => 1, system => 'latin' }
Do#(add9) { bass => '', ext => 'add9', ext_canon => 'add9', name => 'Do#add9', qual => '', qual_canon => '', root => 'Do#', root_canon => 'Do#', root_mod => 1, root_ord => 1, system => 'latin' }
Do#m7 { bass => '', ext => 7, ext_canon => 7, name => 'Do#m7', qual => 'm', qual_canon => '-', root => 'Do#', root_canon => 'Do#', root_mod => 1, root_ord => 1, system => 'latin' }
Reb { bass => '', ext => '', ext_canon => '', name => 'Reb', qual => '', qual_canon => '', root => 'Reb', root_canon => 'Reb', root_mod => -1, root_ord => 1, system => 'latin' }
Reb+ { bass => '', ext => '', ext_canon => '', name => 'Reb+', qual => '+', qual_canon => '+', root => 'Reb', root_canon => 'Reb', root_mod => -1, root_ord => 1, system => 'latin' }
Reb7 { bass => '', ext => 7, ext_canon => 7, name => 'Reb7', qual => '', qual_canon => '', root => 'Reb', root_canon => 'Reb', root_mod => -1, root_ord => 1, system => 'latin' }
Rebsus { bass => '', ext => 'sus', ext_canon => 'sus4', name => 'Rebsus', qual => '', qual_canon => '', root => 'Reb', root_canon => 'Reb', root_mod => -1, root_ord => 1, system => 'latin' }
Rebsus4 { bass => '', ext => 'sus4', ext_canon => 'sus4', name => 'Rebsus4', qual => '', qual_canon => '', root => 'Reb', root_canon => 'Reb', root_mod => -1, root_ord => 1, system => 'latin' }
Rebmaj { bass => '', ext => '', ext_canon => '', name => 'Rebmaj', qual => '', qual_canon => '', root => 'Reb', root_canon => 'Reb', root_mod => -1, root_ord => 1, system => 'latin' }
Rebmaj7 { bass => '', ext => 'maj7', ext_canon => 'maj7', name => 'Rebmaj7', qual => '', qual_canon => '', root => 'Reb', root_canon => 'Reb', root_mod => -1, root_ord => 1, system => 'latin' }
Rebdim { bass => '', ext => '', ext_canon => '', name => 'Rebdim', qual => 'dim', qual_canon => 0, root => 'Reb', root_canon => 'Reb', root_mod => -1, root_ord => 1, system => 'latin' }
Rebm { bass => '', ext => '', ext_canon => '', name => 'Rebm', qual => 'm', qual_canon => '-', root => 'Reb', root_canon => 'Reb', root_mod => -1, root_ord => 1, system => 'latin' }
Rebmin { bass => '', ext => '', ext_canon => '', name => 'Rebmin', qual => 'min', qual_canon => '-', root => 'Reb', root_canon => 'Reb', root_mod => -1, root_ord => 1, system => 'latin' }
Rebm7 { bass => '', ext => 7, ext_canon => 7, name => 'Rebm7', qual => 'm', qual_canon => '-', root => 'Reb', root_canon => 'Reb', root_mod => -1, root_ord => 1, system => 'latin' }
Re { bass => '', ext => '', ext_canon => '', name => 'Re', qual => '', qual_canon => '', root => 'Re', root_canon => 'Re', root_mod => 0, root_ord => 2, system => 'latin' }
Re+ { bass => '', ext => '', ext_canon => '', name => 'Re+', qual => '+', qual_canon => '+', root => 'Re', root_canon => 'Re', root_mod => 0, root_ord => 2, system => 'latin' }
Re4 { bass => '', ext => 4, ext_canon => 4, name => 'Re4', qual => '', qual_canon => '', root => 'Re', root_canon => 'Re', root_mod => 0, root_ord => 2, system => 'latin' }
Re6 { bass => '', ext => 6, ext_canon => 6, name => 'Re6', qual => '', qual_canon => '', root => 'Re', root_canon => 'Re', root_mod => 0, root_ord => 2, system => 'latin' }
( run in 1.161 second using v1.01-cache-2.11-cpan-13bb782fe5a )