101 lines
4.1 KiB
Bash
Executable File
101 lines
4.1 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Master test runner - runs all tests
|
|
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m'
|
|
|
|
# Get the directory where this script is located, which is the testers directory.
|
|
TESTER_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
|
|
|
|
echo "========================================"
|
|
echo -e "${BLUE}Philosophers Preparation - Test Suite${NC}"
|
|
echo "========================================"
|
|
echo ""
|
|
|
|
TOTAL_PASSED=0
|
|
TOTAL_FAILED=0
|
|
|
|
# Function to run a test
|
|
run_test() {
|
|
local test_script=$1
|
|
local test_name=$2
|
|
|
|
if [ -f "$test_script" ]; then
|
|
echo ""
|
|
echo -e "${BLUE}▶ Running: $test_name${NC}"
|
|
echo "----------------------------------------"
|
|
bash "$test_script"
|
|
EXIT_CODE=$?
|
|
|
|
if [ $EXIT_CODE -eq 0 ]; then
|
|
echo -e "${GREEN}✓ $test_name - ALL TESTS PASSED${NC}"
|
|
((TOTAL_PASSED++))
|
|
else
|
|
echo -e "${RED}✗ $test_name - SOME TESTS FAILED${NC}"
|
|
((TOTAL_FAILED++))
|
|
fi
|
|
echo ""
|
|
else
|
|
echo -e "${YELLOW}⊘ Skipping $test_name (tester not found at $test_script)${NC}"
|
|
echo ""
|
|
fi
|
|
}
|
|
|
|
# Check if specific test is requested
|
|
if [ $# -eq 1 ]; then
|
|
case $1 in
|
|
1) run_test "$TESTER_DIR/test_1_thread_basics.sh" "Exercise 1: Thread Basics" ;;
|
|
2) run_test "$TESTER_DIR/test_2_mutex_basics.sh" "Exercise 2: Mutex Basics" ;;
|
|
3) run_test "$TESTER_DIR/test_3_precise_timing.sh" "Exercise 3: Precise Timing" ;;
|
|
4) run_test "$TESTER_DIR/test_4_state_monitor.sh" "Exercise 4: State Monitor" ;;
|
|
5) run_test "$TESTER_DIR/test_5_producer_consumer.sh" "Exercise 5: Producer-Consumer" ;;
|
|
6) run_test "$TESTER_DIR/test_6_deadlock_demo.sh" "Exercise 6: Deadlock Demo" ;;
|
|
7) run_test "$TESTER_DIR/test_7_limited_resources.sh" "Exercise 7: Limited Resources" ;;
|
|
8) run_test "$TESTER_DIR/test_8_simple_philosophers.sh" "Exercise 8: Simple Philosophers" ;;
|
|
9) run_test "$TESTER_DIR/test_9_death_monitor.sh" "Exercise 9: Death Monitor" ;;
|
|
10) run_test "$TESTER_DIR/test_10_philosophers_args.sh" "Exercise 10: Philosophers Args" ;;
|
|
11) run_test "$TESTER_DIR/test_11_race_detector.sh" "Exercise 11: Race Detector" ;;
|
|
12) run_test "$TESTER_DIR/test_12_philosophers_bonus.sh" "Exercise 12: Philosophers Bonus" ;;
|
|
*)
|
|
echo "Usage: $0 [exercise_number]"
|
|
echo "Example: $0 1 (to test only exercise 1)"
|
|
echo "Or run without arguments to test all exercises"
|
|
exit 1
|
|
;;
|
|
esac
|
|
else
|
|
# Run all tests
|
|
run_test "$TESTER_DIR/test_1_thread_basics.sh" "Exercise 1: Thread Basics"
|
|
run_test "$TESTER_DIR/test_2_mutex_basics.sh" "Exercise 2: Mutex Basics"
|
|
run_test "$TESTER_DIR/test_3_precise_timing.sh" "Exercise 3: Precise Timing"
|
|
run_test "$TESTER_DIR/test_4_state_monitor.sh" "Exercise 4: State Monitor"
|
|
run_test "$TESTER_DIR/test_5_producer_consumer.sh" "Exercise 5: Producer-Consumer"
|
|
run_test "$TESTER_DIR/test_6_deadlock_demo.sh" "Exercise 6: Deadlock Demo"
|
|
run_test "$TESTER_DIR/test_7_limited_resources.sh" "Exercise 7: Limited Resources"
|
|
run_test "$TESTER_DIR/test_8_simple_philosophers.sh" "Exercise 8: Simple Philosophers"
|
|
run_test "$TESTER_DIR/test_9_death_monitor.sh" "Exercise 9: Death Monitor"
|
|
run_test "$TESTER_DIR/test_10_philosophers_args.sh" "Exercise 10: Philosophers Args"
|
|
run_test "$TESTER_DIR/test_11_race_detector.sh" "Exercise 11: Race Detector"
|
|
run_test "$TESTER_DIR/test_12_philosophers_bonus.sh" "Exercise 12: Philosophers Bonus"
|
|
fi
|
|
|
|
# Final summary
|
|
echo "========================================"
|
|
echo -e "${BLUE}FINAL RESULTS${NC}"
|
|
echo "========================================"
|
|
echo -e "Exercises passed: ${GREEN}$TOTAL_PASSED${NC}"
|
|
echo -e "Exercises failed: ${RED}$TOTAL_FAILED${NC}"
|
|
echo "========================================"
|
|
|
|
if [ $TOTAL_FAILED -eq 0 ] && [ $TOTAL_PASSED -gt 0 ]; then
|
|
echo -e "${GREEN}🎉 All tests passed! Great job!${NC}"
|
|
exit 0
|
|
else
|
|
echo -e "${YELLOW}Keep working on the failed exercises.${NC}"
|
|
exit 1
|
|
fi
|