App-Music-ChordPro

 view release on metacpan or  search on metacpan

t/109_chords_nashville.t  view on Meta::CPAN

use utf8;
use ChordPro::Testing;
use ChordPro::Chords;

my %tbl;

while ( <DATA> ) {
    chomp;
    my ( $chord, $info ) = split( /\t/, $_ );
    my $c = $chord;
    $c =~ s/[()]//g;
    $tbl{$c} = $info;
}

plan tests => 0 + keys(%tbl);

ChordPro::Chords::set_parser("nashville");

=for generating

for my $r ( '1', '#1', 'b2', '2', '#2', 'b3', '3', '4',
	    '#4', 'b5', '5', '#5', 'b6', '6', '#6', 'b7', '7' ) {
    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");
	}
    }
}

exit;

=cut

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};		# unbless
    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__
1	{ bass => '', ext => '', ext_canon => '', name => 1, qual => '', qual_canon => '', root => 1, root_canon => 1, root_mod => 0, root_ord => 0, system => 'nashville' }
17	{ bass => '', ext => 7, ext_canon => 7, name => 17, qual => '', qual_canon => '', root => 1, root_canon => 1, root_mod => 0, root_ord => 0, system => 'nashville' }
1^	{ bass => '', ext => '^', ext_canon => '^', name => '1^', qual => '', qual_canon => '', root => 1, root_canon => 1, root_mod => 0, root_ord => 0, system => 'nashville' }
1h	{ bass => '', ext => 'h', ext_canon => 'h', name => '1h', qual => '', qual_canon => '', root => 1, root_canon => 1, root_mod => 0, root_ord => 0, system => 'nashville' }
1h7	{ bass => '', ext => 'h7', ext_canon => 'h7', name => '1h7', qual => '', qual_canon => '', root => 1, root_canon => 1, root_mod => 0, root_ord => 0, system => 'nashville' }
1^7	{ bass => '', ext => '^7', ext_canon => '^7', name => '1^7', qual => '', qual_canon => '', root => 1, root_canon => 1, root_mod => 0, root_ord => 0, system => 'nashville' }
1-	{ bass => '', ext => '', ext_canon => '', name => '1-', qual => '-', qual_canon => '-', root => 1, root_canon => 1, root_mod => 0, root_ord => 0, system => 'nashville' }
1-7	{ bass => '', ext => 7, ext_canon => 7, name => '1-7', qual => '-', qual_canon => '-', root => 1, root_canon => 1, root_mod => 0, root_ord => 0, system => 'nashville' }
1-^	{ bass => '', ext => '^', ext_canon => '^', name => '1-^', qual => '-', qual_canon => '-', root => 1, root_canon => 1, root_mod => 0, root_ord => 0, system => 'nashville' }
1-h	{ bass => '', ext => 'h', ext_canon => 'h', name => '1-h', qual => '-', qual_canon => '-', root => 1, root_canon => 1, root_mod => 0, root_ord => 0, system => 'nashville' }
1-h7	{ bass => '', ext => 'h7', ext_canon => 'h7', name => '1-h7', qual => '-', qual_canon => '-', root => 1, root_canon => 1, root_mod => 0, root_ord => 0, system => 'nashville' }
1-^7	{ bass => '', ext => '^7', ext_canon => '^7', name => '1-^7', qual => '-', qual_canon => '-', root => 1, root_canon => 1, root_mod => 0, root_ord => 0, system => 'nashville' }
10	{ bass => '', ext => '', ext_canon => '', name => 10, qual => 0, qual_canon => 0, root => 1, root_canon => 1, root_mod => 0, root_ord => 0, system => 'nashville' }
107	{ bass => '', ext => 7, ext_canon => 7, name => 107, qual => 0, qual_canon => 0, root => 1, root_canon => 1, root_mod => 0, root_ord => 0, system => 'nashville' }
10^	{ bass => '', ext => '^', ext_canon => '^', name => '10^', qual => 0, qual_canon => 0, root => 1, root_canon => 1, root_mod => 0, root_ord => 0, system => 'nashville' }
10h	{ bass => '', ext => 'h', ext_canon => 'h', name => '10h', qual => 0, qual_canon => 0, root => 1, root_canon => 1, root_mod => 0, root_ord => 0, system => 'nashville' }
10h7	{ bass => '', ext => 'h7', ext_canon => 'h7', name => '10h7', qual => 0, qual_canon => 0, root => 1, root_canon => 1, root_mod => 0, root_ord => 0, system => 'nashville' }
10^7	{ bass => '', ext => '^7', ext_canon => '^7', name => '10^7', qual => 0, qual_canon => 0, root => 1, root_canon => 1, root_mod => 0, root_ord => 0, system => 'nashville' }
1+	{ bass => '', ext => '', ext_canon => '', name => '1+', qual => '+', qual_canon => '+', root => 1, root_canon => 1, root_mod => 0, root_ord => 0, system => 'nashville' }
1+7	{ bass => '', ext => 7, ext_canon => 7, name => '1+7', qual => '+', qual_canon => '+', root => 1, root_canon => 1, root_mod => 0, root_ord => 0, system => 'nashville' }
1+^	{ bass => '', ext => '^', ext_canon => '^', name => '1+^', qual => '+', qual_canon => '+', root => 1, root_canon => 1, root_mod => 0, root_ord => 0, system => 'nashville' }
1+h	{ bass => '', ext => 'h', ext_canon => 'h', name => '1+h', qual => '+', qual_canon => '+', root => 1, root_canon => 1, root_mod => 0, root_ord => 0, system => 'nashville' }
1+h7	{ bass => '', ext => 'h7', ext_canon => 'h7', name => '1+h7', qual => '+', qual_canon => '+', root => 1, root_canon => 1, root_mod => 0, root_ord => 0, system => 'nashville' }
1+^7	{ bass => '', ext => '^7', ext_canon => '^7', name => '1+^7', qual => '+', qual_canon => '+', root => 1, root_canon => 1, root_mod => 0, root_ord => 0, system => 'nashville' }
#1	{ bass => '', ext => '', ext_canon => '', name => '#1', qual => '', qual_canon => '', root => 1, root_canon => 1, root_mod => 1, root_ord => 1, system => 'nashville' }
#17	{ bass => '', ext => 7, ext_canon => 7, name => '#17', qual => '', qual_canon => '', root => 1, root_canon => 1, root_mod => 1, root_ord => 1, system => 'nashville' }
#1^	{ bass => '', ext => '^', ext_canon => '^', name => '#1^', qual => '', qual_canon => '', root => 1, root_canon => 1, root_mod => 1, root_ord => 1, system => 'nashville' }
#1h	{ bass => '', ext => 'h', ext_canon => 'h', name => '#1h', qual => '', qual_canon => '', root => 1, root_canon => 1, root_mod => 1, root_ord => 1, system => 'nashville' }
#1h7	{ bass => '', ext => 'h7', ext_canon => 'h7', name => '#1h7', qual => '', qual_canon => '', root => 1, root_canon => 1, root_mod => 1, root_ord => 1, system => 'nashville' }
#1^7	{ bass => '', ext => '^7', ext_canon => '^7', name => '#1^7', qual => '', qual_canon => '', root => 1, root_canon => 1, root_mod => 1, root_ord => 1, system => 'nashville' }
#1-	{ bass => '', ext => '', ext_canon => '', name => '#1-', qual => '-', qual_canon => '-', root => 1, root_canon => 1, root_mod => 1, root_ord => 1, system => 'nashville' }
#1-7	{ bass => '', ext => 7, ext_canon => 7, name => '#1-7', qual => '-', qual_canon => '-', root => 1, root_canon => 1, root_mod => 1, root_ord => 1, system => 'nashville' }
#1-^	{ bass => '', ext => '^', ext_canon => '^', name => '#1-^', qual => '-', qual_canon => '-', root => 1, root_canon => 1, root_mod => 1, root_ord => 1, system => 'nashville' }
#1-h	{ bass => '', ext => 'h', ext_canon => 'h', name => '#1-h', qual => '-', qual_canon => '-', root => 1, root_canon => 1, root_mod => 1, root_ord => 1, system => 'nashville' }
#1-h7	{ bass => '', ext => 'h7', ext_canon => 'h7', name => '#1-h7', qual => '-', qual_canon => '-', root => 1, root_canon => 1, root_mod => 1, root_ord => 1, system => 'nashville' }
#1-^7	{ bass => '', ext => '^7', ext_canon => '^7', name => '#1-^7', qual => '-', qual_canon => '-', root => 1, root_canon => 1, root_mod => 1, root_ord => 1, system => 'nashville' }
#10	{ bass => '', ext => '', ext_canon => '', name => '#10', qual => 0, qual_canon => 0, root => 1, root_canon => 1, root_mod => 1, root_ord => 1, system => 'nashville' }
#107	{ bass => '', ext => 7, ext_canon => 7, name => '#107', qual => 0, qual_canon => 0, root => 1, root_canon => 1, root_mod => 1, root_ord => 1, system => 'nashville' }
#10^	{ bass => '', ext => '^', ext_canon => '^', name => '#10^', qual => 0, qual_canon => 0, root => 1, root_canon => 1, root_mod => 1, root_ord => 1, system => 'nashville' }
#10h	{ bass => '', ext => 'h', ext_canon => 'h', name => '#10h', qual => 0, qual_canon => 0, root => 1, root_canon => 1, root_mod => 1, root_ord => 1, system => 'nashville' }
#10h7	{ bass => '', ext => 'h7', ext_canon => 'h7', name => '#10h7', qual => 0, qual_canon => 0, root => 1, root_canon => 1, root_mod => 1, root_ord => 1, system => 'nashville' }
#10^7	{ bass => '', ext => '^7', ext_canon => '^7', name => '#10^7', qual => 0, qual_canon => 0, root => 1, root_canon => 1, root_mod => 1, root_ord => 1, system => 'nashville' }
#1+	{ bass => '', ext => '', ext_canon => '', name => '#1+', qual => '+', qual_canon => '+', root => 1, root_canon => 1, root_mod => 1, root_ord => 1, system => 'nashville' }
#1+7	{ bass => '', ext => 7, ext_canon => 7, name => '#1+7', qual => '+', qual_canon => '+', root => 1, root_canon => 1, root_mod => 1, root_ord => 1, system => 'nashville' }
#1+^	{ bass => '', ext => '^', ext_canon => '^', name => '#1+^', qual => '+', qual_canon => '+', root => 1, root_canon => 1, root_mod => 1, root_ord => 1, system => 'nashville' }
#1+h	{ bass => '', ext => 'h', ext_canon => 'h', name => '#1+h', qual => '+', qual_canon => '+', root => 1, root_canon => 1, root_mod => 1, root_ord => 1, system => 'nashville' }
#1+h7	{ bass => '', ext => 'h7', ext_canon => 'h7', name => '#1+h7', qual => '+', qual_canon => '+', root => 1, root_canon => 1, root_mod => 1, root_ord => 1, system => 'nashville' }
#1+^7	{ bass => '', ext => '^7', ext_canon => '^7', name => '#1+^7', qual => '+', qual_canon => '+', root => 1, root_canon => 1, root_mod => 1, root_ord => 1, system => 'nashville' }
b2	{ bass => '', ext => '', ext_canon => '', name => 'b2', qual => '', qual_canon => '', root => 2, root_canon => 2, root_mod => -1, root_ord => 1, system => 'nashville' }
b27	{ bass => '', ext => 7, ext_canon => 7, name => 'b27', qual => '', qual_canon => '', root => 2, root_canon => 2, root_mod => -1, root_ord => 1, system => 'nashville' }
b2^	{ bass => '', ext => '^', ext_canon => '^', name => 'b2^', qual => '', qual_canon => '', root => 2, root_canon => 2, root_mod => -1, root_ord => 1, system => 'nashville' }
b2h	{ bass => '', ext => 'h', ext_canon => 'h', name => 'b2h', qual => '', qual_canon => '', root => 2, root_canon => 2, root_mod => -1, root_ord => 1, system => 'nashville' }



( run in 2.335 seconds using v1.01-cache-2.11-cpan-364913b4093 )