import os
class TestCase:
def __init__(self, feature, target_triple, toolchain, size):
self.feature = feature
self.target_triple = target_triple
self.toolchain = toolchain
self.size = size
def system_succeed(cmd):
print(f"Executing {cmd}")
ret = os.system(cmd)
if ret != 0:
print(f"Command {cmd} failed with exit code {ret}")
exit(ret)
x86 = "x86_64-unknown-linux-gnu"
matrix = [
TestCase("avx", x86, "stable", 32),
TestCase("avx2", x86, "stable", 32),
TestCase("sse", x86, "stable", 16),
TestCase("sse2", x86, "stable", 16),
TestCase("sse3", x86, "stable", 16),
TestCase("sse4.1", x86, "stable", 16),
TestCase("sse4.2", x86, "stable", 16),
TestCase("ssse3", x86, "stable", 16),
TestCase("avx512f", x86, "nightly", 64),
]
for test_case in matrix:
print(f"TEST CASE: target_feature {test_case.feature} \
should cause SimdBlock to have size {test_case.size} \
when compiled with {test_case.toolchain} \
on {test_case.target_triple}")
rustflags = f"-C target-feature=+{test_case.feature}"
testflags = str(test_case.size)
rustup = f"rustup override set {test_case.toolchain}"
build = f"cargo build --target {test_case.target_triple}"
test = f"cargo test simd_alignment_test --target {test_case.target_triple} -- --include-ignored"
system_succeed(rustup)
system_succeed(f"RUSTFLAGS=\"{rustflags}\" {build}")
system_succeed(
f"ALIGNERS_TEST_SIMD_EXPECTED_SIZE={test_case.size} RUSTFLAGS=\"{rustflags}\" {test}")
print("TEST CASE OK")