blob: 9534b22c1c8f8870e9bb0f16de349875f7406826 [file] [edit]
"""Test that timeit -arch correctly selects Mach-O slices on macOS.
Usage: test_arch.py <timeit> <exe>
"""
import subprocess
import sys
# Must match EXITCODE_EXEC_BADARCH in tools/timeit.c
_EXITCODE_EXEC_BADARCH = 70
def test_valid_arches(timeit, exe):
"""Check that timeit -arch <slice> runs the correct slice of exe."""
lipo = subprocess.run(["lipo", "-archs", exe], capture_output=True, text=True)
if lipo.returncode != 0:
print(f"lipo failed: {lipo.stderr.strip()}")
sys.exit(1)
for arch in lipo.stdout.split():
cmd = [timeit, "-arch", arch, exe]
print(" ".join(cmd))
result = subprocess.run(cmd, capture_output=True, text=True)
if result.returncode == _EXITCODE_EXEC_BADARCH:
print(f"skipping {arch}: not supported on this machine")
continue
if result.returncode != 0:
print(f"timeit -arch {arch} exited with {result.returncode}")
print(result.stderr)
sys.exit(1)
got = result.stdout.strip()
if got != arch:
print(f"timeit -arch {arch}: expected '{arch}', got '{got}'")
sys.exit(1)
def test_invalid_arch(timeit, exe):
"""Check that timeit rejects unrecognized arch names."""
cmd = [timeit, "-arch", "obviouslyfake", exe]
print(" ".join(cmd))
result = subprocess.run(cmd, capture_output=True)
if result.returncode == 0:
print("timeit -arch obviouslyfake should have failed but succeeded")
sys.exit(1)
if __name__ == "__main__":
timeit = sys.argv[1]
exe = sys.argv[2]
test_valid_arches(timeit, exe)
test_invalid_arch(timeit, exe)