set -uo pipefail
trap 'echo ""; echo "๐ Interrupted by user"; exit 130' INT
echo "๐ Discovering examples from Cargo.toml..."
examples=$(grep -A1 '^\[\[example\]\]' Cargo.toml | grep '^name =' | sed 's/name = "//;s/"$//' | sort)
if [ -z "$examples" ]; then
echo "โ No examples found in Cargo.toml"
exit 1
fi
example_list=$(echo "$examples" | tr '\n' ' ')
example_count=$(echo "$examples" | wc -l)
echo "๐ Found $example_count examples: $example_list"
passed=0
failed=0
timed_out=0
temp_results=$(mktemp)
echo "0 0 0" > "$temp_results"
echo "$examples" | while IFS= read -r example; do
printf "๐งช Running example '%s'... " "$example"
if timeout 20 cargo run --example "$example" >/dev/null 2>&1; then
echo "โ
PASSED"
awk '{print $1+1, $2, $3}' "$temp_results" > "${temp_results}.new" && mv "${temp_results}.new" "$temp_results"
else
exit_code=$?
if [ "$exit_code" -eq 124 ]; then
echo "โฑ๏ธ TIMED OUT (faulty)"
awk '{print $1, $2, $3+1}' "$temp_results" > "${temp_results}.new" && mv "${temp_results}.new" "$temp_results"
else
echo "โ FAILED"
awk '{print $1, $2+1, $3}' "$temp_results" > "${temp_results}.new" && mv "${temp_results}.new" "$temp_results"
fi
fi
done
read -r passed failed timed_out < "$temp_results"
rm "$temp_results"
echo ""
echo "๐ Test Results:"
echo " โ
Passed: $passed"
echo " โ Failed: $failed"
echo " โฑ๏ธ Timed Out (faulty): $timed_out"
echo " ๐ Total: $((passed + failed + timed_out))"
if [ "$failed" -gt 0 ] || [ "$timed_out" -gt 0 ]; then
echo ""
if [ "$timed_out" -gt 0 ]; then
echo "โ ๏ธ $timed_out example(s) timed out (considered faulty)"
fi
if [ "$failed" -gt 0 ]; then
echo "โ $failed example(s) failed"
fi
exit 1
else
echo ""
echo "๐ All $passed examples passed!"
fi