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

// This file prints execution times for the Mul benchmark
// given different Karatsuba thresholds. The result may be
// used to manually fine-tune the threshold constant. The
// results are somewhat fragile; use repeated runs to get
// a clear picture.

// Usage: gotest -calibrate

package big

import (
	"flag"
	"fmt"
	"testing"
	"time"
)

var calibrate = flag.Bool("calibrate", false, "run calibration test")

// measure returns the time to run f
func measure(f func()) int64 {
	const N = 100
	start := time.Nanoseconds()
	for i := N; i > 0; i-- {
		f()
	}
	stop := time.Nanoseconds()
	return (stop - start) / N
}

func computeThresholds() {
	fmt.Printf("Multiplication times for varying Karatsuba thresholds\n")
	fmt.Printf("(run repeatedly for good results)\n")

	// determine Tk, the work load execution time using basic multiplication
	karatsubaThreshold = 1e9 // disable karatsuba
	Tb := measure(benchmarkMulLoad)
	fmt.Printf("Tb = %dns\n", Tb)

	// thresholds
	n := 8 // any lower values for the threshold lead to very slow multiplies
	th1 := -1
	th2 := -1

	var deltaOld int64
	for count := -1; count != 0; count-- {
		// determine Tk, the work load execution time using Karatsuba multiplication
		karatsubaThreshold = n // enable karatsuba
		Tk := measure(benchmarkMulLoad)

		// improvement over Tb
		delta := (Tb - Tk) * 100 / Tb

		fmt.Printf("n = %3d  Tk = %8dns  %4d%%", n, Tk, delta)

		// determine break-even point
		if Tk < Tb && th1 < 0 {
			th1 = n
			fmt.Print("  break-even point")
		}

		// determine diminishing return
		if 0 < delta && delta < deltaOld && th2 < 0 {
			th2 = n
			fmt.Print("  diminishing return")
		}
		deltaOld = delta

		fmt.Println()

		// trigger counter
		if th1 >= 0 && th2 >= 0 && count < 0 {
			count = 20 // this many extra measurements after we got both thresholds
		}

		n++
	}
}

func TestCalibrate(t *testing.T) {
	if *calibrate {
		computeThresholds()
	}
}
