Rename ext/Compress/Zlib to ext/Compress-Zlib
[p5sagit/p5-mst-13.2.git] / lib / overload.t
index 7c2476c..1f9bc1b 100644 (file)
@@ -47,7 +47,7 @@ sub numify { 0 + "${$_[0]}" } # Not needed, additional overhead
 package main;
 
 $| = 1;
-use Test::More tests => 558;
+use Test::More tests => 577;
 
 
 $a = new Oscalar "087";
@@ -361,6 +361,13 @@ is(($aII << 3), '_<<_087_<<_');
 }
 is($int, 9);
 is($out, 1024);
+is($int, 9);
+{
+  BEGIN { overload::constant 'integer' => sub {$int++; shift()+1}; }
+  eval q{$out = 42};
+}
+is($int, 10);
+is($out, 43);
 
 $foo = 'foo';
 $foo1 = 'f\'o\\o';
@@ -1225,6 +1232,46 @@ foreach my $op (qw(<=> == != < <= > >=)) {
     ok(!$b, "Expect overloaded boolean");
     ok(!$a, "Expect overloaded boolean");
 }
+
+{
+    package Flrbbbbb;
+    use overload
+       bool     => sub { shift->{truth} eq 'yes' },
+       '0+'     => sub { shift->{truth} eq 'yes' ? '1' : '0' },
+       '!'      => sub { shift->{truth} eq 'no' },
+       fallback => 1;
+
+    sub new { my $class = shift; bless { truth => shift }, $class }
+
+    package main;
+
+    my $yes = Flrbbbbb->new('yes');
+    my $x;
+    $x = 1 if $yes;                    is($x, 1);
+    $x = 2 unless $yes;                        is($x, 1);
+    $x = 3 if !$yes;                   is($x, 1);
+    $x = 4 unless !$yes;               is($x, 4);
+
+    my $no = Flrbbbbb->new('no');
+    $x = 0;
+    $x = 1 if $no;                     is($x, 0);
+    $x = 2 unless $no;                 is($x, 2);
+    $x = 3 if !$no;                    is($x, 3);
+    $x = 4 unless !$no;                        is($x, 3);
+
+    $x = 0;
+    $x = 1 if !$no && $yes;            is($x, 1);
+    $x = 2 unless !$no && $yes;                is($x, 1);
+    $x = 3 if $no || !$yes;            is($x, 1);
+    $x = 4 unless $no || !$yes;                is($x, 4);
+
+    $x = 0;
+    $x = 1 if !$no || !$yes;           is($x, 1);
+    $x = 2 unless !$no || !$yes;       is($x, 1);
+    $x = 3 if !$no && !$yes;           is($x, 1);
+    $x = 4 unless !$no && !$yes;       is($x, 4);
+}
+
 {
     use Scalar::Util 'weaken';