File: 14compile.t

package info (click to toggle)
libmath-symbolic-perl 0.613-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,268 kB
  • sloc: perl: 12,638; makefile: 9
file content (114 lines) | stat: -rw-r--r-- 2,695 bytes parent folder | download | duplicates (6)
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', );