|
@@ -24,6 +24,8 @@ namespace {
|
|
|
{}
|
|
|
};
|
|
|
|
|
|
+ // assignment operators
|
|
|
+
|
|
|
TEST_F(BooleanTest, operatorAssignment)
|
|
|
{
|
|
|
ls_std::Boolean expression {};
|
|
@@ -35,6 +37,8 @@ namespace {
|
|
|
ASSERT_TRUE(expression);
|
|
|
}
|
|
|
|
|
|
+ // stream operators
|
|
|
+
|
|
|
TEST_F(BooleanTest, operatorOutputStream)
|
|
|
{
|
|
|
ls_std::Boolean expression {true};
|
|
@@ -44,6 +48,8 @@ namespace {
|
|
|
ASSERT_STREQ("true", _stream.str().c_str());
|
|
|
}
|
|
|
|
|
|
+ // logical operators
|
|
|
+
|
|
|
TEST_F(BooleanTest, operatorNot) {
|
|
|
ls_std::Boolean expression {};
|
|
|
ASSERT_TRUE(!expression);
|
|
@@ -98,6 +104,8 @@ namespace {
|
|
|
ASSERT_FALSE(0 || expressionA);
|
|
|
}
|
|
|
|
|
|
+ // implementation
|
|
|
+
|
|
|
TEST_F(BooleanTest, parse)
|
|
|
{
|
|
|
ls_std::Boolean expression {};
|
|
@@ -134,4 +142,34 @@ namespace {
|
|
|
expression = 4 < 3;
|
|
|
ASSERT_STREQ("false", expression.toString().c_str());
|
|
|
}
|
|
|
+
|
|
|
+ // additional functionality
|
|
|
+
|
|
|
+ TEST_F(BooleanTest, XOR)
|
|
|
+ {
|
|
|
+ ls_std::Boolean x {2 < 3};
|
|
|
+ ls_std::Boolean y {4 < 3};
|
|
|
+
|
|
|
+ ASSERT_TRUE(ls_std::Boolean::XOR(x, y));
|
|
|
+ ASSERT_TRUE(ls_std::Boolean::XOR(y, x));
|
|
|
+ ASSERT_TRUE(ls_std::Boolean::XOR(y, true));
|
|
|
+ ASSERT_TRUE(ls_std::Boolean::XOR(true, y));
|
|
|
+ ASSERT_TRUE(ls_std::Boolean::XOR(true, false));
|
|
|
+ ASSERT_TRUE(ls_std::Boolean::XOR(false, true));
|
|
|
+ }
|
|
|
+
|
|
|
+ TEST_F(BooleanTest, XORNegative)
|
|
|
+ {
|
|
|
+ ls_std::Boolean w {};
|
|
|
+ ls_std::Boolean x {true};
|
|
|
+ ls_std::Boolean y {};
|
|
|
+ ls_std::Boolean z {true};
|
|
|
+
|
|
|
+ ASSERT_FALSE(ls_std::Boolean::XOR(x, z));
|
|
|
+ ASSERT_FALSE(ls_std::Boolean::XOR(w, y));
|
|
|
+ ASSERT_FALSE(ls_std::Boolean::XOR(true, true));
|
|
|
+ ASSERT_FALSE(ls_std::Boolean::XOR(false, false));
|
|
|
+ ASSERT_FALSE(ls_std::Boolean::XOR(w, false));
|
|
|
+ ASSERT_FALSE(ls_std::Boolean::XOR(false, w));
|
|
|
+ }
|
|
|
}
|