/*
     * RuntimeCondition - (Name): NewRuntimeCondition
     * (ConditionString): 
     * Static Variables: [NavMasterVar]
     * Domain Variables:

     */
    void Constraint1475692986360::getConstraint(shared_ptr<ProblemDescriptor> c, shared_ptr<RunningPlan> rp)
    {
        /*PROTECTED REGION ID(cc1475692986360) ENABLED START*/
        ttb::TTBWorldModel* wm = ttb::TTBWorldModel::get();
        auto constraint = make_shared<alica::reasoner::ASPTerm>(-1);
        //The query id has to be added to any predicate which is added to the program, naming ruleheads and facts!
        auto queryId = ((alica::reasoner::ASPSolverWrapper*)wm->getEngine()->getSolver(SolverType::ASPSOLVER))->getQueryCounter();
        constraint->setQueryId(queryId);
        stringstream ss;
        ss << "goalReachable(X) :- reachable(X, Y), goal(X), start(Y), room(X), room(Y).";
        constraint->setQueryRule(ss.str());
        ss.str("");
//        ss << "multiRuleWorks(X, " << queryId << ") :- goal(r1405B, " << queryId << "), room(X).";
//        constraint->addRule(ss.str());
//        ss.str("");
        ss << "goal(r1405B).";
        constraint->addFact(ss.str());
        ss.str("");
        ss << "start(r1411).";
        constraint->addFact(ss.str());
        constraint->setProgramSection("distributedSystemsRoomsExternal");
        constraint->setType(::reasoner::ASPQueryType::Variable);
        constraint->setId(1475692986360);
        constraint->setExternals(wm->doors.getDoors());
        c->setConstraint(dynamic_pointer_cast < alica::SolverTerm > (constraint));
        /*PROTECTED REGION END*/
    }
TEST_F(AspAlicaEngineWithDomain, ReusePlanFromPlantypeWithoutCycle_PlanBase)
{
    ae = new alica::AlicaEngine(new supplementary::AgentIDManager(new supplementary::AgentIDFactory()),
                                "ReusePlanWithoutCycle", "ReusePlanFromPlantypeWithoutCycle", ".", false);
    ae->setIAlicaClock(new alica_dummy_proxy::AlicaSystemClock());
    ae->setCommunicator(new alica_dummy_proxy::AlicaDummyCommunication(ae));
    // "1" stands for the ASPSolver in this test suite only!
    std::vector<char const *> args{"clingo", "-W", "no-atom-undefined", nullptr};
    auto solver = new ::reasoner::ASPSolver(args);
    auto solverWrapper = new alica::reasoner::ASPSolverWrapper(ae, args);
    solverWrapper->init(solver);

    solverWrapper->getSolver()->loadFileFromConfig("assistanceBackgroundKnowledgeFile");
    ae->addSolver(1, solverWrapper);
    EXPECT_TRUE(ae->init(bc, cc, uc, crc)) << "Unable to initialise the ALICA Engine!";

    alica::reasoner::ASPSolverWrapper *aspSolver =
        dynamic_cast<alica::reasoner::ASPSolverWrapper *>(ae->getSolver(1)); // "1" for ASPSolver

    alica::Plan *plan = ae->getPlanBase()->getMasterPlan();

    string queryString1 = "brokenPlanBase(donatello)";
    auto constraint = make_shared<::reasoner::ASPCommonsTerm>();
    constraint->addRule(queryString1);
    constraint->setType(::reasoner::ASPQueryType::Facts);
    constraint->setProgramSection("assistanceTestFacts");

    ((::reasoner::ASPSolver *)(aspSolver->getSolver()))->ground({{"assistanceBackground", {}}}, nullptr);

    shared_ptr<::reasoner::ASPFactsQuery> queryObject1 =
        make_shared<::reasoner::ASPFactsQuery>(((::reasoner::ASPSolver *)(aspSolver->getSolver())), constraint);
    ((alica::reasoner::ASPSolverWrapper *)(aspSolver->getSolver()))->registerQuery(queryObject1);

    // start time measurement for grounding
    std::chrono::_V2::system_clock::time_point groundingStart = std::chrono::high_resolution_clock::now();
    if (!((alica::reasoner::ASPSolverWrapper *)(aspSolver->getSolver()))->validatePlan(plan))
    {
        cout << "ASPAlicaTest: No Model found!" << endl;
    }
    else
    {
        ((alica::reasoner::ASPSolverWrapper *)(aspSolver->getSolver()))->printStats();
    }
    std::chrono::_V2::system_clock::time_point end = std::chrono::high_resolution_clock::now();
    cout << "Measured Grounding Time: "
         << std::chrono::duration_cast<chrono::milliseconds>(end - groundingStart).count() << " ms" << endl;

    EXPECT_FALSE(queryObject1->factsExistForAllModels()) << "The plan base of agent donatello should not be broken.";
    cout << queryObject1->toString() << endl;
}
    /*
     * RuntimeCondition - (Name): NewRuntimeCondition
     * (ConditionString): 
     * Static Variables: [PlanVar]
     * Domain Variables:

     */
    void Constraint1480766551805::getConstraint(shared_ptr<ProblemDescriptor> c, shared_ptr<RunningPlan> rp)
    {
        /*PROTECTED REGION ID(cc1480766551805) ENABLED START*/
        ttb::TTBWorldModel* wm = ttb::TTBWorldModel::get();
        auto constraint = make_shared<alica::reasoner::ASPTerm>();
        //The query id has to be added to any predicate which is added to the program, naming ruleheads and facts!
        auto queryId =
                ((alica::reasoner::ASPSolverWrapper*)wm->getEngine()->getSolver(SolverType::ASPSOLVER))->getQueryCounter();
        constraint->setQueryId(queryId);
        stringstream ss;
        ss << "goalReachable(X) :- reachable(X, Y), goal(X), start(Y), room(X), room(Y).";
        constraint->setQueryRule(ss.str());
        ss.str("");
        ss << "goal(100).";
        constraint->addFact(ss.str());
        ss.str("");
        ss << "start(0).";
        constraint->addFact(ss.str());
        constraint->setProgramSection("asprccgen");
        constraint->setType(::reasoner::ASPQueryType::Variable);
        constraint->setId(1480766551805);
        c->setConstraint(dynamic_pointer_cast < alica::SolverTerm > (constraint));
        /*PROTECTED REGION END*/
    }