- 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
58 lines
2.0 KiB
Bash
Executable File
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" |