]> git.vpit.fr Git - perl/modules/B-RecDeparse.git/blob - t/11-args.t
Importing B-RecDeparse-0.01.tar.gz
[perl/modules/B-RecDeparse.git] / t / 11-args.t
1 #!perl -T
2
3 use strict;
4 use warnings;
5
6 use Test::More tests => 4 * 4 + 4 * 2;
7
8 use B::Deparse;
9 use B::RecDeparse;
10
11 sub add ($$) { $_[0] + $_[1] }
12 sub mul { $_[0] * $_[1] }
13 sub fma { add mul($_[0], $_[1]), $_[2] }
14 sub wut { fma $_[0], 2, $_[1] }
15
16 my @br_args = ('', '-sCi0v1');
17 my @brd_args = ({ }, { deparse => undef }, { deparse => { } }, { deparse => [ ] });
18
19 my $br = B::Deparse->new();
20 my $reference = $br->coderef2text(\&wut);
21 my $i = 1;
22 for (@brd_args) {
23  my $brd = B::RecDeparse->new(%$_, level => 0);
24  my $code = $brd->coderef2text(\&wut);
25  is($code, $reference, "empty deparse and level 0 does the same thing as B::Deparse ($i)");
26  $code = eval 'sub ' . $code;
27  is($@, '', "result compiles ($i)");
28  is_deeply( [ defined $code, ref $code ], [ 1, 'CODE' ], "result compiles to a code reference ($i)");
29  is($code->(1, 3), wut(1, 3), "result compiles to the good thing ($i)");
30  ++$i;
31 }
32
33 my $br_opts = '-sCi0v1';
34 @brd_args = ({ deparse => $br_opts }, { deparse => [ $br_opts ] });
35 for (@brd_args) {
36  $br = B::Deparse->new($br_opts);
37  my $brd = B::RecDeparse->new(%$_, level => 0);
38  my $code = $brd->coderef2text(\&wut);
39  is($code, $br->coderef2text(\&wut), "B::RecDeparse->new(deparse => '$br_opts' ), level => 0) does the same thing as B::Deparse->new('$br_opts') ($i)");
40  $code = eval 'sub ' . $code;
41  is($@, '', "result compiles ($i)");
42  is_deeply( [ defined $code, ref $code ], [ 1, 'CODE' ], "result compiles to a code reference ($i)");
43  is($code->(1, 3), wut(1, 3), "result compiles to the good thing ($i)");
44  ++$i;
45 }