Пример #1
0
    def prove_reach(self, vs, input):
        # @timeit
        def f(task):
            vid, vld_cls = task
            vld = vld_cls(self.tmpdir)
            r, cex = vld.prove_reach(vs, input)
            if r is None:
                return None
            else:
                return vid, (r, cex)

        wrs = Miscs.run_mp_ex(
            "prove_reach",
            [(settings.CPAchecker.CPA_SHORT_NAME, CPAchecker),
             (settings.Ultimate.UAUTOMIZER_SHORT_NAME, UAutomizer),
             (settings.Ultimate.UTAIPAN_SHORT_NAME, UTaipan)],
            f,
            get_fst_res=True)
        mlog.debug('wrs: {}'.format(wrs))
        if wrs:
            vid, r = wrs[0]
            mlog.debug('Got result firstly from {}'.format(vid))
            return r
        else:
            return None, None
Пример #2
0
        def _merge_traces():
            # def f(task):
            #     inp, l = task
            #     # vtrace1: 8460 16 0 1 16 8460
            #     parts = l.split(':')
            #     assert len(parts) == 2, parts
            #     loc, tracevals = parts[0], parts[1]
            #     loc = loc.strip()  # vtrace1
            #     ss = inv_decls[loc].names
            #     vs = tracevals.strip().split()
            #     trace = Trace.parse(ss, vs)
            #     return (inp, loc, trace)

            # tasks = [(inp, l) for inp, lines in raw_traces.items() for l in lines]
            # wrs = Miscs.run_mp_ex("merge traces", tasks, f)
            # itraces = defaultdict(dict)
            # for inp, loc, trace in wrs:
            #     itraces[inp].setdefault(loc, []).append(trace)
            # return itraces

            def f(task):
                inp, lines = task
                dtraces = defaultdict(list)
                for l in lines:
                    # vtrace1: 8460 16 0 1 16 8460
                    parts = l.split(':')
                    assert len(parts) == 2, parts
                    loc, tracevals = parts[0], parts[1]
                    loc = loc.strip()  # vtrace1
                    ss = inv_decls[loc].names
                    vs = tracevals.strip().split()
                    trace = Trace.parse(ss, vs)
                    dtraces[loc].append(trace)
                return (inp, dtraces)

            tasks = raw_traces.items()
            wrs = Miscs.run_mp_ex("merge traces", tasks, f)
            itraces = {inp: dtraces for inp, dtraces in wrs}
            return itraces