Files
print_hej/run_all_tests.sh
Ein Anderssono 54d2fecee0 Initial commit: Pi calculation benchmark with 34 languages
- Added implementations for: bash, brainfuck, c, cpp, crystal, csharp, d, dart, elixir, erlang, fortran, go, haskell, java, javascript, julia, kotlin, objective-c, scala, typescript, lua, nim, odin, perl, php, python, r, ruby, rust, swift, zig, assembly, vimscript, wolfram
- All implementations use Machin's formula: π/4 = 4*arctan(1/5) - arctan(1/239)
- Build system with ./build.sh, test system with ./test.sh
- Performance testing with ./run_all.sh
- Comprehensive README.md explaining performance differences
- Test framework verifies correctness against known π values
2026-04-23 00:26:18 +02:00

320 lines
7.4 KiB
Bash

#!/bin/bash
# Run all unit tests for all languages
set -e
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
cd "$SCRIPT_DIR"
echo "========================================="
echo "Running Unit Tests for All Languages"
echo "========================================="
echo ""
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
NC='\033[0m' # No Color
total_passed=0
total_failed=0
total_languages=0
# List of all languages
LANGUAGES="bash brainfuck c cpp crystal csharp d dart elixir erlang fortran go haskell java javascript julia kotlin objective-c scala typescript lua nim odin perl php python r ruby rust swift zig assembly wolfram vimscript"
# Test each language
for lang in $LANGUAGES; do
echo "Testing $lang..."
if [ -f "$lang/cmd/test.sh" ]; then
cd "$lang"
if cmd/test.sh 2>&1; then
echo -e "${GREEN}${NC} $lang tests passed"
((total_passed++))
else
echo -e "${RED}${NC} $lang tests failed"
((total_failed++))
fi
cd "$SCRIPT_DIR"
else
echo "$lang tests skipped (no cmd/test.sh)"
fi
((total_languages++))
echo ""
done
echo "========================================="
echo "Test Summary"
echo "========================================="
echo "Total languages: $total_languages"
echo -e "Passed: ${GREEN}$total_passed${NC}"
echo -e "Failed: ${RED}$total_failed${NC}"
if [ $total_failed -eq 0 ]; then
echo -e "${GREEN}✓ All tests passed!${NC}"
exit 0
else
echo -e "${RED}✗ Some tests failed${NC}"
exit 1
fi
fi
((total_languages++))
echo ""
# Go
echo "Testing Go..."
cd /Users/einand/Code/test/go
if go test -v 2>&1 | grep -E "PASS"; then
echo "✓ Go tests passed"
((total_passed++))
else
echo "✗ Go tests failed"
((total_failed++))
fi
((total_languages++))
echo ""
# Java
echo "Testing Java..."
cd /Users/einand/Code/test/java
if [ -f PiTest.class ] || javac -cp .:junit-4.13.2.jar:hamcrest-core-1.3.jar PiTest.java 2>/dev/null; then
if java -cp .:junit-4.13.2.jar:hamcrest-core-1.3.jar org.junit.runner.JUnitCore PiTest 2>&1 | grep -E "OK"; then
echo "✓ Java tests passed"
((total_passed++))
else
echo "✗ Java tests failed"
((total_failed++))
fi
else
echo "⊘ Java tests skipped (JUnit not available)"
fi
((total_languages++))
echo ""
# C
echo "Testing C..."
cd /Users/einand/Code/test/c
if gcc -o pi_test pi_test.c 2>/dev/null && ./pi_test 2>&1 | grep -E "All tests passed"; then
echo "✓ C tests passed"
((total_passed++))
else
echo "✗ C tests failed"
((total_failed++))
fi
((total_languages++))
echo ""
# C++
echo "Testing C++..."
cd /Users/einand/Code/test/cpp
if g++ -o pi_test pi_test.cpp -lgtest -lgtest_main -pthread 2>/dev/null && ./pi_test 2>&1 | grep -E "PASSED"; then
echo "✓ C++ tests passed"
((total_passed++))
else
echo "⊘ C++ tests skipped (Google Test not available)"
fi
((total_languages++))
echo ""
# Rust
echo "Testing Rust..."
cd /Users/einand/Code/test/rust
if cargo test 2>&1 | grep -E "test result: ok"; then
echo "✓ Rust tests passed"
((total_passed++))
else
echo "✗ Rust tests failed"
((total_failed++))
fi
((total_languages++))
echo ""
# Ruby
echo "Testing Ruby..."
cd /Users/einand/Code/test/ruby
if ruby test_pi.rb 2>&1 | grep -E "tests,.*assertions,.*failures,.*errors"; then
echo "✓ Ruby tests passed"
((total_passed++))
else
echo "✗ Ruby tests failed"
((total_failed++))
fi
((total_languages++))
echo ""
# PHP
echo "Testing PHP..."
cd /Users/einand/Code/test/php
if [ -f vendor/bin/phpunit ] || composer install --no-interaction 2>/dev/null; then
if php vendor/bin/phpunit PiTest.php 2>&1 | grep -E "OK"; then
echo "✓ PHP tests passed"
((total_passed++))
else
echo "✗ PHP tests failed"
((total_failed++))
fi
else
echo "⊘ PHP tests skipped (PHPUnit not available)"
fi
((total_languages++))
echo ""
# Swift
echo "Testing Swift..."
cd /Users/einand/Code/test/swift
if swift test 2>&1 | grep -E "Test Suite"; then
echo "✓ Swift tests passed"
((total_passed++))
else
echo "✗ Swift tests failed"
((total_failed++))
fi
((total_languages++))
echo ""
# D
echo "Testing D..."
cd /Users/einand/Code/test/d
if ldc2 -unittest -run pi_test.d 2>&1 | grep -E "All tests passed"; then
echo "✓ D tests passed"
((total_passed++))
else
echo "✗ D tests failed"
((total_failed++))
fi
((total_languages++))
echo ""
# Nim
echo "Testing Nim..."
cd /Users/einand/Code/test/nim
if nim c -r test_pi.py 2>&1 | grep -E "tests passed"; then
echo "✓ Nim tests passed"
((total_passed++))
else
echo "✗ Nim tests failed"
((total_failed++))
fi
((total_languages++))
echo ""
# Crystal
echo "Testing Crystal..."
cd /Users/einand/Code/test/crystal
if crystal spec spec/pi_spec.cr 2>&1 | grep -E "examples,.*failures"; then
echo "✓ Crystal tests passed"
((total_passed++))
else
echo "✗ Crystal tests failed"
((total_failed++))
fi
((total_languages++))
echo ""
# Haskell
echo "Testing Haskell..."
cd /Users/einand/Code/test/haskell
if ghc -o pi_test PiTest.hs 2>/dev/null && ./pi_test 2>&1 | grep -E "Cases:.*Tried:.*Errors: 0"; then
echo "✓ Haskell tests passed"
((total_passed++))
else
echo "⊘ Haskell tests skipped (HUnit not available)"
fi
((total_languages++))
echo ""
# Erlang
echo "Testing Erlang..."
cd /Users/einand/Code/test/erlang
if erlc pi_test.erl 2>/dev/null && erl -noshell -eval "eunit:test(pi_test, [verbose])" -s init stop 2>&1 | grep -E "All.*tests passed"; then
echo "✓ Erlang tests passed"
((total_passed++))
else
echo "✗ Erlang tests failed"
((total_failed++))
fi
((total_languages++))
echo ""
# Perl
echo "Testing Perl..."
cd /Users/einand/Code/test/perl
if perl test_pi.t 2>&1 | grep -E "All tests successful"; then
echo "✓ Perl tests passed"
((total_passed++))
else
echo "✗ Perl tests failed"
((total_failed++))
fi
((total_languages++))
echo ""
# Lua
echo "Testing Lua..."
cd /Users/einand/Code/test/lua
if busted spec/pi_spec.lua 2>&1 | grep -E "successes"; then
echo "✓ Lua tests passed"
((total_passed++))
else
echo "⊘ Lua tests skipped (Busted not available)"
fi
((total_languages++))
echo ""
# Zig
echo "Testing Zig..."
cd /Users/einand/Code/test/zig
if zig test pi_test.zig 2>&1 | grep -E "All.*tests passed"; then
echo "✓ Zig tests passed"
((total_passed++))
else
echo "✗ Zig tests failed"
((total_failed++))
fi
((total_languages++))
echo ""
# Odin
echo "Testing Odin..."
cd /Users/einand/Code/test/odin
if odin test pi_test.odin 2>&1 | grep -E "passed"; then
echo "✓ Odin tests passed"
((total_passed++))
else
echo "✗ Odin tests failed"
((total_failed++))
fi
((total_languages++))
echo ""
# C#
echo "Testing C#..."
cd /Users/einand/Code/test/csharp
if dotnet test 2>&1 | grep -E "Passed"; then
echo "✓ C# tests passed"
((total_passed++))
else
echo "✗ C# tests failed"
((total_failed++))
fi
((total_languages++))
echo ""
# Summary
echo "========================================="
echo "Summary"
echo "========================================="
echo "Languages tested: $total_languages"
echo "Tests passed: $total_passed"
echo "Tests failed: $total_failed"
echo "Tests skipped: $((total_languages - total_passed - total_failed))"
echo ""
if [ $total_failed -eq 0 ]; then
echo "✓ All tests passed!"
exit 0
else
echo "✗ Some tests failed"
exit 1
fi