def test_next(): reset_env() arrtype = ArrayType(BVType(3), BVType(4)) arr = Symbol("arr", arrtype) idx = Symbol("idx", BVType(3)) parser = StringParser() [(_, f, _)] = parser.parse_formulae(["next(arr)[idx]"]) assert (f.args()[1] == idx)
def run_problems(problems_config: ProblemsManager): if sys.version_info[0] < 3: if config.devel: Logger.warning( "This software is not tested for Python 2, we recommend to use Python 3 instead" ) else: Logger.error( "This software is not tested for Python 2, please use Python 3 instead. To avoid this error run in developer mode" ) reset_env() # Named tuple representing all the general configuration options # (things that don't change between problems) general_config = problems_config.general_config Logger.verbosity = general_config.verbosity Logger.time = general_config.time psol = ProblemSolver() psol.solve_problems(problems_config) global_status = 0 traces = [] if len(problems_config.problems) > 0: Logger.log("\n*** SUMMARY ***", 0) else: if not general_config.translate: Logger.log("No problems to solve", 0) return 0 formulae = [] for pbm in problems_config.problems: (status, trace) = print_problem_result(pbm, problems_config) if status != 0: global_status = status traces += trace formulae.append(pbm.properties) if len(traces) > 0: Logger.log("\n*** TRACES ***\n", 0) for trace in traces: Logger.log("[%d]:\t%s" % (traces.index(trace) + 1, trace), 0) if general_config.translate: translate(problems_config.hts, general_config, formulae) if global_status != 0: Logger.log("", 0) Logger.warning("Verifications with unexpected result") return global_status
def run_problems(problems_file, config, problems=None): if sys.version_info[0] < 3: if config.devel: Logger.warning( "This software is not tested for Python 2, we recommend to use Python 3 instead" ) else: Logger.error( "This software is not tested for Python 2, please use Python 3 instead. To avoid this error run in developer mode" ) reset_env() Logger.verbosity = config.verbosity Logger.time = config.time psol = ProblemSolver() if problems is None: problems = Problems() problems.load_problems(problems_file) psol.solve_problems(problems, config) global_status = 0 traces = [] if len(problems.problems) > 0: Logger.log("\n*** SUMMARY ***", 0) else: if not config.translate: Logger.log("No problems to solve", 0) return 0 formulae = [] for pbm in problems.problems: (status, trace) = print_problem_result(pbm, config, len(traces) + 1) if status != 0: global_status = status traces += trace formulae.append(pbm.formula) if len(traces) > 0: Logger.log("\n*** TRACES ***\n", 0) for trace in traces: Logger.log("[%d]:\t%s" % (traces.index(trace) + 1, trace), 0) if config.translate: translate(problems.get_hts(), config, formulae) if global_status != 0: Logger.log("", 0) Logger.warning("Verifications with unexpected result") return global_status
def runtest(problem_file): reset_env() config = Config() config.safety = True config.verbosity = 2 config.solver_name = "msat" config.prove = True config.vcd = True config.force_expected = True config.translate = "file.ssts" status = run_problems(problem_file, config) with open(config.translate, "r") as f: print(f.read()) assert status == 0 return status
def runtest(problem_file): reset_env() translate_file = 'file.ssts' problems_manager = cosa_option_manager.read_problem_file( problem_file, verbosity=2, solver_name='msat', prove=True, vcd=True, translate=translate_file) # run option handling code then freeze problem manager # TODO: Update this to make a better API # problems_manager modified in place cosa_option_manager._option_handling(problems_manager) problems_manager.freeze() status = run_problems(problems_manager) with open(translate_file, "r") as f: print(f.read()) assert status == 0 return status
def run_verification(config): reset_env() Logger.verbosity = config.verbosity problems = Problems() problems.assumptions = config.assumptions problems.bmc_length = config.bmc_length problems.bmc_length_min = config.bmc_length_min problems.full_trace = config.full_trace problems.generators = config.generators problems.clock_behaviors = config.clock_behaviors problems.incremental = config.incremental problems.lemmas = config.lemmas problems.model_file = config.strfiles problems.prefix = config.prefix problems.prove = config.prove problems.skip_solving = config.skip_solving problems.smt2_tracing = config.smt2file problems.solver_name = config.solver_name problems.strategy = config.strategy problems.symbolic_init = config.symbolic_init problems.zero_init = config.zero_init problems.time = config.time problems.trace_all_vars = config.trace_all_vars problems.trace_vars_change = config.trace_vars_change problems.vcd = config.vcd problems.verbosity = config.verbosity problems.model_file = config.strfiles problems.boolean = config.boolean problems.add_clock = config.add_clock problems.abstract_clock = config.abstract_clock problems.run_coreir_passes = config.run_passes problems.relative_path = "./" problem = problems.new_problem() if config.safety: problem.verification = VerificationType.SAFETY elif config.ltl: problem.verification = VerificationType.LTL elif config.equivalence is not None: problem.verification = VerificationType.EQUIVALENCE problem.equivalence = config.equivalence elif config.simulate: problem.verification = VerificationType.SIMULATION elif config.parametric: problem.verification = VerificationType.PARAMETRIC elif config.fsm_check: problem.verification = VerificationType.EQUIVALENCE problem.equivalence = config.strfiles if not problem.verification == VerificationType.EQUIVALENCE: problem.formula = config.properties problem.name = VerificationType.to_string(problem.verification) if problem.formula or problem.verification: problems.add_problem(problem) return run_problems(None, config, problems)