Implement two-step measurement method: run_fast.sh for accurate timing without overhead, remove Vimscript and Wolfram, run all tests
This commit is contained in:
Executable
+152
@@ -0,0 +1,152 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Run all pi calculation programs and measure ONLY execution time
|
||||
# No overhead from measurement tools - gives accurate timing
|
||||
|
||||
# Don't exit on error - continue with next program
|
||||
# set -e
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
cd "$SCRIPT_DIR"
|
||||
|
||||
# Check if argument provided
|
||||
if [ $# -eq 0 ]; then
|
||||
echo "Usage: $0 <decimaler>"
|
||||
echo "Example: $0 100"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
DECIMALS=$1
|
||||
|
||||
# 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 verify result against facit
|
||||
verify() {
|
||||
local result="$1"
|
||||
local decimals="$2"
|
||||
local expected=$(head -c $((decimals + 2)) facit.txt)
|
||||
|
||||
if [ "$result" = "$expected" ]; then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
echo "=== Pi-beräkning med $DECIMALS decimaler (SNABBTEST - ingen overhead) ==="
|
||||
echo ""
|
||||
|
||||
# Array to store results
|
||||
declare -a results
|
||||
|
||||
# Run each program 4 times, discard first run (warmup), take average of last 3
|
||||
run_program() {
|
||||
local name="$1"
|
||||
shift
|
||||
|
||||
printf "%-12s " "$name"
|
||||
|
||||
local total_time=0
|
||||
local success_count=0
|
||||
local result
|
||||
|
||||
# Run 4 times, discard first run (warmup)
|
||||
for i in 1 2 3 4; do
|
||||
local start=$(date +%s%N)
|
||||
|
||||
# Run program directly (no measurement overhead)
|
||||
result=$("$@" 2>/dev/null)
|
||||
local exit_code=$?
|
||||
|
||||
local end=$(date +%s%N)
|
||||
local elapsed=$(( (end - start) / 1000000 ))
|
||||
|
||||
if [ $exit_code -eq 0 ]; then
|
||||
# Get result for verification
|
||||
if [ "$i" -gt 1 ]; then
|
||||
# Only count runs 2-4 for averages
|
||||
total_time=$((total_time + elapsed))
|
||||
|
||||
if verify "$result" "$DECIMALS"; then
|
||||
((success_count++))
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo -e "${RED}ERROR${NC}"
|
||||
results+=("999999 $name ERROR")
|
||||
return
|
||||
fi
|
||||
done
|
||||
|
||||
# Calculate average
|
||||
local avg_time=$((total_time / 3))
|
||||
|
||||
if [ $success_count -eq 3 ]; then
|
||||
echo -e "${GREEN}SUCCESS${NC} $avg_time ms"
|
||||
results+=("$avg_time $name SUCCESS")
|
||||
else
|
||||
echo -e "${RED}FAILED${NC} $avg_time ms"
|
||||
results+=("$avg_time $name FAILED")
|
||||
fi
|
||||
}
|
||||
|
||||
# Run all programs (no timeouts)
|
||||
run_program Assembly assembly/bin/print_hej "$DECIMALS"
|
||||
run_program Bash bash/bin/print_hej "$DECIMALS"
|
||||
run_program Brainfuck brainfuck/bin/print_hej "$DECIMALS"
|
||||
run_program C c/bin/print_hej "$DECIMALS"
|
||||
run_program C++ cpp/bin/print_hej "$DECIMALS"
|
||||
run_program Crystal crystal/bin/print_hej "$DECIMALS"
|
||||
run_program CSharp csharp/bin/print_hej "$DECIMALS"
|
||||
run_program D d/bin/print_hej "$DECIMALS"
|
||||
run_program Dart dart/bin/print_hej "$DECIMALS"
|
||||
run_program Elixir elixir/bin/print_hej "$DECIMALS"
|
||||
run_program Erlang erlang/bin/print_hej "$DECIMALS"
|
||||
run_program Fortran fortran/bin/print_hej "$DECIMALS"
|
||||
run_program Go go/bin/print_hej "$DECIMALS"
|
||||
run_program Haskell haskell/bin/print_hej "$DECIMALS"
|
||||
run_program Java java/bin/print_hej "$DECIMALS"
|
||||
run_program JavaScript javascript/bin/print_hej "$DECIMALS"
|
||||
run_program Julia julia/bin/print_hej "$DECIMALS"
|
||||
run_program Kotlin kotlin/bin/print_hej "$DECIMALS"
|
||||
run_program Lua lua/bin/print_hej "$DECIMALS"
|
||||
run_program Nim nim/bin/print_hej "$DECIMALS"
|
||||
run_program Objective-C objective-c/bin/print_hej "$DECIMALS"
|
||||
run_program Odin odin/bin/print_hej "$DECIMALS"
|
||||
run_program Perl perl/bin/print_hej "$DECIMALS"
|
||||
run_program PHP php/bin/print_hej "$DECIMALS"
|
||||
run_program Python python/bin/print_hej "$DECIMALS"
|
||||
run_program R r/bin/print_hej "$DECIMALS"
|
||||
run_program Ruby ruby/bin/print_hej "$DECIMALS"
|
||||
run_program Rust rust/bin/print_hej "$DECIMALS"
|
||||
run_program Scala scala/bin/print_hej "$DECIMALS"
|
||||
run_program Swift swift/bin/print_hej "$DECIMALS"
|
||||
run_program TypeScript typescript/bin/print_hej "$DECIMALS"
|
||||
run_program Zig zig/bin/print_hej "$DECIMALS"
|
||||
|
||||
# Sort results by time (numerically)
|
||||
echo ""
|
||||
echo "=== RESULTAT (sorterat efter tid) ==="
|
||||
printf "%-12s %s\n" "Språk" "Tid (ms)"
|
||||
echo "-----------------------------------"
|
||||
|
||||
# Sort numerically by time
|
||||
printf '%s\n' "${results[@]}" | sort -n -k1 | while read result; do
|
||||
time=$(echo "$result" | awk '{print $1}')
|
||||
name=$(echo "$result" | awk '{print $2}')
|
||||
status=$(echo "$result" | awk '{print $3}')
|
||||
|
||||
if [ "$status" = "SUCCESS" ]; then
|
||||
printf "%-12s %s\n" "$name" "$time"
|
||||
else
|
||||
printf "%-12s %s (FAILED)\n" "$name" "$time"
|
||||
fi
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "=== Klart ==="
|
||||
Reference in New Issue
Block a user