2017-06-15 23:33:25 +02:00
|
|
|
#include <catch.hpp>
|
|
|
|
|
|
|
|
#include <experimental/filesystem>
|
|
|
|
|
|
|
|
#include <pddlparse/AST.h>
|
|
|
|
#include <pddlparse/Parse.h>
|
|
|
|
|
|
|
|
namespace fs = std::experimental::filesystem;
|
|
|
|
|
2017-06-16 04:21:19 +02:00
|
|
|
const pddl::Context::WarningCallback ignoreWarnings = [](const auto &, const auto &){};
|
|
|
|
const auto pddlInstanceBasePath = fs::path("data") / "pddl-instances";
|
|
|
|
|
2017-06-15 23:33:25 +02:00
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
2017-06-18 22:59:16 +02:00
|
|
|
TEST_CASE("[PDDL acceptance] All official PDDL domains are parsed without errors", "[PDDL acceptance]")
|
2017-06-15 23:33:25 +02:00
|
|
|
{
|
2017-06-16 04:21:19 +02:00
|
|
|
for (const auto &competitionDirectory : fs::directory_iterator(pddlInstanceBasePath))
|
2017-06-15 23:33:25 +02:00
|
|
|
{
|
|
|
|
if (!fs::is_directory(competitionDirectory))
|
|
|
|
continue;
|
|
|
|
|
|
|
|
for (const auto &domainDirectory : fs::directory_iterator(competitionDirectory.path() / "domains"))
|
|
|
|
{
|
|
|
|
if (!fs::is_directory(domainDirectory))
|
|
|
|
continue;
|
|
|
|
|
|
|
|
const auto domainFile = domainDirectory / "domain.pddl";
|
|
|
|
|
2017-06-17 17:07:09 +02:00
|
|
|
const auto testSectionName = competitionDirectory.path().stem().string() + ", "
|
|
|
|
+ domainDirectory.path().stem().string();
|
2017-06-15 23:33:25 +02:00
|
|
|
|
2017-06-17 17:07:09 +02:00
|
|
|
SECTION("domain [" + testSectionName + "]")
|
|
|
|
{
|
|
|
|
pddl::Tokenizer tokenizer;
|
|
|
|
tokenizer.read(domainFile);
|
2017-06-17 22:18:39 +02:00
|
|
|
pddl::Context context(std::move(tokenizer), ignoreWarnings, pddl::Mode::Compatibility);
|
2017-06-17 17:07:09 +02:00
|
|
|
|
|
|
|
CHECK_NOTHROW(pddl::parseDescription(context));
|
|
|
|
}
|
2017-06-15 23:33:25 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
2017-06-18 22:59:16 +02:00
|
|
|
TEST_CASE("[PDDL acceptance] The first instance for all official PDDL domains is parsed without errors", "[PDDL acceptance]")
|
2017-06-15 23:33:25 +02:00
|
|
|
{
|
2017-06-16 04:21:19 +02:00
|
|
|
for (const auto &competitionDirectory : fs::directory_iterator(pddlInstanceBasePath))
|
2017-06-15 23:33:25 +02:00
|
|
|
{
|
|
|
|
if (!fs::is_directory(competitionDirectory))
|
|
|
|
continue;
|
|
|
|
|
|
|
|
for (const auto &domainDirectory : fs::directory_iterator(competitionDirectory.path() / "domains"))
|
|
|
|
{
|
|
|
|
if (!fs::is_directory(domainDirectory))
|
|
|
|
continue;
|
|
|
|
|
|
|
|
const auto domainFile = domainDirectory / "domain.pddl";
|
|
|
|
const auto instanceFile = domainDirectory / "instances" / "instance-1.pddl";
|
|
|
|
|
2017-06-17 17:07:09 +02:00
|
|
|
const auto testSectionName = competitionDirectory.path().stem().string() + ", "
|
|
|
|
+ domainDirectory.path().stem().string() + ", "
|
|
|
|
+ instanceFile.stem().string();
|
|
|
|
|
|
|
|
SECTION("instance [" + testSectionName + "]")
|
|
|
|
{
|
|
|
|
pddl::Tokenizer tokenizer;
|
|
|
|
tokenizer.read(domainFile);
|
|
|
|
tokenizer.read(instanceFile);
|
2017-06-17 22:18:39 +02:00
|
|
|
pddl::Context context(std::move(tokenizer), ignoreWarnings, pddl::Mode::Compatibility);
|
2017-06-15 23:33:25 +02:00
|
|
|
|
2017-06-17 17:07:09 +02:00
|
|
|
CHECK_NOTHROW(pddl::parseDescription(context));
|
|
|
|
}
|
2017-06-15 23:33:25 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|