141 lines
4.1 KiB
Bash
Executable File
141 lines
4.1 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
# Script to build and run the Evaluator-Optimizer example with verification
|
||
# Usage: ./run-evaluator-optimizer.sh
|
||
|
||
# Colors for output
|
||
GREEN='\033[0;32m'
|
||
RED='\033[0;31m'
|
||
YELLOW='\033[0;33m'
|
||
BLUE='\033[0;34m'
|
||
CYAN='\033[0;36m'
|
||
NC='\033[0m' # No Color
|
||
|
||
SCRIPT_DIR=$(dirname "$(readlink -f "$0")")
|
||
cd "$SCRIPT_DIR"
|
||
|
||
# Initialize error counter
|
||
ERRORS=0
|
||
|
||
# Function to display section header
|
||
function section() {
|
||
echo -e "\n${YELLOW}======== $1 ========${NC}"
|
||
}
|
||
|
||
# Build the project
|
||
section "Building Evaluator-Optimizer"
|
||
echo "Running mvn clean package..."
|
||
if ! ./mvnw clean package; then
|
||
echo -e "${RED}Build failed! Cannot continue.${NC}"
|
||
exit 1
|
||
fi
|
||
|
||
# Run the application and capture output
|
||
section "Running Evaluator-Optimizer"
|
||
echo "Starting the application..."
|
||
OUTPUT_FILE=$(mktemp)
|
||
./mvnw spring-boot:run | tee "$OUTPUT_FILE" || true
|
||
|
||
section "Verifying Output"
|
||
|
||
# Check if the application completed successfully
|
||
if ! grep -q "BUILD SUCCESS" "$OUTPUT_FILE"; then
|
||
echo -e "${RED}ERROR: Application did not complete successfully${NC}"
|
||
ERRORS=$((ERRORS+1))
|
||
fi
|
||
|
||
# Check for PASS evaluation in the final output
|
||
if grep -q "EVALUATION: PASS" "$OUTPUT_FILE"; then
|
||
echo -e "${GREEN}✓ Final evaluation PASSED${NC}"
|
||
else
|
||
echo -e "${RED}ERROR: Final evaluation did not PASS${NC}"
|
||
ERRORS=$((ERRORS+1))
|
||
fi
|
||
|
||
# Check for FINAL OUTPUT message
|
||
if grep -q "FINAL OUTPUT:" "$OUTPUT_FILE"; then
|
||
echo -e "${GREEN}✓ Final output generated successfully${NC}"
|
||
else
|
||
echo -e "${RED}ERROR: Final output not found${NC}"
|
||
ERRORS=$((ERRORS+1))
|
||
fi
|
||
|
||
section "Checking Stack Implementation Requirements"
|
||
|
||
# 1. Check for push method
|
||
if grep -q "public void push" "$OUTPUT_FILE"; then
|
||
echo -e "${GREEN}✓ push(x) method implemented correctly${NC}"
|
||
else
|
||
echo -e "${RED}ERROR: push method not implemented correctly${NC}"
|
||
ERRORS=$((ERRORS+1))
|
||
fi
|
||
|
||
# 2. Check for pop method
|
||
if grep -q "public void pop" "$OUTPUT_FILE" || grep -q "public int pop" "$OUTPUT_FILE"; then
|
||
echo -e "${GREEN}✓ pop() method implemented correctly${NC}"
|
||
else
|
||
echo -e "${RED}ERROR: pop method not implemented correctly${NC}"
|
||
ERRORS=$((ERRORS+1))
|
||
fi
|
||
|
||
# 3. Check for getMin method
|
||
if grep -q "public int getMin" "$OUTPUT_FILE"; then
|
||
echo -e "${GREEN}✓ getMin() method implemented correctly${NC}"
|
||
else
|
||
echo -e "${RED}ERROR: getMin method not implemented correctly${NC}"
|
||
ERRORS=$((ERRORS+1))
|
||
fi
|
||
|
||
# 4. Check for private fields
|
||
if grep -q "private" "$OUTPUT_FILE"; then
|
||
echo -e "${GREEN}✓ private fields used${NC}"
|
||
else
|
||
echo -e "${RED}ERROR: private fields not found${NC}"
|
||
ERRORS=$((ERRORS+1))
|
||
fi
|
||
|
||
# 5. Check for 'this.' keyword usage
|
||
if grep -q "this\." "$OUTPUT_FILE"; then
|
||
echo -e "${GREEN}✓ 'this.' keyword used correctly${NC}"
|
||
else
|
||
echo -e "${RED}ERROR: 'this.' keyword usage not found${NC}"
|
||
ERRORS=$((ERRORS+1))
|
||
fi
|
||
|
||
# 6. Check for JavaDoc style comments
|
||
if grep -q "\/\*\*" "$OUTPUT_FILE" && grep -q "\* @" "$OUTPUT_FILE"; then
|
||
echo -e "${GREEN}✓ JavaDoc documentation present${NC}"
|
||
else
|
||
echo -e "${RED}ERROR: JavaDoc documentation not properly implemented${NC}"
|
||
ERRORS=$((ERRORS+1))
|
||
fi
|
||
|
||
# 7. Check for O(1) operations mention
|
||
if grep -q "O(1)" "$OUTPUT_FILE"; then
|
||
echo -e "${GREEN}✓ O(1) operations confirmed${NC}"
|
||
else
|
||
echo -e "${RED}ERROR: O(1) operations not confirmed${NC}"
|
||
ERRORS=$((ERRORS+1))
|
||
fi
|
||
|
||
# Verify iterative improvement process
|
||
if grep -q "NEEDS_IMPROVEMENT" "$OUTPUT_FILE" && grep -q "PASS" "$OUTPUT_FILE"; then
|
||
echo -e "${GREEN}✓ Iterative improvement process confirmed (NEEDS_IMPROVEMENT → PASS)${NC}"
|
||
echo -e "${CYAN} The evaluator-optimizer workflow is functioning correctly!${NC}"
|
||
else
|
||
echo -e "${RED}ERROR: Could not verify iterative improvement process${NC}"
|
||
ERRORS=$((ERRORS+1))
|
||
fi
|
||
|
||
# Clean up
|
||
rm "$OUTPUT_FILE"
|
||
|
||
# Final result
|
||
if [ $ERRORS -eq 0 ]; then
|
||
echo -e "\n${GREEN}✓ Evaluator-Optimizer executed and verified successfully!${NC}"
|
||
echo -e "${GREEN}✓ Stack implementation meets all requirements.${NC}"
|
||
exit 0
|
||
else
|
||
echo -e "\n${RED}× Evaluator-Optimizer verification failed with $ERRORS errors!${NC}"
|
||
exit 1
|
||
fi |