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 )