Improved output of negated literals and added unit test.
This commit is contained in:
parent
b675946927
commit
fc89a65ce7
@ -87,12 +87,10 @@ struct TermPrintVisitor
|
|||||||
<< argument;
|
<< argument;
|
||||||
}
|
}
|
||||||
|
|
||||||
outputStream << " " << Clingo::AST::BinaryOperator::And << " ";
|
outputStream
|
||||||
|
<< " " << Clingo::AST::BinaryOperator::And << " "
|
||||||
if (literal.sign == Clingo::AST::Sign::Negation)
|
<< literal.sign
|
||||||
outputStream << Clingo::AST::Sign::Negation << " ";
|
<< output::Function(function.name) << "(";
|
||||||
|
|
||||||
outputStream << output::Function(function.name) << "(";
|
|
||||||
|
|
||||||
for (auto i = function.arguments.cbegin(); i != function.arguments.cend(); i++)
|
for (auto i = function.arguments.cbegin(); i != function.arguments.cend(); i++)
|
||||||
{
|
{
|
||||||
|
@ -222,8 +222,8 @@ struct HeadLiteralPrintSubstitutedVisitor
|
|||||||
{
|
{
|
||||||
if (literal.sign == Clingo::AST::Sign::DoubleNegation)
|
if (literal.sign == Clingo::AST::Sign::DoubleNegation)
|
||||||
throwErrorAtLocation(literal.location, "double-negated literals currently unsupported", context);
|
throwErrorAtLocation(literal.location, "double-negated literals currently unsupported", context);
|
||||||
else if (literal.sign == Clingo::AST::Sign::Negation)
|
|
||||||
context.logger.outputStream() << Clingo::AST::Sign::Negation << " ";
|
context.logger.outputStream() << literal.sign;
|
||||||
|
|
||||||
literal.data.accept(LiteralPrintSubstitutedVisitor(), literal, context);
|
literal.data.accept(LiteralPrintSubstitutedVisitor(), literal, context);
|
||||||
}
|
}
|
||||||
|
@ -120,4 +120,12 @@ TEST_CASE("[translation] Rules are translated correctly", "[translation]")
|
|||||||
|
|
||||||
REQUIRE(output.str() == "V1 in X and V2 in (1,) and exists X1, X2 (X1 in X and X2 in (2,) and q(X1, X2)) -> p(V1, V2)\n");
|
REQUIRE(output.str() == "V1 in X and V2 in (1,) and exists X1, X2 (X1 in X and X2 in (2,) and q(X1, X2)) -> p(V1, V2)\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SECTION("single negation")
|
||||||
|
{
|
||||||
|
input << "not p(X, 1) :- not q(X, 2).";
|
||||||
|
anthem::translate("input", input, context);
|
||||||
|
|
||||||
|
REQUIRE(output.str() == "V1 in X and V2 in 1 and exists X1, X2 (X1 in X and X2 in 2 and not q(X1, X2)) -> not p(V1, V2)\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user