import subprocess
import sys
from pathlib import Path
def powerset(input):
if len(input) == 0:
return [[]]
pivot = input[0]
subset = powerset(input[1:])
with_pivot = subset.copy()
for i, set in enumerate(with_pivot):
with_pivot[i] = [pivot] + set
return subset + with_pivot
def execute(args, **kwargs):
cwd = ""
if "cwd" in kwargs:
cwd += str(kwargs["cwd"]) + "/ "
print(cwd + "$ " + " ".join(args))
status = subprocess.run(args, **kwargs)
if status.returncode != 0:
sys.exit(1)
def check(toolchain, features, **kwargs):
for subset in powerset(features):
feature_str = ",".join(subset)
execute(
["cargo", "+" + toolchain, "check", "--features", feature_str],
**kwargs
)
features = [
"alloc",
"std",
"compat_hash",
"compat_macros",
]
check("stable", features)
check("nightly", features + ["unstable"])
for dir in Path("example-crates").iterdir():
if not dir.joinpath("Cargo.toml").exists():
continue
execute(["cargo", "test", "--features", "std"], cwd=dir)
execute(["cargo", "test"], cwd="example-crates")