diff --git a/lib/pddlparse/tests/TestIPCDomains.cpp b/lib/pddlparse/tests/TestIPCDomains.cpp new file mode 100644 index 0000000..f0c6970 --- /dev/null +++ b/lib/pddlparse/tests/TestIPCDomains.cpp @@ -0,0 +1,64 @@ +#include + +#include + +#include +#include + +namespace fs = std::experimental::filesystem; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +TEST_CASE("[PDDL parser] All the IPC domains are parsed without errors", "[PDDL parser]") +{ + const pddl::Context::WarningCallback ignoreWarnings = [](const auto &, const auto &){}; + + for (const auto &competitionDirectory : fs::directory_iterator("data/pddl-instances")) + { + 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"; + + pddl::Tokenizer tokenizer; + tokenizer.read(domainFile); + pddl::Context context(std::move(tokenizer), ignoreWarnings); + + CHECK_NOTHROW(pddl::parseDescription(context)); + } + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +TEST_CASE("[PDDL parser] The first instance of every IPC domain is parsed without errors", "[PDDL parser]") +{ + const pddl::Context::WarningCallback ignoreWarnings = [](const auto &, const auto &){}; + + for (const auto &competitionDirectory : fs::directory_iterator("data/pddl-instances")) + { + 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"; + + pddl::Tokenizer tokenizer; + tokenizer.read(domainFile); + tokenizer.read(instanceFile); + pddl::Context context(std::move(tokenizer), ignoreWarnings); + + CHECK_NOTHROW(pddl::parseDescription(context)); + } + } +} diff --git a/lib/pddlparse/tests/main.cpp b/lib/pddlparse/tests/main.cpp index 6e97333..b3143fb 100644 --- a/lib/pddlparse/tests/main.cpp +++ b/lib/pddlparse/tests/main.cpp @@ -1,27 +1,2 @@ -/*#define CATCH_CONFIG_MAIN +#define CATCH_CONFIG_MAIN #include -*/ - -#include -#include - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -// TODO: reimplement unit tests -int main() -{ - const pddl::Context::WarningCallback ignoreWarnings = [](const auto &, const auto &){}; - - pddl::Tokenizer tokenizer; - tokenizer.read("data/blocksworld-domain.pddl"); - tokenizer.read("data/blocksworld-problem.pddl"); - pddl::Context context(std::move(tokenizer), ignoreWarnings); - - const auto description = pddl::parseDescription(context); - - std::cout << description.domain->requirements.size() << std::endl; - std::cout << description.domain->predicates.size() << std::endl; - std::cout << description.domain->actions.size() << std::endl; - std::cout << description.problem.value()->name << std::endl; - std::cout << description.problem.value()->objects.size() << std::endl; -}