INNER CODE UNIT · Python

term

stp/stp · scripts/fuzz/uf-differential-fuzz.py:64

    def term(self, sort, depth):
        if depth <= 0 or rng.random() < 0.3:
            return self.leaf(sort, depth)
        fits = [(i, f) for i, f in enumerate(self.funcs) if f[2] == sort]
        if fits and rng.random() < 0.55:
            i, (name, dom, cod) = rng.choice(fits)
            args = [self.term(d, depth - 1) for d in dom]
            app = "(%s %s)" % (name, " ".join(args))
            self.apps.append((i, args))
            return app
        if sort == 'bool':
            op = rng.choice(['and', 'or', 'xor', 'not', '=', 'bvult'])
            if op == 'not':
                return "(not %s)" % self.term('bool', depth - 1)
            if op in ('=', 'bvult'):
                w = rng.choice(self.widths)
                return "(%s %s %s)" % (op, self.term(w, depth - 1),
                                       self.term(w, depth - 1))

View source record →

📰 Research Paper
Loading…
⏳ Fetching content…