diff options
author | 2009-10-12 18:10:27 +0000 | |
---|---|---|
committer | 2009-10-12 18:10:27 +0000 | |
commit | 43003dfe3ad45d1698bed8a37f2b0f5b14f20d4f (patch) | |
tree | 1abc677556fd1cb82189030802130c0f670a32d9 /gnu/usr.bin/perl/lib/overloading.t | |
parent | More inodes by default on the ramdisk, because otherwise a many-disk (diff) | |
download | wireguard-openbsd-43003dfe3ad45d1698bed8a37f2b0f5b14f20d4f.tar.xz wireguard-openbsd-43003dfe3ad45d1698bed8a37f2b0f5b14f20d4f.zip |
import perl 5.10.1
Diffstat (limited to 'gnu/usr.bin/perl/lib/overloading.t')
-rwxr-xr-x | gnu/usr.bin/perl/lib/overloading.t | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/gnu/usr.bin/perl/lib/overloading.t b/gnu/usr.bin/perl/lib/overloading.t new file mode 100755 index 00000000000..cedfc516ccc --- /dev/null +++ b/gnu/usr.bin/perl/lib/overloading.t @@ -0,0 +1,101 @@ +#./perl + +BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; +} + +BEGIN { + require "./test.pl"; + plan(tests => 35); +} + +use Scalar::Util qw(refaddr); + +{ + package Stringifies; + + use overload ( + fallback => 1, + '""' => sub { "foo" }, + '0+' => sub { 42 }, + cos => sub { "far side of overload table" }, + ); + + sub new { bless {}, shift }; +} + +my $x = Stringifies->new; + +is( "$x", "foo", "stringifies" ); +is( 0 + $x, 42, "numifies" ); +is( cos($x), "far side of overload table", "cosinusfies" ); + +{ + no overloading; + is( "$x", overload::StrVal($x), "no stringification" ); + is( 0 + $x, refaddr($x), "no numification" ); + is( cos($x), cos(refaddr($x)), "no cosinusfication" ); + + { + no overloading '""'; + is( "$x", overload::StrVal($x), "no stringification" ); + is( 0 + $x, refaddr($x), "no numification" ); + is( cos($x), cos(refaddr($x)), "no cosinusfication" ); + } +} + +{ + no overloading '""'; + + is( "$x", overload::StrVal($x), "no stringification" ); + is( 0 + $x, 42, "numifies" ); + is( cos($x), "far side of overload table", "cosinusfies" ); + + { + no overloading; + is( "$x", overload::StrVal($x), "no stringification" ); + is( 0 + $x, refaddr($x), "no numification" ); + is( cos($x), cos(refaddr($x)), "no cosinusfication" ); + } + + use overloading '""'; + + is( "$x", "foo", "stringifies" ); + is( 0 + $x, 42, "numifies" ); + is( cos($x), "far side of overload table", "cosinusfies" ); + + no overloading '0+'; + is( "$x", "foo", "stringifies" ); + is( 0 + $x, refaddr($x), "no numification" ); + is( cos($x), "far side of overload table", "cosinusfies" ); + + { + no overloading '""'; + is( "$x", overload::StrVal($x), "no stringification" ); + is( 0 + $x, refaddr($x), "no numification" ); + is( cos($x), "far side of overload table", "cosinusfies" ); + + { + use overloading; + is( "$x", "foo", "stringifies" ); + is( 0 + $x, 42, "numifies" ); + is( cos($x), "far side of overload table", "cosinusfies" ); + } + } + + is( "$x", "foo", "stringifies" ); + is( 0 + $x, refaddr($x), "no numification" ); + is( cos($x), "far side of overload table", "cosinusfies" ); + + no overloading "cos"; + is( "$x", "foo", "stringifies" ); + is( 0 + $x, refaddr($x), "no numification" ); + is( cos($x), cos(refaddr($x)), "no cosinusfication" ); + + BEGIN { ok(exists($^H{overloading}), "overloading hint present") } + + use overloading; + + BEGIN { ok(!exists($^H{overloading}), "overloading hint removed") } +} |