1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
|
#!perl
use strict;
use warnings;
use Test::More tests => 21;
BEGIN {
use_ok('Math::Symbolic');
}
if ($ENV{TEST_YAPP_PARSER}) {
require Math::Symbolic::Parser::Yapp;
$Math::Symbolic::Parser = Math::Symbolic::Parser::Yapp->new();
}
use Math::Symbolic::ExportConstants qw/:all/;
my $var = Math::Symbolic::Variable->new();
my $x = $var->new( 'x' => 10 );
my $y = $var->new( 'y' => 5 );
my $z = $var->new( 'z' => 1 );
my ( $sub, $code, $trees );
my $func = $z + $x * 2 + $y;
eval <<'HERE';
($sub, $trees) = Math::Symbolic::Compiler->compile_to_sub($func);
HERE
ok( !$@, 'compile_to_sub(), one argument.' );
is_deeply( $trees, [], '- checking results.' );
ok( $sub->( 11, 2, 100 ) == 124, '- checking results.' );
( $sub, $trees ) = ( undef, undef );
eval <<'HERE';
($sub, $trees) = Math::Symbolic::Compiler->compile_to_sub(
$func,
[qw/y/]
);
HERE
ok( !$@, 'compile_to_sub(), two arguments.' );
is_deeply( $trees, [], '- checking results.' );
ok( $sub->( 11, 2, 100 ) == ( 11 + 2 * 2 + 100 ), '- checking results.' );
( $sub, $trees ) = ( undef, undef );
eval <<'HERE';
($sub, $trees) = Math::Symbolic::Compiler->compile_to_sub(
$func,
[qw/z y x/]
);
HERE
ok( !$@, 'compile_to_sub(), two arguments.' );
is_deeply( $trees, [], '- checking results.' );
ok( $sub->( 11, 2, 100 ) == ( 11 + 2 + 2 * 100 ), '- checking results.' );
( $sub, $trees ) = ( undef, undef );
eval <<'HERE';
($code, $trees) = Math::Symbolic::Compiler->compile_to_code($func);
HERE
ok( !$@, 'compile_to_code() - one argument.' );
is_deeply( $trees, [], '- checking results.' );
{
local @_ = ( 2, 100, 3 );
my $res = eval $code;
ok( $res == ( 3 + 100 + 2 * 2 ), '- checking results.' );
}
( $code, $trees ) = ( undef, undef );
eval <<'HERE';
($code, $trees) = Math::Symbolic::Compiler->compile_to_code(
$func,
[qw/z y x/]
);
HERE
ok( !$@, 'compile_to_code() - two arguments.' );
is_deeply( $trees, [], '- checking results.' );
{
local @_ = ( 2, 100, 3 );
my $res = eval $code;
ok( $res == ( 2 * 3 + 100 + 2 ), '- checking results.' );
}
( $code, $trees ) = ( undef, undef );
eval <<'HERE';
($code, $trees) = Math::Symbolic::Compiler->compile_to_code(
$func,
[qw/y/]
);
HERE
ok( !$@, 'compile_to_code() - two arguments.' );
is_deeply( $trees, [], '- checking results.' );
{
local @_ = ( 2, 100, 3 );
my $res = eval $code;
ok( $res == ( 3 + 2 * 100 + 2 ), '- checking results.' );
}
( $code, $trees ) = ( undef, undef );
$@ = undef;
eval <<'HERE';
($sub, $code, $trees) =
Math::Symbolic::Compiler->compile($func, [qw/x/]);
HERE
ok( !$@, 'compile()' );
my $no = $sub->( 1, 2, 3 );
ok( $no == ( 2 + 2 + 3 ), 'Correct result of sub', );
|