The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use lib 
    '../Pugs-Compiler-Rule/lib',
    '../Pugs-Compiler-Tokenizer/lib',
    '../Pugs-Compiler-Precedence/lib',
;

use Test::More tests => 2;

use Pugs::Compiler::Rule;
use Pugs::Grammar::Precedence;
use Pugs::Grammar::Term;
use Pugs::Grammar::Operator;

use Pugs::Grammar::Expression;
use Pugs::Grammar::Perl6;

use Data::Dumper;
$Data::Dumper::Indent = 1;
$Data::Dumper::Sortkeys = 1;

{
    my $match = Pugs::Grammar::Perl6->parse( q(10;) );
    #print Dumper $match->();
    is_deeply(
        $match->(),
        { 
          int => 10,
          pos => 2, 
        },
        'term 1'
    );
}

TODO:
{
    local $TODO = "expression without trailing ';'";
    my $match;
    eval {
        $match = Pugs::Grammar::Perl6->parse( q(10) );
    };
    #print Dumper $match->();
    is_deeply(
        $match->(),
        { 
          int => 10,
          pos => 2, 
        },
        'term 1'
    );
}

__END__

# TODO - update

{
    my $match = Pugs::Grammar::Expression->ast( q(10+20) );
    #print Dumper $match->();
    is_deeply(
        $match->(),
        { 
          'exp1' => {
            'num' => '10'
          },
          'exp2' => {
            'num' => '20'
          },
          'op1' => '+'
        },
        'term 2'
    );
}

{
    my $match = Pugs::Grammar::Expression->ast( q(10,20) );
    #print Dumper $match->();
    is_deeply(
        $match->(),
        { 
          'list' => [
            {
              'num' => '10'
            },
            {
              'num' => '20'
            }
          ],
          'op1' => ','
        },
        'list'
    );
}

{
    my $match = Pugs::Grammar::Expression->ast( q(10 + $a / "abc") );
    #print Dumper $match->();
    
    is_deeply(
        $match->(),
    
        {
      'exp1' => {
        'num' => '10'
      },
      'exp2' => {
        'exp1' => {
          'scalar' => '$a'
        },
        'exp2' => {
          'double_quoted' => 'abc'
        },
        'op1' => '/'
      },
          'op1' => '+'
        },
    
        'expression q(10 + $a / "abc")'
    );
}

{
    my $match = Pugs::Grammar::Expression->ast( q(1,2,3) );
    #print Dumper $match->();
    is_deeply(
        $match->(),
        {
          'list' => [
            {
              'num' => '1'
            },
            {
              'num' => '2'
            },
            {
              'num' => '3'
            }
          ],
          'op1' => ','
        },
        'list expression'
    );
}

{
    my $match = Pugs::Grammar::Expression->ast( q(1,2 Y 3) );
    #print Dumper $match->();
    is_deeply(
        $match->(),
        {
          'list' => [
            {
              'list' => [
                {
                  'num' => '1'
                },
                {
                  'num' => '2'
                }
              ],
              'op1' => ','
            },
            {
              'num' => '3'
            }
          ],
          'op1' => 'Y'
        },
        'list+list expression'
    );
}