// 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)
	}
}
