about summary refs log tree commit diff stats
path: root/js/scripting-lang/baba-yaga-c/test_stdlib.sh
diff options
context:
space:
mode:
Diffstat (limited to 'js/scripting-lang/baba-yaga-c/test_stdlib.sh')
-rwxr-xr-xjs/scripting-lang/baba-yaga-c/test_stdlib.sh296
1 files changed, 296 insertions, 0 deletions
diff --git a/js/scripting-lang/baba-yaga-c/test_stdlib.sh b/js/scripting-lang/baba-yaga-c/test_stdlib.sh
new file mode 100755
index 0000000..6c13674
--- /dev/null
+++ b/js/scripting-lang/baba-yaga-c/test_stdlib.sh
@@ -0,0 +1,296 @@
+#!/bin/bash
+
+# Comprehensive Standard Library Test Suite for Baba Yaga C Implementation
+
+echo "=== Baba Yaga Standard Library Test Suite ==="
+echo ""
+
+# Colors for output
+RED='\033[0;31m'
+GREEN='\033[0;32m'
+YELLOW='\033[1;33m'
+BLUE='\033[0;34m'
+NC='\033[0m' # No Color
+
+# Function to run a test
+run_test() {
+    local expression=$1
+    local expected=$2
+    local test_name=$3
+    
+    echo -n "Testing $test_name... "
+    
+    local output
+    local exit_code
+    output=$(./bin/baba-yaga "$expression;" 2>&1)
+    exit_code=$?
+    
+    if [ $exit_code -eq 0 ] && [ "$(echo -n "$output")" = "$expected" ]; then
+        echo -e "${GREEN}PASS${NC} (got: $output)"
+        return 0
+    else
+        echo -e "${RED}FAIL${NC}"
+        echo -e "${RED}Expected:${NC} $expected"
+        echo -e "${RED}Got:${NC} $output"
+        return 1
+    fi
+}
+
+# Function to run an error test
+run_error_test() {
+    local expression=$1
+    local test_name=$2
+    
+    echo -n "Testing $test_name (should fail)... "
+    
+    local output
+    local exit_code
+    output=$(./bin/baba-yaga "$expression;" 2>&1)
+    exit_code=$?
+    
+    if [ $exit_code -eq 0 ] && echo "$output" | grep -q "Error:"; then
+        echo -e "${GREEN}PASS${NC} (correctly failed with error message)"
+        return 0
+    else
+        echo -e "${RED}FAIL${NC}"
+        echo -e "${RED}Expected:${NC} Error message"
+        echo -e "${RED}Got:${NC} $output"
+        return 1
+    fi
+}
+
+# Counters
+total_tests=0
+passed_tests=0
+failed_tests=0
+
+echo "Running Arithmetic Function Tests..."
+echo "==================================="
+
+# Basic arithmetic tests
+arithmetic_tests=(
+    "add 5 3|8|Add Function"
+    "subtract 10 3|7|Subtract Function"
+    "multiply 6 7|42|Multiply Function"
+    "divide 15 3|5|Divide Function"
+    "modulo 10 3|1|Modulo Function"
+    "pow 2 3|8|Power Function"
+    "negate 5|-5|Negate Function"
+    "add 0 0|0|Add Zero"
+    "multiply 0 5|0|Multiply by Zero"
+    "divide 0 5|0|Divide Zero by Number"
+    "pow 5 0|1|Power to Zero"
+    "pow 1 100|1|Power of One"
+)
+
+for test in "${arithmetic_tests[@]}"; do
+    IFS='|' read -r expression expected name <<< "$test"
+    total_tests=$((total_tests + 1))
+    
+    if run_test "$expression" "$expected" "$name"; then
+        passed_tests=$((passed_tests + 1))
+    else
+        failed_tests=$((failed_tests + 1))
+    fi
+done
+
+echo ""
+echo "Running Arithmetic Error Tests..."
+echo "================================="
+
+# Arithmetic error tests
+arithmetic_error_tests=(
+    "divide 10 0:Division by Zero"
+    "modulo 10 0:Modulo by Zero"
+    "add 5:Too Few Arguments for Add"
+    "add 1 2 3:Too Many Arguments for Add"
+    "divide 5:Too Few Arguments for Divide"
+    "divide 1 2 3:Too Many Arguments for Divide"
+)
+
+for test in "${arithmetic_error_tests[@]}"; do
+    IFS=':' read -r expression name <<< "$test"
+    total_tests=$((total_tests + 1))
+    
+    if run_error_test "$expression" "$name"; then
+        passed_tests=$((passed_tests + 1))
+    else
+        failed_tests=$((failed_tests + 1))
+    fi
+done
+
+echo ""
+echo "Running Comparison Function Tests..."
+echo "==================================="
+
+# Comparison tests
+comparison_tests=(
+    "equals 5 5|true|Equality True"
+    "equals 5 6|false|Equality False"
+    "not_equals 5 6|true|Inequality True"
+    "not_equals 5 5|false|Inequality False"
+    "less 3 5|true|Less Than True"
+    "less 5 3|false|Less Than False"
+    "less 5 5|false|Less Than Equal"
+    "less_equal 5 5|true|Less Equal True"
+    "less_equal 3 5|true|Less Equal True"
+    "less_equal 5 3|false|Less Equal False"
+    "greater 10 5|true|Greater Than True"
+    "greater 5 10|false|Greater Than False"
+    "greater 5 5|false|Greater Than Equal"
+    "greater_equal 5 5|true|Greater Equal True"
+    "greater_equal 10 5|true|Greater Equal True"
+    "greater_equal 5 10|false|Greater Equal False"
+)
+
+for test in "${comparison_tests[@]}"; do
+    IFS='|' read -r expression expected name <<< "$test"
+    total_tests=$((total_tests + 1))
+    
+    if run_test "$expression" "$expected" "$name"; then
+        passed_tests=$((passed_tests + 1))
+    else
+        failed_tests=$((failed_tests + 1))
+    fi
+done
+
+echo ""
+echo "Running Logical Function Tests..."
+echo "================================="
+
+# Logical tests
+logical_tests=(
+    "and true true|true|And True True"
+    "and true false|false|And True False"
+    "and false true|false|And False True"
+    "and false false|false|And False False"
+    "or true true|true|Or True True"
+    "or true false|true|Or True False"
+    "or false true|true|Or False True"
+    "or false false|false|Or False False"
+    "xor true true|false|Xor True True"
+    "xor true false|true|Xor True False"
+    "xor false true|true|Xor False True"
+    "xor false false|false|Xor False False"
+    "not true|false|Not True"
+    "not false|true|Not False"
+)
+
+for test in "${logical_tests[@]}"; do
+    IFS='|' read -r expression expected name <<< "$test"
+    total_tests=$((total_tests + 1))
+    
+    if run_test "$expression" "$expected" "$name"; then
+        passed_tests=$((passed_tests + 1))
+    else
+        failed_tests=$((failed_tests + 1))
+    fi
+done
+
+echo ""
+echo "Running Higher-Order Function Tests..."
+echo "======================================"
+
+# Higher-order function tests
+higher_order_tests=(
+    "apply add 5 3|8|Apply Add Function"
+    "apply multiply 4 5|20|Apply Multiply Function"
+    "compose add 5 multiply 2|15|Compose Add and Multiply"
+)
+
+for test in "${higher_order_tests[@]}"; do
+    IFS='|' read -r expression expected name <<< "$test"
+    total_tests=$((total_tests + 1))
+    
+    if run_test "$expression" "$expected" "$name"; then
+        passed_tests=$((passed_tests + 1))
+    else
+        failed_tests=$((failed_tests + 1))
+    fi
+done
+
+echo ""
+echo "Running IO Function Tests..."
+echo "============================"
+
+# IO function tests (basic functionality)
+io_tests=(
+    "..out 42|42|Output Function"
+    "..out hello|hello|Output String"
+    "..assert true|true|Assert True"
+    "..assert false|false|Assert False"
+)
+
+for test in "${io_tests[@]}"; do
+    IFS='|' read -r expression expected name <<< "$test"
+    total_tests=$((total_tests + 1))
+    
+    if run_test "$expression" "$expected" "$name"; then
+        passed_tests=$((passed_tests + 1))
+    else
+        failed_tests=$((failed_tests + 1))
+    fi
+done
+
+echo ""
+echo "Running Type Error Tests..."
+echo "=========================="
+
+# Type error tests
+type_error_tests=(
+    "add 5 true:Type Mismatch Add"
+    "equals 5 hello:Type Mismatch Equals"
+    "less true false:Type Mismatch Less"
+    "and 5 3:Type Mismatch And"
+    "not 42:Type Mismatch Not"
+)
+
+for test in "${type_error_tests[@]}"; do
+    IFS=':' read -r expression name <<< "$test"
+    total_tests=$((total_tests + 1))
+    
+    if run_error_test "$expression" "$name"; then
+        passed_tests=$((passed_tests + 1))
+    else
+        failed_tests=$((failed_tests + 1))
+    fi
+done
+
+echo ""
+echo "Running Edge Case Tests..."
+echo "========================="
+
+# Edge case tests
+edge_case_tests=(
+    "add 0.1 0.2|0.3|Floating Point Addition"
+    "multiply 0.5 0.5|0.25|Floating Point Multiplication"
+    "divide 1 3|0.3333333333333333|Floating Point Division"
+    "pow 2 0.5|1.4142135623730951|Square Root"
+    "pow 2 -1|0.5|Negative Power"
+    "modulo 5.5 2|1.5|Floating Point Modulo"
+)
+
+for test in "${edge_case_tests[@]}"; do
+    IFS='|' read -r expression expected name <<< "$test"
+    total_tests=$((total_tests + 1))
+    
+    if run_test "$expression" "$expected" "$name"; then
+        passed_tests=$((passed_tests + 1))
+    else
+        failed_tests=$((failed_tests + 1))
+    fi
+done
+
+echo ""
+echo "=== Test Summary ==="
+echo "Total tests: $total_tests"
+echo -e "Passed: ${GREEN}$passed_tests${NC}"
+echo -e "Failed: ${RED}$failed_tests${NC}"
+
+if [ $failed_tests -eq 0 ]; then
+    echo -e "${GREEN}All standard library tests passed!${NC}"
+    exit 0
+else
+    echo -e "${RED}Some standard library tests failed.${NC}"
+    exit 1
+fi 
\ No newline at end of file