]> git.vpit.fr Git - perl/modules/B-RecDeparse.git/blob - t/13-prototypes.t
19889d76a1834ee73595185763e7338e43b774eb
[perl/modules/B-RecDeparse.git] / t / 13-prototypes.t
1 #!perl -T
2
3 use strict;
4 use warnings;
5
6 use Test::More tests => (3 + 3) * 5;
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 sub which {
17  my ($brd, $yes, $no, $l) = @_;
18  my $code = $brd->coderef2text(\&wut);
19  for (@$yes) {
20   like($code, qr/\b$_\b/, "expansion at level $l contains $_");
21  }
22  for (@$no) {
23   unlike($code, qr/\b$_\b/, "expansion at level $l does not contain $_");
24  }
25  $code = eval 'sub ' . $code;
26  is($@, '', "result compiles at level $l");
27  is_deeply( [ defined $code, ref $code ], [ 1, 'CODE' ], "result compiles to a code reference at level $l");
28  is($code->(1, 3), wut(1, 3), "result compiles to the good thing at level $l");
29 }
30
31 my $br_args = '-sCi0v1';
32
33 my $brd = B::RecDeparse->new(deparse => [ $br_args ], level => -1);
34 which $brd, [ ], [ qw/add mul fma/ ], -1;
35
36 $brd = B::RecDeparse->new(deparse => [ $br_args ], level => 0);
37 which $brd, [ qw/fma/ ], [ qw/add mul/ ], 0;
38
39 $brd = B::RecDeparse->new(deparse => [ $br_args ], level => 1);
40 which $brd, [ qw/add mul/ ], [ qw/fma/ ], 1;
41
42 $brd = B::RecDeparse->new(deparse => [ $br_args ], level => 2);
43 which $brd, [ ], [ qw/add mul fma/ ], 2;
44
45 $brd = B::RecDeparse->new(deparse => [ $br_args ], level => 3);
46 which $brd, [ ], [ qw/add mul fma/ ], 2;