#include #include #include #include #include using namespace plasp::pddl; //////////////////////////////////////////////////////////////////////////////////////////////////// TEST(PDDLNormalizationTests, Implication) { auto i = std::make_unique(); auto d1 = std::make_unique(); const auto d1p = d1.get(); auto d2 = std::make_unique(); const auto d2p = d2.get(); i->setArgument<0>(std::move(d1)); i->setArgument<1>(std::move(d2)); auto normalized = i->normalize(); ASSERT_EQ(normalized->expressionType(), Expression::Type::Or); const auto &o = dynamic_cast(*normalized); ASSERT_EQ(o.arguments()[0]->expressionType(), Expression::Type::Not); const auto &n = dynamic_cast(*o.arguments()[0]); ASSERT_EQ(n.argument(), d1p); ASSERT_EQ(o.arguments()[1], d2p); } //////////////////////////////////////////////////////////////////////////////////////////////////// TEST(PDDLNormalizationTests, DoubleNegation) { auto n1 = std::make_unique(); auto n2 = std::make_unique(); auto d = std::make_unique(); const auto dp = d.get(); n2->setArgument(std::move(d)); n1->setArgument(std::move(n2)); auto normalized = n1->normalize(); ASSERT_EQ(normalized.get(), dp); ASSERT_TRUE(dp->isNormalized()); }