From bfb382de52fd3f661ece126fb6ea80d99d30e16b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20L=C3=BChne?= Date: Sun, 18 Jun 2017 00:18:22 +0200 Subject: [PATCH] Fixed incorrect constant types and added unit test. --- .../detail/parsing/ConstantDeclaration.cpp | 2 +- .../parsing/PrimitiveTypeDeclaration.cpp | 2 +- .../tests/TestOfficialPDDLInstances.cpp | 29 +++++++++++++++++++ 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/lib/pddlparse/src/pddlparse/detail/parsing/ConstantDeclaration.cpp b/lib/pddlparse/src/pddlparse/detail/parsing/ConstantDeclaration.cpp index 38a9d2f..fed54c9 100644 --- a/lib/pddlparse/src/pddlparse/detail/parsing/ConstantDeclaration.cpp +++ b/lib/pddlparse/src/pddlparse/detail/parsing/ConstantDeclaration.cpp @@ -52,7 +52,7 @@ void parseAndAddConstantDeclarations(Context &context, ast::Domain &domain, ast: constantDeclarations[i]->type = ast::deepCopy(parentType); // All types up to now are labeled with their parent types - inheritanceIndex = constantDeclarations.size() + 1; + inheritanceIndex = constantDeclarations.size(); tokenizer.skipWhiteSpace(); } diff --git a/lib/pddlparse/src/pddlparse/detail/parsing/PrimitiveTypeDeclaration.cpp b/lib/pddlparse/src/pddlparse/detail/parsing/PrimitiveTypeDeclaration.cpp index 19564d5..83e3ba7 100644 --- a/lib/pddlparse/src/pddlparse/detail/parsing/PrimitiveTypeDeclaration.cpp +++ b/lib/pddlparse/src/pddlparse/detail/parsing/PrimitiveTypeDeclaration.cpp @@ -65,7 +65,7 @@ void parseAndAddPrimitiveTypeDeclarations(Context &context, ast::Domain &domain) types[i]->parentTypes.emplace_back(ast::deepCopy(parentType)); // All types up to now are labeled with their parent types - inheritanceIndex = types.size() + 1; + inheritanceIndex = types.size(); tokenizer.skipWhiteSpace(); } diff --git a/lib/pddlparse/tests/TestOfficialPDDLInstances.cpp b/lib/pddlparse/tests/TestOfficialPDDLInstances.cpp index c4fa60a..858a0a0 100644 --- a/lib/pddlparse/tests/TestOfficialPDDLInstances.cpp +++ b/lib/pddlparse/tests/TestOfficialPDDLInstances.cpp @@ -207,4 +207,33 @@ TEST_CASE("[PDDL parser] The official PDDL instances are parsed correctly", "[PD REQUIRE(predicates[0]->parameters[1]->type); CHECK(predicates[0]->parameters[1]->type.value().get()->declaration->name == "city"); } + + SECTION("typed constants in schedule domain") + { + context.mode = pddl::Mode::Compatibility; + + const auto domainFile = pddlInstanceBasePath / "ipc-2000" / "domains" / "schedule-adl-typed" / "domain.pddl"; + context.tokenizer.read(domainFile); + auto description = pddl::parseDescription(context); + + const auto &constants = description.domain->constants; + + REQUIRE(constants.size() == 14); + CHECK(constants[0]->name == "cold"); + CHECK(constants[0]->type.value().get()->declaration->name == "temperature"); + CHECK(constants[1]->name == "hot"); + CHECK(constants[1]->type.value().get()->declaration->name == "temperature"); + CHECK(constants[2]->name == "cylindrical"); + CHECK(constants[2]->type.value().get()->declaration->name == "ashape"); + CHECK(constants[3]->name == "polisher"); + CHECK(constants[3]->type.value().get()->declaration->name == "machine"); + CHECK(constants[4]->name == "roller"); + CHECK(constants[4]->type.value().get()->declaration->name == "machine"); + CHECK(constants[10]->name == "immersion-painter"); + CHECK(constants[10]->type.value().get()->declaration->name == "machine"); + CHECK(constants[11]->name == "polished"); + CHECK(constants[11]->type.value().get()->declaration->name == "surface"); + CHECK(constants[13]->name == "smooth"); + CHECK(constants[13]->type.value().get()->declaration->name == "surface"); + } }