Fixed issue with unsupported expression negations.
This commit is contained in:
parent
69a26cb22f
commit
91019f52aa
@ -12,6 +12,7 @@ Features:
|
||||
Bug Fixes:
|
||||
|
||||
* fixes minor formatting issues in SAS translation
|
||||
* fixes issue with unsupported expression negations
|
||||
|
||||
## 3.0.1 (2016-06-14)
|
||||
|
||||
|
@ -412,7 +412,7 @@ void TranslatorASP::translateLiteral(const Expression &literal) const
|
||||
{
|
||||
const auto ¬Expression = dynamic_cast<const expressions::Not &>(literal);
|
||||
|
||||
if (notExpression.expressionType() != Expression::Type::Predicate)
|
||||
if (notExpression.argument()->expressionType() != Expression::Type::Predicate)
|
||||
throw utils::TranslatorException("only negations of primitive predicates supported as literals currently");
|
||||
|
||||
const auto &predicate = dynamic_cast<const expressions::Predicate &>(*notExpression.argument());
|
||||
|
@ -15,7 +15,16 @@ boost::iostreams::stream<boost::iostreams::null_sink> nullStream((boost::iostrea
|
||||
TEST(PDDLTranslationTests, CheckIssues)
|
||||
{
|
||||
// Check that translating domains without typing information works
|
||||
{
|
||||
auto description = Description::fromFile("data/issues/issue-4.pddl");
|
||||
const auto translator = TranslatorASP(description, description.context().logger.outputStream());
|
||||
ASSERT_NO_THROW(translator.translate());
|
||||
}
|
||||
|
||||
// Check that translating the simple blocks world domain works
|
||||
{
|
||||
auto description = Description::fromFile("data/issues/issue-5.pddl");
|
||||
const auto translator = TranslatorASP(description, description.context().logger.outputStream());
|
||||
ASSERT_NO_THROW(translator.translate());
|
||||
}
|
||||
}
|
||||
|
45
tests/data/issues/issue-5.pddl
Normal file
45
tests/data/issues/issue-5.pddl
Normal file
@ -0,0 +1,45 @@
|
||||
(define (domain BLOCKS)
|
||||
(:requirements :strips :typing)
|
||||
(:types block)
|
||||
(:predicates (on ?x - block ?y - block)
|
||||
(ontable ?x - block)
|
||||
(clear ?x - block)
|
||||
(handempty)
|
||||
(holding ?x - block)
|
||||
)
|
||||
|
||||
(:action pick-up
|
||||
:parameters (?x - block)
|
||||
:precondition (and (clear ?x) (ontable ?x) (handempty))
|
||||
:effect
|
||||
(and (not (ontable ?x))
|
||||
(not (clear ?x))
|
||||
(not (handempty))
|
||||
(holding ?x)))
|
||||
|
||||
(:action put-down
|
||||
:parameters (?x - block)
|
||||
:precondition (holding ?x)
|
||||
:effect
|
||||
(and (not (holding ?x))
|
||||
(clear ?x)
|
||||
(handempty)
|
||||
(ontable ?x)))
|
||||
(:action stack
|
||||
:parameters (?x - block ?y - block)
|
||||
:precondition (and (holding ?x) (clear ?y))
|
||||
:effect
|
||||
(and (not (holding ?x))
|
||||
(not (clear ?y))
|
||||
(clear ?x)
|
||||
(handempty)
|
||||
(on ?x ?y)))
|
||||
(:action unstack
|
||||
:parameters (?x - block ?y - block)
|
||||
:precondition (and (on ?x ?y) (clear ?x) (handempty))
|
||||
:effect
|
||||
(and (holding ?x)
|
||||
(clear ?y)
|
||||
(not (clear ?x))
|
||||
(not (handempty))
|
||||
(not (on ?x ?y)))))
|
Reference in New Issue
Block a user