about summary refs log tree commit diff stats
path: root/js/scripting-lang/baba-yaga-c/run_comprehensive_tests.sh
diff options
context:
space:
mode:
Diffstat (limited to 'js/scripting-lang/baba-yaga-c/run_comprehensive_tests.sh')
-rwxr-xr-xjs/scripting-lang/baba-yaga-c/run_comprehensive_tests.sh193
1 files changed, 193 insertions, 0 deletions
diff --git a/js/scripting-lang/baba-yaga-c/run_comprehensive_tests.sh b/js/scripting-lang/baba-yaga-c/run_comprehensive_tests.sh
new file mode 100755
index 0000000..768bba2
--- /dev/null
+++ b/js/scripting-lang/baba-yaga-c/run_comprehensive_tests.sh
@@ -0,0 +1,193 @@
+#!/bin/bash
+
+# Baba Yaga C Implementation - Comprehensive Test Runner
+# This script runs the same test suite used by the JavaScript implementation
+
+set -e
+
+# Colors for output
+RED='\033[0;31m'
+GREEN='\033[0;32m'
+YELLOW='\033[1;33m'
+BLUE='\033[0;34m'
+NC='\033[0m' # No Color
+
+# Configuration
+BABA_YAGA_BIN="./bin/baba-yaga"
+TESTS_DIR="./tests"
+TEMP_DIR="./temp_test_output"
+RESULTS_FILE="./test_results.txt"
+
+# Test categories (matching JavaScript implementation)
+UNIT_TESTS=(
+    "01_lexer_basic.txt"
+    "02_arithmetic_operations.txt"
+    "03_comparison_operators.txt"
+    "04_logical_operators.txt"
+    "05_io_operations.txt"
+    "06_function_definitions.txt"
+    "07_case_expressions.txt"
+    "08_first_class_functions.txt"
+    "09_tables.txt"
+    "10_standard_library.txt"
+    "11_edge_cases.txt"
+    "12_advanced_tables.txt"
+    "13_standard_library_complete.txt"
+    "14_error_handling.txt"
+    "15_performance_stress.txt"
+    "16_function_composition.txt"
+    "17_table_enhancements.txt"
+    "18_each_combinator.txt"
+    "19_embedded_functions.txt"
+    "20_via_operator.txt"
+    "21_enhanced_case_statements.txt"
+    "22_parser_limitations.txt"
+    "23_minus_operator_spacing.txt"
+)
+
+INTEGRATION_TESTS=(
+    "integration_01_basic_features.txt"
+    "integration_02_pattern_matching.txt"
+    "integration_03_functional_programming.txt"
+    "integration_04_mini_case_multi_param.txt"
+)
+
+# Statistics
+total_tests=0
+passed_tests=0
+failed_tests=0
+skipped_tests=0
+
+# Function to print header
+print_header() {
+    echo -e "${BLUE}========================================${NC}"
+    echo -e "${BLUE}  Baba Yaga C Implementation Test Suite${NC}"
+    echo -e "${BLUE}========================================${NC}"
+    echo ""
+}
+
+# Function to print section header
+print_section() {
+    echo -e "${YELLOW}$1${NC}"
+    echo -e "${YELLOW}$(printf '=%.0s' {1..${#1}})${NC}"
+    echo ""
+}
+
+# Function to run a single test
+run_test() {
+    local test_file="$1"
+    local test_name="${test_file%.txt}"
+    local test_path="$TESTS_DIR/$test_file"
+    local output_file="$TEMP_DIR/${test_name}.out"
+    local error_file="$TEMP_DIR/${test_name}.err"
+    
+    total_tests=$((total_tests + 1))
+    
+    echo -n "Testing $test_name... "
+    
+    # Check if test file exists
+    if [ ! -f "$test_path" ]; then
+        echo -e "${RED}SKIP (file not found)${NC}"
+        skipped_tests=$((skipped_tests + 1))
+        return
+    fi
+    
+    # Run the test
+    if $BABA_YAGA_BIN "$test_path" > "$output_file" 2> "$error_file"; then
+        # Check if there were any errors in stderr
+        if [ -s "$error_file" ]; then
+            echo -e "${RED}FAIL (runtime errors)${NC}"
+            echo "  Error output:"
+            cat "$error_file" | sed 's/^/    /'
+            failed_tests=$((failed_tests + 1))
+        else
+            echo -e "${GREEN}PASS${NC}"
+            passed_tests=$((passed_tests + 1))
+        fi
+    else
+        echo -e "${RED}FAIL (execution failed)${NC}"
+        if [ -s "$error_file" ]; then
+            echo "  Error output:"
+            cat "$error_file" | sed 's/^/    /'
+        fi
+        failed_tests=$((failed_tests + 1))
+    fi
+}
+
+# Function to run test category
+run_test_category() {
+    local category_name="$1"
+    shift
+    local tests=("$@")
+    
+    print_section "$category_name"
+    
+    for test_file in "${tests[@]}"; do
+        run_test "$test_file"
+    done
+    
+    echo ""
+}
+
+# Function to print summary
+print_summary() {
+    echo -e "${BLUE}========================================${NC}"
+    echo -e "${BLUE}  Test Summary${NC}"
+    echo -e "${BLUE}========================================${NC}"
+    echo ""
+    echo -e "Total tests: $total_tests"
+    echo -e "${GREEN}Passed: $passed_tests${NC}"
+    echo -e "${RED}Failed: $failed_tests${NC}"
+    if [ $skipped_tests -gt 0 ]; then
+        echo -e "${YELLOW}Skipped: $skipped_tests${NC}"
+    fi
+    
+    if [ $failed_tests -eq 0 ]; then
+        echo -e "${GREEN}All tests passed! 🎉${NC}"
+        exit 0
+    else
+        echo -e "${RED}Some tests failed.${NC}"
+        exit 1
+    fi
+}
+
+# Function to cleanup
+cleanup() {
+    if [ -d "$TEMP_DIR" ]; then
+        rm -rf "$TEMP_DIR"
+    fi
+}
+
+# Main execution
+main() {
+    # Setup
+    print_header
+    
+    # Check if baba-yaga binary exists
+    if [ ! -f "$BABA_YAGA_BIN" ]; then
+        echo -e "${RED}Error: $BABA_YAGA_BIN not found. Please build the project first.${NC}"
+        exit 1
+    fi
+    
+    # Check if tests directory exists
+    if [ ! -d "$TESTS_DIR" ]; then
+        echo -e "${RED}Error: Tests directory $TESTS_DIR not found.${NC}"
+        exit 1
+    fi
+    
+    # Create temp directory
+    mkdir -p "$TEMP_DIR"
+    
+    # Run tests
+    run_test_category "Unit Tests" "${UNIT_TESTS[@]}"
+    run_test_category "Integration Tests" "${INTEGRATION_TESTS[@]}"
+    
+    # Print summary
+    print_summary
+}
+
+# Set up cleanup on exit
+trap cleanup EXIT
+
+# Run main function
+main "$@" 
\ No newline at end of file