#!/usr/bin/env bash
set -euo pipefail
export TZ=UTC
out=${1:-out}
mkdir -p "$out"
{ go version; go env GOOS GOARCH CGO_ENABLED GOEXPERIMENT; uname -sr; grep -m1 'model name' /proc/cpuinfo; } > "$out/environment.txt"
for tag in '' optimized; do
 go test -tags="$tag" .
 go test -race -tags="$tag" .
 go vet -tags="$tag" .
done > "$out/test.txt"
go test -c -o "$out/base.test" .
go test -c -tags=optimized -o "$out/optimized.test" .
: > "$out/base.txt"
: > "$out/optimized.txt"
for i in $(seq 1 12); do
 if ((i % 2)); then order='base optimized'; else order='optimized base'; fi
 for name in $order; do
  GOMAXPROCS=1 "$out/$name.test" -test.run='^$' -test.bench='^BenchmarkBuild$' -test.benchtime=100ms -test.cpu=1 >> "$out/$name.txt"
 done
done
GOMAXPROCS=1 "$out/base.test" -test.run='^$' -test.bench='Benchmark(Elided|Kept)$' -test.benchtime=100ms -test.count=3 -test.cpu=1 > "$out/elision.txt"
go tool objdump -s 'example.com/benchlab.BenchmarkElided' "$out/base.test" > "$out/elided-assembly.txt"
go test -run='^$' -bench='^BenchmarkBuild$' -benchmem -benchtime=100ms -cpu=1 > "$out/benchmem.txt"
