INNER CODE UNIT · Python
c_prog
2akouwu/reverify · benchmarks/build_reconstructions.py:26
def c_prog(expr: str, nargs: int) -> str:
# long long everywhere: Windows `long` is 32-bit (LLP64) while Linux/macOS `long` is 64-bit,
# so a 32-bit sum could overflow to negative and make /2 differ from >>1. 64-bit is uniform.
reads = "".join(f"long long x{i}=atoll(v[{i + 1}]);" for i in range(nargs))
return C_HEAD + f"int main(int c,char**v){{{reads}printf(\"%lld\",(long long)({expr}));return 0;}}"
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"),