nvar run_(const nstr& fs, const nvec& v){ nvar f = nvar(fs, nvar::Func); f.append(v); stringstream sstr; generator_.generate(sstr, f); NCommand* cmd = _commandPool.acquire(); cmd->write(sstr.str()); nvec m; if(!cmd->matchOutput(_outputRegex, m, 10.0)){ delete cmd; _commandPool.release(0); NERROR("failed to run: " + v); } _commandPool.release(cmd); //cout << "out: " << m[1] << endl; return parser_.parse(m[1]); }
void Structure::assert_valid() { POMAGMA_INFO("Validating solver::Structure"); // Check atoms. POMAGMA_ASSERT(term_arity(TermAtom::TOP) == TermArity::TOP, "Missing TOP"); POMAGMA_ASSERT(term_arity(TermAtom::BOT) == TermArity::BOT, "Missing BOT"); POMAGMA_ASSERT(term_arity(TermAtom::I) == TermArity::I, "Missing I"); POMAGMA_ASSERT(term_arity(TermAtom::K) == TermArity::K, "Missing K"); POMAGMA_ASSERT(term_arity(TermAtom::B) == TermArity::B, "Missing B"); POMAGMA_ASSERT(term_arity(TermAtom::C) == TermArity::C, "Missing C"); POMAGMA_ASSERT(term_arity(TermAtom::S) == TermArity::S, "Missing S"); // Check terms. const Term max_term = term_arity_.size() - 1; for (Term term = 1; term <= max_term; ++term) { const TermArity arity = term_arity(term); switch (arity) { case TermArity::IVAR: { const unsigned rank = ivar_arg(term); POMAGMA_ASSERT_EQ(term, ivar(rank)); break; } case TermArity::NVAR: { const std::string& name = nvar_arg(term); POMAGMA_ASSERT_EQ(term, nvar(name)); break; } case TermArity::APP: { Term lhs; Term rhs; std::tie(lhs, rhs) = app_arg(term); POMAGMA_ASSERT_EQ(term, app(lhs, rhs)); break; } case TermArity::JOIN: { Term lhs; Term rhs; std::tie(lhs, rhs) = join_arg(term); POMAGMA_ASSERT_EQ(term, join(lhs, rhs)); break; } default: break; } } // Check literals. const Literal max_lit = less_arg_.size() - 1; for (Literal lit = 1; lit <= max_lit; ++lit) { Term lhs; Term rhs; std::tie(lhs, rhs) = literal_arg(lit); POMAGMA_ASSERT_EQ(lit, less(lhs, rhs)); std::tie(lhs, rhs) = literal_arg(-lit); POMAGMA_ASSERT_EQ(-lit, nless(lhs, rhs)); } }