7 require Config; import Config;
8 keys %Config; # Silence warning
9 if ($Config{extensions} !~ /\bList\/Util\b/) {
10 print "1..0 # Skip: List::Util was not built\n";
16 use Test::More tests => 13;
18 use List::Util qw(product);
21 is( $v, 1, 'no args');
24 is( $v, 9, 'one arg');
26 $v = product(1,2,3,4);
27 is( $v, 24, '4 args');
30 is( $v, -1, 'one -1');
35 is( $v, -9, 'variable arg');
38 is( $v, -10.5, 'real numbers');
40 my $one = Foo->new(1);
41 my $two = Foo->new(2);
42 my $four = Foo->new(4);
44 $v = product($one,$two,$four);
45 is($v, 8, 'overload');
51 '""' => sub { ${$_[0]} },
52 '+0' => sub { ${$_[0]} },
57 bless \$value, $class;
62 my $v1 = Math::BigInt->new(2) ** Math::BigInt->new(65);
64 $v = product($v1,$v2);
65 is($v, $v1 * $v2, 'bigint');
67 $v = product(42, $v1);
68 is($v, $v1 * 42, 'bigint + builtin int');
70 $v = product(42, $v1, 2);
71 is($v, $v1 * 42 * 2, 'bigint + builtin int');
76 '0+' => sub { $_[0][0] },
77 '""' => sub { my $r = "$_[0][0]"; $r = "+$r" unless $r =~ m/^\-/; $r .= " [$_[0][1]]"; $r },
83 my $this = bless [@_], $class;
90 my $e1 = example->new(7, "test");
91 $t = product($e1, 7, 7);
92 is($t, 343, 'overload returning non-overload');
93 $t = product(8, $e1, 8);
94 is($t, 448, 'overload returning non-overload');
95 $t = product(9, 9, $e1);
96 is($t, 567, 'overload returning non-overload');