]> git.vpit.fr Git - perl/modules/Sub-Nary.git/blob - t/27-die.t
Work in progress
[perl/modules/Sub-Nary.git] / t / 27-die.t
1 #!perl -T
2
3 use strict;
4 use warnings;
5
6 use Test::More tests => 14;
7
8 use Sub::Nary;
9
10 my $sn = Sub::Nary->new();
11
12 my ($x, $y);
13
14 sub dies {
15  if ($x) {
16   die do { return 3, 4 if $y }
17  }
18  @_[0 .. 2];
19 }
20
21 my @tests = (
22  [ sub { die },                        { die => 1 } ],
23  [ sub { die 1 },                      { die => 1 } ],
24  [ sub { if ($x) { die } },            { die => 0.5, 1 => 0.5 } ],
25  [ sub { if (die) { return 1, 2 } },   { die => 1 } ],
26  [ sub { die do { return 3, 4 } },     { 2 => 1 } ],
27  [ sub { $x ? die($y ? die : return(2, 3)) : 4 },
28                                        { die => 0.25, 2 => 0.25, 1 => 0.5 } ],
29
30  [ \&dies,                             { die => 0.25, 2 => 0.25, 3 => 0.5 } ],
31  [ sub { dies(), do { $x ? @_ : 1 } }, { die => 0.25, 3 => 0.125, 4 => 0.25,
32                                           list => (0.25 + 0.5) * 0.5 } ],
33  [ sub { dies(), 1, do { $x ? @_ : 1 } },
34           { die => 0.25, 4 => 0.125, 5 => 0.25, list => (0.25 + 0.5) * 0.5 } ],
35
36  [ sub { eval "1, do { die }, 3" },      'list' ],
37  [ sub { eval { die } },                 { 0 => 1 } ],
38  [ sub { eval { $x ? die : (4, 5) } },   { 0 => 0.5, 2 => 0.5 } ],
39  [ sub { my @a = eval { $x ? die : (4, 5) }; die if $@; 7 },
40                                          { die => 0.5, 1 => 0.5 } ],
41  [ sub { my @a = eval { $x ? die : return (4, 5) }; die if $@; 7 },
42                                          { 2 => 0.5, die => 0.25, 1 => 0.25 } ],
43 );
44
45 my $i = 1;
46 for (@tests) {
47  my $r = $sn->nary($_->[0]);
48  my $exp = ref $_->[1] ? $_->[1] : { $_->[1] => 1 };
49  is_deeply($r, $exp, 'die test ' . $i);
50  ++$i;
51 }