X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=t%2F24-ops.t;h=b636cf847f3c297999e49a617498d89bf0cbe1e8;hb=fd35681c6f0a1e84d407dbe4fcc7a3c25e4d8851;hp=a74fa43b73f5042d5b225fc7c9083ac06dda6b9d;hpb=8a8dfb1c7d8ea124bf65333fa975667185b4cd73;p=perl%2Fmodules%2FSub-Nary.git diff --git a/t/24-ops.t b/t/24-ops.t index a74fa43..b636cf8 100644 --- a/t/24-ops.t +++ b/t/24-ops.t @@ -3,7 +3,7 @@ use strict; use warnings; -use Test::More tests => 26; +use Test::More tests => 49; use Sub::Nary; @@ -11,7 +11,58 @@ my $sn = Sub::Nary->new(); my ($x, %h); +sub zeroorone { + return (rand() < 0.1) ? () : 1; +} + +sub oneortwo { + if (rand() < 0.1) { + return 3 + } else { + 4, 5 + } +} + +sub onetwothree { + my $r = rand(); + if ($r < 0.1) { + return 3 + } elsif ($r < 0.9) { + return 4, 5 + } + return 4, do { 5, 6 }; +} + +# { 1 => 0.5, 2 => 0.5 } * 0.5 + { 2 => 0.25, 3 => 0.5, 4 => 0.25 } * 0.5 +my $exp_22 = { 1 => 0.5 * 0.5, 2 => (0.5 + 0.25) * 0.5, 3 => 0.5 * 0.5, 4 => 0.25 * 0.5 }; + +# { 1 => 0.5, 2 => 0.25, 3 => 0.25 } * 0.5 + { 2 => 0.25, 3 => 0.25, 4 => 0.3125, 5 => 0.125, 6 => 0.0625 } * 0.5 +my $exp_32 = { 1 => 0.5/2, 2 => (0.25+0.25)/2, 3 => (0.25+0.25)/2, 4 => (0.3125)/2, 5 => (0.125)/2, 6 => (0.0625)/2 }; + +my $b3 = 0.5 ** 3; +my $exp_23 = { 3 => $b3, 4 => 3 * $b3, 5 => 3 * $b3, 6 => $b3 }; + my @tests = ( + [ sub { delete $h{foo} }, 1 ], + [ sub { delete @h{qw/foo bar baz/} }, 3 ], + + [ sub { grep { 1 } 1 .. 10 }, 'list' ], + [ sub { grep { 1 } @_ }, 'list' ], + + [ sub { map { $_ } 1 .. 3 }, 3 ], + [ sub { map { () } @_ }, 0 ], + [ sub { map { @_ } () }, 0 ], + [ sub { map { @_ } 1, 2 }, 'list' ], + [ sub { map { $_ } oneortwo() }, { 1 => 0.5, 2 => 0.5 } ], + [ sub { map { $_ ? 7 : (8, 9) } 1 .. 3 }, $exp_23 ], + [ sub { map oneortwo, 1 .. 3 }, $exp_23 ], + [ sub { map oneortwo, @_ }, 'list' ], + [ sub { map zeroorone, @_ }, { 0 => 0.5, list => 0.5 } ], + [ sub { map { $_ ? () : 12 } do { $x ? 7 : () } }, { 0 => 0.75, 1 => 0.25 } ], + [ sub { map zeroorone, do { $x ? 7 : () } }, { 0 => 0.75, 1 => 0.25 } ], + [ sub { map oneortwo, oneortwo }, $exp_22 ], + [ sub { map onetwothree, oneortwo }, $exp_32 ], + [ sub { return <$x> }, 'list' ], [ sub { -f $0, -r $0 }, 2 ], @@ -26,23 +77,35 @@ my @tests = ( [ sub { do { getpwnam 'root' } }, { 0 => 0.5, 10 => 0.5 } ], [ sub { 1; getpwuid '0' }, { 0 => 0.5, 10 => 0.5 } ], [ sub { eval { return getpwent } }, { 0 => 0.5, 10 => 0.5 } ], + [ sub { do { getgrnam 'root' } }, { 0 => 0.5, 4 => 0.5 } ], [ sub { 1; getgrgid '0' }, { 0 => 0.5, 4 => 0.5 } ], [ sub { eval { return getgrent } }, { 0 => 0.5, 4 => 0.5 } ], + [ sub { do { gethostbyname 'localhost' } }, 'list' ], [ sub { 1; gethostbyaddr '', '' }, 'list' ], [ sub { eval { return gethostent } }, 'list' ], + [ sub { do { getnetbyname '' } }, { 0 => 0.5, 4 => 0.5 } ], [ sub { 1; getnetbyaddr '', '' }, { 0 => 0.5, 4 => 0.5 } ], [ sub { eval { return getnetent } }, { 0 => 0.5, 4 => 0.5 } ], + [ sub { do { getprotobyname 'tcp' } }, { 0 => 0.5, 3 => 0.5 } ], [ sub { 1; getprotobynumber 6 }, { 0 => 0.5, 3 => 0.5 } ], [ sub { eval { return getprotoent } }, { 0 => 0.5, 3 => 0.5 } ], + [ sub { do { getservbyname 'ssh', 'tcp' } }, { 0 => 0.5, 4 => 0.5 } ], [ sub { 1; getservbyport 22, 'tcp' }, { 0 => 0.5, 4 => 0.5 } ], [ sub { eval { return getservent } }, { 0 => 0.5, 4 => 0.5 } ], - [ sub { <*.*> }, { list => 1 / 3, 1 => 2 / 3 } ], + [ sub { endpwent }, 1 ], + [ sub { endgrent }, 1 ], + [ sub { endhostent }, 1 ], + [ sub { endnetent }, 1 ], + [ sub { endprotoent }, 1 ], + [ sub { endservent }, 1 ], + + [ sub { <*.*> }, { list => 0.5, 1 => 0.5 } ], ); my $i = 1;