|
my @tests = (
[ '1' , 1, 1],
[ '1 + a' , 2, 2],
[ 'a + 2 * 3' , 3, 2],
[ 'a + (2 + 3)' , 3, 2],
[ 'b + 2^3' , 3, 2],
[ 'b * 2^3' , 3, 2],
[ ' - 1' , 1, 1],
[ 'a + 2 * 3 + b' , 4, 3],
[ 'a + b * 2^3' , 4, 3],
[ 'a + (2 + 3 * 4)' , 4, 2],
[ '2 + 1 * 5' , 3, 1],
[ 'a + 2 + 3' , 3, 2],
[ '2 + a + 3' , 3, 2],
[ 'a * 2 * 3' , 3, 2],
[ '2 * a * 3' , 3, 2],
[ '2 + a + 3 * 4' , 4, 2],
[ 'a + 2 + (b + 3)' , 4, 3],
[ 'a * 2 * (b * 3)' , 4, 3],
[ 'a + (1 + (b + 2) + 3)' , 5, 3],
[ 'a * (1 * (b * 2) * 3)' , 5, 3],
);
plan tests => 2 * scalar @tests ;
my $m = Math::Expression::Evaluator->new();
for ( @tests ) {
my ( $expr , $l1 , $l2 ) = @$_ ;
$m ->parse( $expr );
cmp_ok( $m ->ast_size, '==' , $l1 , "Unoptimized AST size for $expr" );
$m ->optimize();
cmp_ok( $m ->ast_size, '==' , $l2 , "Optimized AST size for $expr" );
}
|