The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w    

# $Id: $

use strict;
use 5.006;
use warnings;

use Test::More tests => 33;
use FindBin;
use lib "$FindBin::Bin/../lib";
use Parse::RPN;

#########################
my $WIDTH = 35;

# Insert your test code below, the Test module is use()ed here so read
# its man page ( perldoc Test ) for help writing this test script
$| = 1;
my @tests;

push @tests, [ 'alpha,alpha,EQ',                  1,                'EQ' ];
push @tests, [ 'alpha,beta,EQ',                   0,                'EQ' ];
push @tests, [ 'alpha,alpha,NE',                  0,                'NE' ];
push @tests, [ 'alpha,beta,NE',                   1,                'NE' ];
push @tests, [ 'a,a,LT',                          0,                'LT' ];
push @tests, [ 'a,b,LT',                          1,                'LT' ];
push @tests, [ 'b,a,LT',                          0,                'LT' ];
push @tests, [ 'a,a,GT',                          0,                'GT' ];
push @tests, [ 'a,b,GT',                          0,                'GT' ];
push @tests, [ 'b,a,GT',                          1,                'GT' ];
push @tests, [ 'a,a,LE',                          1,                'LE' ];
push @tests, [ 'a,b,LE',                          1,                'LE' ];
push @tests, [ 'b,a,LE',                          0,                'LE' ];
push @tests, [ 'a,a,GE',                          1,                'GE' ];
push @tests, [ 'a,b,GE',                          0,                'GE' ];
push @tests, [ 'b,a,GE',                          1,                'GE' ];
push @tests, [ 'a,a,CMP',                         0,                'CMP' ];
push @tests, [ 'a,b,CMP',                         -1,               'CMP' ];
push @tests, [ 'b,a,CMP',                         1,                'CMP' ];
push @tests, [ 'alpha,LEN',                       5,                'LEN' ];
push @tests, [ 'a,b,CAT',                         'ab',             'CAT' ];
push @tests, [ 'a,b,c,d,e,f,g,3,CATN',            'a b c d gfe',    'CATN' ];
push @tests, [ 'a,b,c,d,CATALL',                  'abcd',           'CATALL' ];
push @tests, [ 'a,b,c,d,e,f,g,#,JOIN',            'a b c d e f#g',  'JOIN' ];
push @tests, [ 'a,b,c,d,e,f,g,#,3,JOINN',         'a b c d g#f#e',  'JOINN' ];
push @tests, [ 'a,b,c,d,e,f,g,#,JOINALL',         'a#b#c#d#e#f#g',  'JOINALL' ];
push @tests, [ 'a,4,REP',                         'aaaa',           'REP' ];
push @tests, [ 'alpha,REV',                       'ahpla',          'REV' ];
push @tests, [ 'test a simple string,7,6,SUBSTR', 'simple',         'SUBSTR' ];
push @tests, [ 'alpha,UC',                        'ALPHA',          'UC' ];
push @tests, [ 'ALPHA,LC',                        'alpha',          'LC' ];
push @tests, [ 'alpha,UCFIRST',                   'Alpha',          'UCFIRST' ];
push @tests, [ 'ALPHA,LCFIRST',                   'aLPHA',          'LCFIRST' ];


foreach ( @tests )
{
    my ( $test, $result, $type ) = @{ $_ };
    my $ret = rpn( $test );
    ok( $ret eq $result, " \t" . t_format( $type ) . "\t=>\t" . t_format( $test ) . "\t=\t" . ( $ret ) );
}

sub t_format
{
    my $val = shift;
    my $tmp = ' ' x $WIDTH;
    substr( $tmp, 0, length( $val ), $val );
    return $tmp;
}