Fixed incorrect parsing order of type declarations.
This commit is contained in:
@@ -254,25 +254,25 @@ TEST_CASE("[PDDL instances] The official PDDL instances are parsed correctly", "
|
||||
CHECK(types[1]->name == "airplane");
|
||||
REQUIRE(types[1]->parentTypes.size() == 1);
|
||||
CHECK(types[1]->parentTypes[0]->declaration->name == "vehicle");
|
||||
CHECK(types[2]->name == "package");
|
||||
CHECK(types[2]->name == "vehicle");
|
||||
REQUIRE(types[2]->parentTypes.size() == 1);
|
||||
CHECK(types[2]->parentTypes[0]->declaration->name == "physobj");
|
||||
CHECK(types[3]->name == "vehicle");
|
||||
CHECK(types[3]->name == "package");
|
||||
REQUIRE(types[3]->parentTypes.size() == 1);
|
||||
CHECK(types[3]->parentTypes[0]->declaration->name == "physobj");
|
||||
CHECK(types[4]->name == "airport");
|
||||
CHECK(types[4]->name == "physobj");
|
||||
REQUIRE(types[4]->parentTypes.size() == 1);
|
||||
CHECK(types[4]->parentTypes[0]->declaration->name == "place");
|
||||
CHECK(types[5]->name == "location");
|
||||
CHECK(types[4]->parentTypes[0]->declaration->name == "object");
|
||||
CHECK(types[5]->name == "airport");
|
||||
REQUIRE(types[5]->parentTypes.size() == 1);
|
||||
CHECK(types[5]->parentTypes[0]->declaration->name == "place");
|
||||
CHECK(types[6]->name == "city");
|
||||
CHECK(types[6]->name == "location");
|
||||
REQUIRE(types[6]->parentTypes.size() == 1);
|
||||
CHECK(types[6]->parentTypes[0]->declaration->name == "object");
|
||||
CHECK(types[6]->parentTypes[0]->declaration->name == "place");
|
||||
CHECK(types[7]->name == "place");
|
||||
REQUIRE(types[7]->parentTypes.size() == 1);
|
||||
CHECK(types[7]->parentTypes[0]->declaration->name == "object");
|
||||
CHECK(types[8]->name == "physobj");
|
||||
CHECK(types[8]->name == "city");
|
||||
REQUIRE(types[8]->parentTypes.size() == 1);
|
||||
CHECK(types[8]->parentTypes[0]->declaration->name == "object");
|
||||
CHECK(types[9]->name == "object");
|
||||
|
47
lib/pddlparse/tests/TestParser.cpp
Normal file
47
lib/pddlparse/tests/TestParser.cpp
Normal file
@@ -0,0 +1,47 @@
|
||||
#include <catch.hpp>
|
||||
|
||||
#include <experimental/filesystem>
|
||||
|
||||
#include <pddlparse/AST.h>
|
||||
#include <pddlparse/Parse.h>
|
||||
|
||||
namespace fs = std::experimental::filesystem;
|
||||
|
||||
const pddl::Context::WarningCallback ignoreWarnings = [](const auto &, const auto &warning){std::cout << warning << std::endl;};
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
TEST_CASE("[PDDL parser] Check past issues", "[PDDL parser]")
|
||||
{
|
||||
pddl::Tokenizer tokenizer;
|
||||
pddl::Context context(std::move(tokenizer), ignoreWarnings);
|
||||
|
||||
// Check that no infinite loop occurs
|
||||
SECTION("“either” in typing section")
|
||||
{
|
||||
const auto domainFile = fs::path("data") / "test-cases" / "typing-1.pddl";
|
||||
context.tokenizer.read(domainFile);
|
||||
const auto description = pddl::parseDescription(context);
|
||||
|
||||
const auto &types = description.domain->types;
|
||||
|
||||
REQUIRE(types.size() == 5);
|
||||
CHECK(types[0]->name == "object");
|
||||
REQUIRE(types[0]->parentTypes.size() == 1);
|
||||
CHECK(types[0]->parentTypes[0]->declaration == types[0].get());
|
||||
CHECK(types[1]->name == "a1");
|
||||
REQUIRE(types[1]->parentTypes.size() == 1);
|
||||
CHECK(types[1]->parentTypes[0]->declaration == types[0].get());
|
||||
CHECK(types[2]->name == "a2");
|
||||
REQUIRE(types[2]->parentTypes.size() == 1);
|
||||
CHECK(types[2]->parentTypes[0]->declaration == types[0].get());
|
||||
CHECK(types[3]->name == "a3");
|
||||
REQUIRE(types[3]->parentTypes.size() == 1);
|
||||
CHECK(types[3]->parentTypes[0]->declaration == types[0].get());
|
||||
CHECK(types[4]->name == "bx");
|
||||
REQUIRE(types[4]->parentTypes.size() == 3);
|
||||
CHECK(types[4]->parentTypes[0]->declaration == types[1].get());
|
||||
CHECK(types[4]->parentTypes[1]->declaration == types[2].get());
|
||||
CHECK(types[4]->parentTypes[2]->declaration == types[3].get());
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user