// 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.

package main

import (
	"flag"
	"os"
	"runtime"
	"testing"

	fast "./fast"
	slow "./slow"
)

var buf = make([]byte, 1048576)

func BenchmarkFastNonASCII(b *testing.B) {
	for i := 0; i < b.N; i++ {
		fast.NonASCII(buf, 0)
	}
}

func BenchmarkSlowNonASCII(b *testing.B) {
	for i := 0; i < b.N; i++ {
		slow.NonASCII(buf, 0)
	}
}

func main() {
	os.Args = []string{os.Args[0], "-test.benchtime=100ms"}
	flag.Parse()

	rslow := testing.Benchmark(BenchmarkSlowNonASCII)
	rfast := testing.Benchmark(BenchmarkFastNonASCII)
	tslow := rslow.NsPerOp()
	tfast := rfast.NsPerOp()

	// Optimization should be good for at least 2x, but be forgiving.
	// On the ARM simulator we see closer to 1.5x.
	speedup := float64(tslow) / float64(tfast)
	want := 1.8
	if runtime.GOARCH == "arm" {
		want = 1.3
	}
	if speedup < want {
		// TODO(rsc): doesn't work on linux-amd64 or darwin-amd64 builders, nor on
		// a Lenovo x200 (linux-amd64) laptop.
		// println("fast:", tfast, "slow:", tslow, "speedup:", speedup, "want:", want)
		// println("not fast enough")
		// os.Exit(1)
	}
}
