def test_sat_stress_test(self): ev_ok = gevent.event.Event() def callbackOK(s, solver_result): assert not ev_ok.is_set() assert solver_result.is_sat common.assert_sat_assignments(solver_result.assignment, common.SAT_QUERY_ASSIGNMENT_SMT) ev_ok.set() def callbackError(solver, uniq_query, err_desc): assert 0, err_desc solvers = [] for _ in range(1, 10): if random.random() > 1/2.: solver = AsyncSolverWrapper(ProcessSolver(STPParser(), "STP", common.STP_PATH, ["--SMTLIB2", "-p"])) else: solver = AsyncSolverWrapper(ProcessSolver(None, "python", "python", ["-c", "while True: pass"])) solvers.append(solver) solver = PortfolioSolver(solvers) for _ in range(1, 10): uniq_query = team_solver.interfaces.interfaces.UniqueQuery(123, common.SAT_QUERY_SMT) solver.solve_async(uniq_query, callbackOK, callbackError) if random.random() > 1/2.: ev_ok.wait() #since there should be no context sw -> we can call solve_async after this wait else: solver.cancel() ev_ok.clear()
def test_cancel(self): def callbackOK(_, __): assert 0 def callbackError(_, __, ___): assert 0 solver = AsyncSolverWrapper(TimedSolverWrapper(SyncSolverWrapper(MockSolverAsync()), 9999)) uniq_query = UniqueQuery(123, common.SAT_QUERY_SMT) solver.solve_async(uniq_query, callbackOK, callbackError) gevent.sleep(1) #wait until greenlet spawned solver.cancel() solver.solve_async(uniq_query, callbackOK, callbackError) solver.cancel() #immediately
def test_timeout(self): ev_error = gevent.event.Event() def callbackOK(_, solver_result): assert 0 def callbackError(_, uniq_query, err_desc): assert 'timeout' in err_desc ev_error.set() mock_solver = MockSolverAsync() solver = AsyncSolverWrapper(TimedSolverWrapper(SyncSolverWrapper(mock_solver), 0.001)) uniq_query = UniqueQuery(123, common.SAT_QUERY_SMT) solver.solve_async(uniq_query, callbackOK, callbackError) assert mock_solver.called.wait(1) assert ev_error.wait(5) solver.cancel()