#!/bin/sh
# Copyright 2011 The Go Authors.  All rights reserved.
# Use of this source code is governed by a BSD-style
# license that can be found in the LICENSE file.

case "$1" in
-*)	
	echo 'usage: benchcmp old.txt new.txt' >&2
	echo >&2
	echo 'Each input file should be gotest -bench output.' >&2
	echo 'Benchcmp compares the first and last for each benchmark.' >&2
	exit 2
esac

awk '
BEGIN {
	n = 0
}

$1 ~ /Benchmark/ && $4 == "ns/op" {
	if(old[$1]) {
		if(!saw[$1]++) {
			name[n++] = $1
			if(length($1) > len)
				len = length($1)
		}
		new[$1] = $3
		if($6 == "MB/s")
			newmb[$1] = $5
	} else {
		old[$1] = $3
		if($6 = "MB/s")
			oldmb[$1] = $5
	}
}

END {
	if(n == 0) {
		print "benchcmp: no repeated benchmarks" >"/dev/stderr"
		exit 1
	}

	printf("%-*s %12s %12s  %7s\n", len, "benchmark", "old ns/op", "new ns/op", "delta")

	# print ns/op
	for(i=0; i<n; i++) {
		what = name[i]
		printf("%-*s %12d %12d  %6s%%\n", len, what, old[what], new[what],
			sprintf("%+.2f", 100*new[what]/old[what]-100))
	}

	# print mb/s
	anymb = 0
	for(i=0; i<n; i++) {
		what = name[i]
		if(!(what in newmb))
			continue
		if(anymb++ == 0)
			printf("\n%-*s %12s %12s  %7s\n", len, "benchmark", "old MB/s", "new MB/s", "speedup")
		printf("%-*s %12s %12s  %6sx\n", len, what,
			sprintf("%.2f", oldmb[what]),
			sprintf("%.2f", newmb[what]),
			sprintf("%.2f", newmb[what]/oldmb[what]))
	}
}
' "$@"
