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"),

View source record →

📰 Research Paper
Loading…
⏳ Fetching content…