Files
go-jdenticon/benchmark/run-go-benchmark.sh
Kevin McIntyre d9e84812ff Initial release: Go Jdenticon library v0.1.0
- Core library with SVG and PNG generation
- CLI tool with generate and batch commands
- Cross-platform path handling for Windows compatibility
- Comprehensive test suite with integration tests
2026-01-03 23:41:48 -05:00

58 lines
2.0 KiB
Bash
Executable File

#!/bin/bash
# Run Go benchmark and save results
echo "=== Go jdenticon Performance Benchmark ==="
echo "Running Go benchmark..."
# Run the benchmark and capture output
BENCHMARK_OUTPUT=$(cd .. && go test -run="^$" -bench=BenchmarkGenerate64pxIcon -benchmem ./jdenticon 2>&1)
echo "$BENCHMARK_OUTPUT"
# Parse benchmark results
# Example output: BenchmarkGenerate64pxIcon-10 92173 12492 ns/op 13174 B/op 239 allocs/op
BENCHMARK_LINE=$(echo "$BENCHMARK_OUTPUT" | grep BenchmarkGenerate64pxIcon)
ITERATIONS=$(echo "$BENCHMARK_LINE" | awk '{print $2}')
NS_PER_OP=$(echo "$BENCHMARK_LINE" | awk '{print $3}')
BYTES_PER_OP=$(echo "$BENCHMARK_LINE" | awk '{print $5}')
ALLOCS_PER_OP=$(echo "$BENCHMARK_LINE" | awk '{print $7}')
# Convert nanoseconds to milliseconds and microseconds
TIME_PER_ICON_MS=$(echo "scale=4; $NS_PER_OP / 1000000" | bc | awk '{printf "%.4f", $0}')
TIME_PER_ICON_US=$(echo "scale=2; $NS_PER_OP / 1000" | bc | awk '{printf "%.2f", $0}')
ICONS_PER_SECOND=$(echo "scale=2; 1000000000 / $NS_PER_OP" | bc)
echo ""
echo "=== go-jdenticon Results ==="
echo "Iterations: $ITERATIONS"
echo "Time per icon: ${TIME_PER_ICON_MS} ms (${TIME_PER_ICON_US} μs)"
echo "Throughput: ${ICONS_PER_SECOND} icons/sec"
echo "Memory per icon: $BYTES_PER_OP bytes"
echo "Allocations per icon: $ALLOCS_PER_OP allocs"
# Create JSON results
cat > results-go.json << EOF
{
"implementation": "go-jdenticon",
"timestamp": "$(date -u +"%Y-%m-%dT%H:%M:%S.000Z")",
"goVersion": "$(go version | awk '{print $3}')",
"config": {
"iconSize": 64,
"numInputs": 1000,
"benchmarkIterations": $ITERATIONS
},
"performance": {
"nsPerOp": $NS_PER_OP,
"timePerIconMs": $TIME_PER_ICON_MS,
"timePerIconUs": $TIME_PER_ICON_US,
"iconsPerSecond": $ICONS_PER_SECOND
},
"memory": {
"bytesPerOp": $(echo "$BYTES_PER_OP" | sed 's/[^0-9]//g'),
"allocsPerOp": $(echo "$ALLOCS_PER_OP" | sed 's/[^0-9]//g')
}
}
EOF
echo ""
echo "Results saved to: results-go.json"