Signed-off-by: NotAShelf <raf@notashelf.dev> Change-Id: If0ed2dd4279abf155a8ddc678ca047736a6a6964
69 lines
2.1 KiB
Bash
Executable file
69 lines
2.1 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
set -e
|
|
|
|
echo ""
|
|
|
|
PLUGIN_PATH="$(pwd)/build/nix-ir-plugin.so"
|
|
BENCH_DIR="$(pwd)/tests/benchmark"
|
|
IRC_BIN="$(pwd)/build/nix-irc"
|
|
|
|
# Colors for output
|
|
GREEN='\033[0;32m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
run_benchmark() {
|
|
local name="$1"
|
|
local file="$2"
|
|
|
|
echo -e "${BLUE}Benchmark: $name${NC}"
|
|
echo "----------------------------------------"
|
|
|
|
# 1. Parse + Compile Time (nix-irc)
|
|
echo -n " Parse + Compile: "
|
|
local compile_output=$( (time "$IRC_BIN" "$file" /tmp/bench.nixir 2>&1) 2>&1)
|
|
local compile_time=$(echo "$compile_output" | grep "real" | awk '{print $2}')
|
|
echo -e "${GREEN}$compile_time${NC}"
|
|
|
|
# 2. IR Size
|
|
if [ -f /tmp/bench.nixir ]; then
|
|
local ir_size=$(stat -f%z /tmp/bench.nixir 2>/dev/null || stat -c%s /tmp/bench.nixir 2>/dev/null)
|
|
echo -e " IR Bundle Size: ${GREEN}${ir_size} bytes${NC}"
|
|
fi
|
|
|
|
# 3. Native Nix evaluation time
|
|
echo -n " Native Eval: "
|
|
local native_time=$( (time nix-instantiate --eval --strict "$file" >/dev/null 2>&1) 2>&1 | grep "real" | awk '{print $2}')
|
|
echo -e "${GREEN}$native_time${NC}"
|
|
|
|
# 4. With Plugin evaluation time
|
|
echo -n " Plugin Eval: "
|
|
local plugin_time=$( (time nix-instantiate --plugin-files "$PLUGIN_PATH" --eval --strict "$file" >/dev/null 2>&1) 2>&1 | grep "real" | awk '{print $2}')
|
|
echo -e "${GREEN}$plugin_time${NC}"
|
|
|
|
echo ""
|
|
}
|
|
|
|
echo "# Running benchmarks..."
|
|
echo ""
|
|
|
|
run_benchmark "Simple Expressions" "$BENCH_DIR/simple.nix"
|
|
run_benchmark "Medium Complexity" "$BENCH_DIR/medium.nix"
|
|
run_benchmark "Large/Complex" "$BENCH_DIR/large.nix"
|
|
|
|
# File size comparison
|
|
echo -e "${BLUE}File Size Comparison${NC}"
|
|
echo "----------------------------------------"
|
|
testdir=$(mktemp -d)
|
|
|
|
for f in "$BENCH_DIR"/*.nix; do
|
|
nixsize=$(stat -c%s "$f" 2>/dev/null || stat -f%z "$f" 2>/dev/null)
|
|
base=$(basename "$f" .nix)
|
|
irfile="${testdir}/${base}.nixir"
|
|
$IRC_BIN "$f" "$irfile" >/dev/null 2>&1
|
|
if [ -f "$irfile" ]; then
|
|
irsize=$(stat -c%s "$irfile" 2>/dev/null || stat -f%z "$irfile" 2>/dev/null)
|
|
ratio=$((irsize * 100 / nixsize))
|
|
echo " $base: ${nixsize}B => ${irsize}B (${ratio}% of source)"
|
|
fi
|
|
done
|