diff options
author | Jarkko Hietaniemi <jhi@iki.fi> | 2001-06-18 04:17:15 +0000 |
---|---|---|
committer | Jarkko Hietaniemi <jhi@iki.fi> | 2001-06-18 04:17:15 +0000 |
commit | b695f709e8a342e35e482b0437eb6cdacdc58b6b (patch) | |
tree | 2d16192636e6ba806ff7a907f682c74f7705a920 /ext/List | |
parent | d780cd7a0195e946e636d3ee546f6ef4f21d6acc (diff) | |
download | perl-b695f709e8a342e35e482b0437eb6cdacdc58b6b.tar.gz |
The Grand Trek: move the *.t files from t/ to lib/ and ext/.
No doubt I made some mistakes like missed some files or
misnamed some files. The naming rules were more or less:
(1) if the module is from CPAN, follows its ways, be it
t/*.t or test.pl.
(2) otherwise if there are multiple tests for a module
put them in a t/
(3) otherwise if there's only one test put it in Module.t
(4) helper files go to module/ (locale, strict, warnings)
(5) use longer filenames now that we can (but e.g. the
compat-0.6.t and the Text::Balanced test files still
were renamed to be more civil against the 8.3 people)
installperl was updated appropriately not to install the
*.t files or the help files from under lib.
TODO: some helper files still remain under t/ that could
follow their 'masters'. UPDATE: On second thoughts, why
should they. They can continue to live under t/lib, and
in fact the locale/strict/warnings helpers that were moved
could be moved back. This way the amount of non-installable
stuff under lib/ stays smaller.
p4raw-id: //depot/perl@10676
Diffstat (limited to 'ext/List')
-rwxr-xr-x | ext/List/Util/t/blessed.t | 39 | ||||
-rwxr-xr-x | ext/List/Util/t/dualvar.t | 46 | ||||
-rwxr-xr-x | ext/List/Util/t/first.t | 25 | ||||
-rwxr-xr-x | ext/List/Util/t/max.t | 30 | ||||
-rwxr-xr-x | ext/List/Util/t/maxstr.t | 30 | ||||
-rwxr-xr-x | ext/List/Util/t/min.t | 30 | ||||
-rwxr-xr-x | ext/List/Util/t/minstr.t | 30 | ||||
-rw-r--r-- | ext/List/Util/t/readonly.t | 46 | ||||
-rwxr-xr-x | ext/List/Util/t/reduce.t | 30 | ||||
-rwxr-xr-x | ext/List/Util/t/reftype.t | 55 | ||||
-rwxr-xr-x | ext/List/Util/t/sum.t | 23 | ||||
-rw-r--r-- | ext/List/Util/t/tainted.t | 38 | ||||
-rwxr-xr-x | ext/List/Util/t/weak.t | 206 |
13 files changed, 628 insertions, 0 deletions
diff --git a/ext/List/Util/t/blessed.t b/ext/List/Util/t/blessed.t new file mode 100755 index 0000000000..89a740a8cb --- /dev/null +++ b/ext/List/Util/t/blessed.t @@ -0,0 +1,39 @@ +BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + require Config; import Config; + if ($Config{extensions} !~ /\bList\/Util\b/) { + print "1..0 # Skip: List::Util was not built\n"; + exit 0; + } +} + +use Scalar::Util qw(blessed); +use vars qw($t $y $x); + +print "1..7\n"; + +print "not " if blessed(1); +print "ok 1\n"; + +print "not " if blessed('A'); +print "ok 2\n"; + +print "not " if blessed({}); +print "ok 3\n"; + +print "not " if blessed([]); +print "ok 4\n"; + +$y = \$t; + +print "not " if blessed($y); +print "ok 5\n"; + +$x = bless [], "ABC"; + +print "not " unless blessed($x); +print "ok 6\n"; + +print "not " unless blessed($x) eq 'ABC'; +print "ok 7\n"; diff --git a/ext/List/Util/t/dualvar.t b/ext/List/Util/t/dualvar.t new file mode 100755 index 0000000000..5bf4fe95f7 --- /dev/null +++ b/ext/List/Util/t/dualvar.t @@ -0,0 +1,46 @@ +BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + require Config; import Config; + if ($Config{extensions} !~ /\bList\/Util\b/) { + print "1..0 # Skip: List::Util was not built\n"; + exit 0; + } +} + +BEGIN { + require Scalar::Util; + + if (grep { /dualvar/ } @Scalar::Util::EXPORT_FAIL) { + print "1..0\n"; + exit; + } +} + +use Scalar::Util qw(dualvar); + +print "1..6\n"; + +$var = dualvar 2.2,"string"; + +print "not " unless $var == 2.2; +print "ok 1\n"; + +print "not " unless $var eq "string"; +print "ok 2\n"; + +$var2 = $var; + +$var++; + +print "not " unless $var == 3.2; +print "ok 3\n"; + +print "not " unless $var ne "string"; +print "ok 4\n"; + +print "not " unless $var2 == 2.2; +print "ok 5\n"; + +print "not " unless $var2 eq "string"; +print "ok 6\n"; diff --git a/ext/List/Util/t/first.t b/ext/List/Util/t/first.t new file mode 100755 index 0000000000..6a35948e95 --- /dev/null +++ b/ext/List/Util/t/first.t @@ -0,0 +1,25 @@ +BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + require Config; import Config; + if ($Config{extensions} !~ /\bList\/Util\b/) { + print "1..0 # Skip: List::Util was not built\n"; + exit 0; + } +} + +use List::Util qw(first); + +print "1..4\n"; + +print "not " unless defined &first; +print "ok 1\n"; + +print "not " unless 9 == first { 8 == ($_ - 1) } 9,4,5,6; +print "ok 2\n"; + +print "not " if defined(first { 0 } 1,2,3,4); +print "ok 3\n"; + +print "not " if defined(first { 0 }); +print "ok 4\n"; diff --git a/ext/List/Util/t/max.t b/ext/List/Util/t/max.t new file mode 100755 index 0000000000..911003b92a --- /dev/null +++ b/ext/List/Util/t/max.t @@ -0,0 +1,30 @@ +BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + require Config; import Config; + if ($Config{extensions} !~ /\bList\/Util\b/) { + print "1..0 # Skip: List::Util was not built\n"; + exit 0; + } +} + +use List::Util qw(max); + +print "1..5\n"; + +print "not " unless defined &max; +print "ok 1\n"; + +print "not " unless max(1) == 1; +print "ok 2\n"; + +print "not " unless max(1,2) == 2; +print "ok 3\n"; + +print "not " unless max(2,1) == 2; +print "ok 4\n"; + +my @a = map { rand() } 1 .. 20; +my @b = sort { $a <=> $b } @a; +print "not " unless max(@a) == $b[-1]; +print "ok 5\n"; diff --git a/ext/List/Util/t/maxstr.t b/ext/List/Util/t/maxstr.t new file mode 100755 index 0000000000..0ec35cab30 --- /dev/null +++ b/ext/List/Util/t/maxstr.t @@ -0,0 +1,30 @@ +BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + require Config; import Config; + if ($Config{extensions} !~ /\bList\/Util\b/) { + print "1..0 # Skip: List::Util was not built\n"; + exit 0; + } +} + +use List::Util qw(maxstr); + +print "1..5\n"; + +print "not " unless defined &maxstr; +print "ok 1\n"; + +print "not " unless maxstr('a') eq 'a'; +print "ok 2\n"; + +print "not " unless maxstr('a','b') eq 'b'; +print "ok 3\n"; + +print "not " unless maxstr('B','A') eq 'B'; +print "ok 4\n"; + +my @a = map { pack("u", pack("C*",map { int(rand(256))} (0..int(rand(10) + 2)))) } 0 .. 20; +my @b = sort { $a cmp $b } @a; +print "not " unless maxstr(@a) eq $b[-1]; +print "ok 5\n"; diff --git a/ext/List/Util/t/min.t b/ext/List/Util/t/min.t new file mode 100755 index 0000000000..a51ced4e3d --- /dev/null +++ b/ext/List/Util/t/min.t @@ -0,0 +1,30 @@ +BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + require Config; import Config; + if ($Config{extensions} !~ /\bList\/Util\b/) { + print "1..0 # Skip: List::Util was not built\n"; + exit 0; + } +} + +use List::Util qw(min); + +print "1..5\n"; + +print "not " unless defined &min; +print "ok 1\n"; + +print "not " unless min(9) == 9; +print "ok 2\n"; + +print "not " unless min(1,2) == 1; +print "ok 3\n"; + +print "not " unless min(2,1) == 1; +print "ok 4\n"; + +my @a = map { rand() } 1 .. 20; +my @b = sort { $a <=> $b } @a; +print "not " unless min(@a) == $b[0]; +print "ok 5\n"; diff --git a/ext/List/Util/t/minstr.t b/ext/List/Util/t/minstr.t new file mode 100755 index 0000000000..c000e7856d --- /dev/null +++ b/ext/List/Util/t/minstr.t @@ -0,0 +1,30 @@ +BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + require Config; import Config; + if ($Config{extensions} !~ /\bList\/Util\b/) { + print "1..0 # Skip: List::Util was not built\n"; + exit 0; + } +} + +use List::Util qw(minstr); + +print "1..5\n"; + +print "not " unless defined &minstr; +print "ok 1\n"; + +print "not " unless minstr('a') eq 'a'; +print "ok 2\n"; + +print "not " unless minstr('a','b') eq 'a'; +print "ok 3\n"; + +print "not " unless minstr('B','A') eq 'A'; +print "ok 4\n"; + +my @a = map { pack("u", pack("C*",map { int(rand(256))} (0..int(rand(10) + 2)))) } 0 .. 20; +my @b = sort { $a cmp $b } @a; +print "not " unless minstr(@a) eq $b[0]; +print "ok 5\n"; diff --git a/ext/List/Util/t/readonly.t b/ext/List/Util/t/readonly.t new file mode 100644 index 0000000000..864e1f12f2 --- /dev/null +++ b/ext/List/Util/t/readonly.t @@ -0,0 +1,46 @@ +BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + require Config; import Config; + if ($Config{extensions} !~ /\bList\/Util\b/) { + print "1..0 # Skip: List::Util was not built\n"; + exit 0; + } +} + +use Scalar::Util qw(readonly); + +print "1..9\n"; + +print "not " unless readonly(1); +print "ok 1\n"; + +my $var = 2; + +print "not " if readonly($var); +print "ok 2\n"; + +print "not " unless $var == 2; +print "ok 3\n"; + +print "not " unless readonly("fred"); +print "ok 4\n"; + +$var = "fred"; + +print "not " if readonly($var); +print "ok 5\n"; + +print "not " unless $var eq "fred"; +print "ok 6\n"; + +$var = \2; + +print "not " if readonly($var); +print "ok 7\n"; + +print "not " unless readonly($$var); +print "ok 8\n"; + +print "not " if readonly(*STDOUT); +print "ok 9\n"; diff --git a/ext/List/Util/t/reduce.t b/ext/List/Util/t/reduce.t new file mode 100755 index 0000000000..063e0b791b --- /dev/null +++ b/ext/List/Util/t/reduce.t @@ -0,0 +1,30 @@ +BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + require Config; import Config; + if ($Config{extensions} !~ /\bList\/Util\b/) { + print "1..0 # Skip: List::Util was not built\n"; + exit 0; + } +} + +use List::Util qw(reduce min); + +print "1..5\n"; + +print "not " if defined reduce {}; +print "ok 1\n"; + +print "not " unless 9 == reduce { $a / $b } 756,3,7,4; +print "ok 2\n"; + +print "not " unless 9 == reduce { $a / $b } 9; +print "ok 3\n"; + +@a = map { rand } 0 .. 20; +print "not " unless min(@a) == reduce { $a < $b ? $a : $b } @a; +print "ok 4\n"; + +@a = map { pack("C", int(rand(256))) } 0 .. 20; +print "not " unless join("",@a) eq reduce { $a . $b } @a; +print "ok 5\n"; diff --git a/ext/List/Util/t/reftype.t b/ext/List/Util/t/reftype.t new file mode 100755 index 0000000000..ea7ea7bbc1 --- /dev/null +++ b/ext/List/Util/t/reftype.t @@ -0,0 +1,55 @@ +BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + require Config; import Config; + if ($Config{extensions} !~ /\bList\/Util\b/) { + print "1..0 # Skip: List::Util was not built\n"; + exit 0; + } +} + +use Scalar::Util qw(reftype); +use vars qw($t $y $x *F); +use Symbol qw(gensym); + +# Ensure we do not trigger and tied methods +tie *F, 'MyTie'; + +@test = ( + [ undef, 1], + [ undef, 'A'], + [ HASH => {} ], + [ ARRAY => [] ], + [ SCALAR => \$t ], + [ REF => \(\$t) ], + [ GLOB => \*F ], + [ GLOB => gensym ], + [ CODE => sub {} ], +# [ IO => *STDIN{IO} ] the internal sv_reftype returns UNKNOWN +); + +print "1..", @test*4, "\n"; + +my $i = 1; +foreach $test (@test) { + my($type,$what) = @$test; + my $pack; + foreach $pack (undef,"ABC","0",undef) { + print "# $what\n"; + my $res = reftype($what); + printf "# %s - %s\n", map { defined($_) ? $_ : 'undef' } $type,$res; + print "not " if $type ? $res ne $type : defined($res); + bless $what, $pack if $type && defined $pack; + print "ok ",$i++,"\n"; + } +} + +package MyTie; + +sub TIEHANDLE { bless {} } +sub DESTROY {} + +sub AUTOLOAD { + warn "$AUTOLOAD called"; + exit 1; # May be in an eval +} diff --git a/ext/List/Util/t/sum.t b/ext/List/Util/t/sum.t new file mode 100755 index 0000000000..34fb69076a --- /dev/null +++ b/ext/List/Util/t/sum.t @@ -0,0 +1,23 @@ +BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + require Config; import Config; + if ($Config{extensions} !~ /\bList\/Util\b/) { + print "1..0 # Skip: List::Util was not built\n"; + exit 0; + } +} + +use List::Util qw(sum); + +print "1..3\n"; + +print "not " if defined sum; +print "ok 1\n"; + +print "not " unless sum(9) == 9; +print "ok 2\n"; + +print "not " unless sum(1,2,3,4) == 10; +print "ok 3\n"; + diff --git a/ext/List/Util/t/tainted.t b/ext/List/Util/t/tainted.t new file mode 100644 index 0000000000..5587bb7bf9 --- /dev/null +++ b/ext/List/Util/t/tainted.t @@ -0,0 +1,38 @@ +#!./perl -T + +BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + require Config; import Config; + if ($Config{extensions} !~ /\bList\/Util\b/) { + print "1..0 # Skip: List::Util was not built\n"; + exit 0; + } +} + +use lib qw(blib/lib blib/arch); +use Scalar::Util qw(tainted); +use Config; + +print "1..5\n"; + +print "not " if tainted(1); +print "ok 1\n"; + +my $var = 2; + +print "not " if tainted($var); +print "ok 2\n"; + +my $key = (keys %ENV)[0]; + +$var = $ENV{$key}; + +print "not " unless tainted($var); +print "ok 3\n"; + +print "not " unless tainted($ENV{$key}); +print "ok 4\n"; + +print "not " if @ARGV and not tainted($ARGV[0]); +print "ok 5\n"; diff --git a/ext/List/Util/t/weak.t b/ext/List/Util/t/weak.t new file mode 100755 index 0000000000..6c7bea7f4d --- /dev/null +++ b/ext/List/Util/t/weak.t @@ -0,0 +1,206 @@ +BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + require Config; import Config; + if ($Config{extensions} !~ /\bList\/Util\b/) { + print "1..0 # Skip: List::Util was not built\n"; + exit 0; + } +} + +BEGIN { + $|=1; + require Scalar::Util; + if (grep { /weaken/ } @Scalar::Util::EXPORT_FAIL) { + print("1..0\n"); + exit; + } + + $DEBUG = 0; + + if ($DEBUG && eval { require Devel::Peek } ) { + Devel::Peek->import('Dump'); + } + else { + *Dump = sub {}; + } +} + +use Scalar::Util qw(weaken isweak); +print "1..17\n"; + +######################### End of black magic. + +$cnt = 0; + +sub ok { + ++$cnt; + if($_[0]) { print "ok $cnt\n"; } else {print "not ok $cnt\n"; } +} + +$| = 1; + +if(1) { + +my ($y,$z); + +# +# Case 1: two references, one is weakened, the other is then undef'ed. +# + +{ + my $x = "foo"; + $y = \$x; + $z = \$x; +} +print "# START:\n"; +Dump($y); Dump($z); + +ok( $y ne "" and $z ne "" ); +weaken($y); + +print "# WEAK:\n"; +Dump($y); Dump($z); + +ok( $y ne "" and $z ne "" ); +undef($z); + +print "# UNDZ:\n"; +Dump($y); Dump($z); + +ok( not (defined($y) and defined($z)) ); +undef($y); + +print "# UNDY:\n"; +Dump($y); Dump($z); + +ok( not (defined($y) and defined($z)) ); + +print "# FIN:\n"; +Dump($y); Dump($z); + +# exit(0); + +# } +# { + +# +# Case 2: one reference, which is weakened +# + +# kill 5,$$; + +print "# CASE 2:\n"; + +{ + my $x = "foo"; + $y = \$x; +} + +ok( $y ne "" ); +print "# BW: \n"; +Dump($y); +weaken($y); +print "# AW: \n"; +Dump($y); +ok( not defined $y ); + +print "# EXITBLOCK\n"; +} + +# exit(0); + +# +# Case 3: a circular structure +# + +# kill 5, $$; + +$flag = 0; +{ + my $y = bless {}, Dest; + Dump($y); + print "# 1: $y\n"; + $y->{Self} = $y; + Dump($y); + print "# 2: $y\n"; + $y->{Flag} = \$flag; + print "# 3: $y\n"; + weaken($y->{Self}); + print "# WKED\n"; + ok( $y ne "" ); + print "# VALS: HASH ",$y," SELF ",\$y->{Self}," Y ",\$y, + " FLAG: ",\$y->{Flag},"\n"; + print "# VPRINT\n"; +} +print "# OUT $flag\n"; +ok( $flag == 1 ); + +print "# AFTER\n"; + +undef $flag; + +print "# FLAGU\n"; + +# +# Case 4: a more complicated circular structure +# + +$flag = 0; +{ + my $y = bless {}, Dest; + my $x = bless {}, Dest; + $x->{Ref} = $y; + $y->{Ref} = $x; + $x->{Flag} = \$flag; + $y->{Flag} = \$flag; + weaken($x->{Ref}); +} +ok( $flag == 2 ); + +# +# Case 5: deleting a weakref before the other one +# + +{ + my $x = "foo"; + $y = \$x; + $z = \$x; +} + +print "# CASE5\n"; +Dump($y); + +weaken($y); +Dump($y); +undef($y); + +ok( not defined $y); +ok($z ne ""); + + +# +# Case 6: test isweakref +# + +$a = 5; +ok(!isweak($a)); +$b = \$a; +ok(!isweak($b)); +weaken($b); +ok(isweak($b)); +$b = \$a; +ok(!isweak($b)); + +$x = {}; +weaken($x->{Y} = \$a); +ok(isweak($x->{Y})); +ok(!isweak($x->{Z})); + + +package Dest; + +sub DESTROY { + print "# INCFLAG\n"; + ${$_[0]{Flag}} ++; +} |