INNER CODE UNIT · Python
py_prog
2akouwu/reverify · benchmarks/build_reconstructions.py:33
def py_prog(expr: str, nargs: int) -> str:
reads = "; ".join(f"x{i}=int(sys.argv[{i + 1}])" for i in range(nargs))
return f"import sys\n{reads}\nprint(int({expr}))"
# spec: name, category, nargs, {reference,correct,wrong} -> (c_expr, py_expr)
# variables are x0, x1, ...; keep expressions int64-safe for unsigned 32-bit inputs.
SPECS = [
("add", "arithmetic", 2, ("x0+x1", "x0+x1"), ("x1+x0", "x1+x0"), ("x0-x1", "x0-x1")),
("sub", "arithmetic", 2, ("x0-x1", "x0-x1"), ("-(x1-x0)", "-(x1-x0)"), ("x1-x0", "x1-x0")),
("avg_floor", "rounding", 2, ("(x0+x1)/2", "(x0+x1)//2"), ("(x0+x1)>>1", "(x0+x1)>>1"),
("x0/2+x1/2", "x0//2+x1//2")), # wrong: loses the low-bit carry when both are odd
("bxor", "bitwise", 2, ("x0^x1", "x0^x1"), ("x1^x0", "x1^x0"), ("x0&x1", "x0&x1")),
("band", "bitwise", 2, ("x0&x1", "x0&x1"), ("x1&x0", "x1&x0"), ("x0|x1", "x0|x1")),
("bor", "bitwise", 2, ("x0|x1", "x0|x1"), ("x1|x0", "x1|x0"), ("x0^x1", "x0^x1")),
("max2", "control-flow", 2, ("x0>x1?x0:x1", "(x0 if x0>x1 else x1)"),
("x1>x0?x1:x0", "(x1 if x1>x0 else x0)"), ("x0<x1?x0:x1", "(x0 if x0<x1 else x1)")),
("min2", "control-flow", 2, ("x0<x1?x0:x1", "(x0 if x0<x1 else x1)"),