class TestCase::LogicalOperator {
use TestCase::Minimal;
static method logical_and_nagate : int () {
if (!(1 && 1)) {
return 0;
}
return 1;
}
static method logical_and_push_mortal_leave_scope : int () {
my $minimals = new TestCase::Minimal[4];
$minimals->[0] = TestCase::Minimal->new;
$minimals->[0]{x} = 1;
$minimals->[1] = TestCase::Minimal->new;
$minimals->[1]{x} = 2;
$minimals->[2] = TestCase::Minimal->new;
$minimals->[2]{x} = 3;
$minimals->[3] = TestCase::Minimal->new;
$minimals->[3]{x} = 4;
if ($minimals->[0]{x} == 1 && $minimals->[1]{x} == 2 && $minimals->[2]{x} == 3 && $minimals->[3]{x} == 4) {
return 1;
}
return 0;
}
static method logical_not_false : int () {
if (!0) {
return 1;
}
return 0;
}
# logical or
static method logical_or_both_true : int () {
unless (1 || 1) {
return 0;
}
if (1 || 1) {
# OK
}
else {
return 0;
}
if (1 || 0) {
# OK
}
else {
return 0;
}
if (0 || 1) {
# OK
}
else {
return 0;
}
if (0 || 0) {
return 0;
}
else {
# OK
}
return 1;
}
static method logical_or_left_true : int () {
if (1 || 0) {
return 1;
}
return 0;
}
static method logical_or_right_true : int () {
if (0 || 1) {
return 1;
}
return 0;
}
static method logical_or_both_false : int () {
if (0 || 0) {
return 0;
}
return 1;
}
# logical and
static method logical_and_both_true : int () {
unless (1 && 1) {
return 0;
}
if (1 && 1) {
# OK
}
else {
return 0;
}
if (1 && 0) {
return 0;
}
else {
# OK
}
if (0 && 1) {
return 0;
}
else {
# OK
}
if (0 && 0) {
return 0;
}
else {
# OK
}
return 1;
}
static method logical_and_left_true : int () {
if (1 && 0) {
return 0;
}
return 1;
}
static method logical_and_right_true : int () {
if (1 && 0) {
return 0;
}
return 1;
}
static method logical_and_both_false : int () {
if (0 && 0) {
return 0;
}
return 1;
}
}