set -o nounset -o errexit
readonly CARGO_OPTS=${1:-} function cargo { command cargo $CARGO_OPTS "$@" ;}
readonly FEATURES=("unnamed" "named" "anonymous" "plaster")
FEATURES_COMBOS=()
function features_combos {
local N=$1 PREFIX=${2:-}
for I in $(seq "$N" 1 $((${#FEATURES[@]} - 1)) 2> /dev/null); do
local X=${PREFIX}${FEATURES[I]}
FEATURES_COMBOS+=("$X")
features_combos $((I + 1)) "$X," done
}
features_combos 0
readonly FEATURES_COMBOS
readonly COMMANDS=(
"test --tests"
"test --doc"
"run --example multi-proc"
doc
)
FAILURES=()
SUCCESSES=()
function run {
local C
for C in "${COMMANDS[@]}"; do
local CMD=(cargo $C "$@")
echo "Running: ${CMD[*]}"
if "${CMD[@]}" > /dev/null 2>&1 ; then
SUCCESSES+=("${CMD[*]}")
else
FAILURES+=("${CMD[*]}")
fi
done
}
OS=$(uname)
readonly OS
echo "On: $OS. Using: $(cargo --version)."
run
for F in "${FEATURES_COMBOS[@]}"; do
run --no-default-features --features "$F" done
run --no-default-features
readonly FAILURES
EXPECTED_FAILURES=(
"cargo test --tests --no-default-features --features plaster"
"cargo test --tests --no-default-features --features named,plaster"
"cargo test --doc --no-default-features --features plaster"
"cargo test --doc --no-default-features --features named,plaster"
"cargo run --example multi-proc --no-default-features --features plaster"
"cargo run --example multi-proc --no-default-features --features named,plaster"
"cargo doc --no-default-features --features plaster"
"cargo doc --no-default-features --features named,plaster"
"cargo run --example multi-proc --no-default-features --features named"
"cargo test --tests --no-default-features"
"cargo test --doc --no-default-features"
"cargo run --example multi-proc --no-default-features"
"cargo doc --no-default-features"
)
if [[ "$OS" =~ [Dd]arwin ]]; then
EXPECTED_FAILURES+=(
"cargo test --tests --no-default-features --features unnamed,plaster"
"cargo test --tests --no-default-features --features unnamed,named,plaster"
"cargo test --doc --no-default-features --features unnamed,plaster"
"cargo test --doc --no-default-features --features unnamed,named,plaster"
"cargo run --example multi-proc --no-default-features --features unnamed,plaster"
"cargo run --example multi-proc --no-default-features --features unnamed,named,plaster"
"cargo doc --no-default-features --features unnamed,plaster"
"cargo doc --no-default-features --features unnamed,named,plaster"
"cargo test --tests --no-default-features --features unnamed"
"cargo test --doc --no-default-features --features unnamed"
"cargo run --example multi-proc --no-default-features --features unnamed"
"cargo doc --no-default-features --features unnamed"
"cargo run --example multi-proc --no-default-features --features unnamed"
"cargo run --example multi-proc --no-default-features --features unnamed,named"
"cargo run --example multi-proc --no-default-features --features unnamed,named,plaster"
"cargo run --example multi-proc --no-default-features --features unnamed,plaster"
)
else EXPECTED_FAILURES+=(
"cargo test --tests --no-default-features --features anonymous,plaster"
"cargo test --tests --no-default-features --features named,anonymous,plaster"
"cargo test --doc --no-default-features --features anonymous,plaster"
"cargo test --doc --no-default-features --features named,anonymous,plaster"
"cargo run --example multi-proc --no-default-features --features anonymous,plaster"
"cargo run --example multi-proc --no-default-features --features named,anonymous,plaster"
"cargo doc --no-default-features --features anonymous,plaster"
"cargo doc --no-default-features --features named,anonymous,plaster"
)
fi
if [[ "$OS" =~ OpenBSD ]]; then
EXPECTED_FAILURES+=(
"cargo run --example multi-proc --no-default-features --features unnamed"
"cargo run --example multi-proc --no-default-features --features unnamed,named"
"cargo run --example multi-proc --no-default-features --features unnamed,named,plaster"
"cargo run --example multi-proc --no-default-features --features unnamed,plaster"
)
fi
readonly EXPECTED_FAILURES
SURPRISE_FAILURES=()
SURPRISE_SUCCESSES=()
for F in "${FAILURES[@]}"; do
IS_SURPRISE=true
for E in "${EXPECTED_FAILURES[@]}"; do
if [ "$F" = "$E" ]; then
IS_SURPRISE=false
break
fi
done
if [ "$IS_SURPRISE" = true ]; then
SURPRISE_FAILURES+=("$F")
fi
done
readonly SURPRISE_FAILURES
for E in "${EXPECTED_FAILURES[@]}"; do
IS_SURPRISE=false
for S in "${SUCCESSES[@]}"; do
if [ "$E" = "$S" ]; then
IS_SURPRISE=true
break
fi
done
if [ "$IS_SURPRISE" = true ]; then
SURPRISE_SUCCESSES+=("$E")
fi
done
readonly SURPRISE_SUCCESSES
if (( ${#SURPRISE_SUCCESSES[@]} >= 1 ))
then
echo
echo "SURPRISE SUCCESSES (${#SURPRISE_SUCCESSES[@]}):"
for S in "${SURPRISE_SUCCESSES[@]}"; do
echo "$S"
done
fi
if (( ${#SURPRISE_FAILURES[@]} == 0 ))
then
echo
echo "Success - no unexpected failures."
else
echo
echo "FAILURES (${#SURPRISE_FAILURES[@]}):"
for F in "${SURPRISE_FAILURES[@]}"; do
echo "$F"
done
exit 1
fi