summaryrefslogtreecommitdiffstats
path: root/gnu/usr.bin/perl/lib/overloading.t
diff options
context:
space:
mode:
authormillert <millert@openbsd.org>2009-10-12 18:10:27 +0000
committermillert <millert@openbsd.org>2009-10-12 18:10:27 +0000
commit43003dfe3ad45d1698bed8a37f2b0f5b14f20d4f (patch)
tree1abc677556fd1cb82189030802130c0f670a32d9 /gnu/usr.bin/perl/lib/overloading.t
parentMore inodes by default on the ramdisk, because otherwise a many-disk (diff)
downloadwireguard-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-xgnu/usr.bin/perl/lib/overloading.t101
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") }
+}