summaryrefslogtreecommitdiff
path: root/t/op/lop.t
diff options
context:
space:
mode:
Diffstat (limited to 't/op/lop.t')
-rwxr-xr-xt/op/lop.t44
1 files changed, 44 insertions, 0 deletions
diff --git a/t/op/lop.t b/t/op/lop.t
new file mode 100755
index 0000000000..f15201ff09
--- /dev/null
+++ b/t/op/lop.t
@@ -0,0 +1,44 @@
+#!./perl
+
+#
+# test the logical operators '&&', '||', '!', 'and', 'or', 'not'
+#
+
+BEGIN {
+ chdir 't' if -d 't';
+ unshift @INC, '../lib';
+}
+
+print "1..7\n";
+
+my $test = 0;
+for my $i (undef, 0 .. 2, "", "0 but true") {
+ my $true = 1;
+ my $false = 0;
+ for my $j (undef, 0 .. 2, "", "0 but true") {
+ $true &&= !(
+ ((!$i || !$j) != !($i && $j))
+ or (!($i || $j) != (!$i && !$j))
+ or (!!($i || $j) != !(!$i && !$j))
+ or (!(!$i || !$j) != !!($i && $j))
+ );
+ $false ||= (
+ ((!$i || !$j) == !!($i && $j))
+ and (!!($i || $j) == (!$i && !$j))
+ and ((!$i || $j) == ($i && !$j))
+ and (($i || !$j) != (!$i && $j))
+ );
+ }
+ if (not $true) {
+ print "not ";
+ } elsif ($false) {
+ print "not ";
+ }
+ print "ok ", ++$test, "\n";
+}
+
+# $test == 6
+my $i = 0;
+(($i ||= 1) &&= 3) += 4;
+print "not " unless $i == 7;
+print "ok ", ++$test, "\n";