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

package rand

import (
	"math";
	"fmt";
	"os";
	"testing";
)

const (
	numTestSamples = 10000;
)

type statsResults struct {
	mean		float64;
	stddev		float64;
	closeEnough	float64;
	maxError	float64;
}

func max(a, b float64) float64 {
	if a > b {
		return a;
	}
	return b;
}

func nearEqual(a, b, closeEnough, maxError float64) bool {
	absDiff := math.Fabs(a-b);
	if absDiff < closeEnough {	// Necessary when one value is zero and one value is close to zero.
		return true;
	}
	return absDiff / max(math.Fabs(a), math.Fabs(b)) < maxError;
}

var testSeeds = []int64{1, 1754801282, 1698661970, 1550503961}

// checkSimilarDistribution returns success if the mean and stddev of the
// two statsResults are similar.
func (this *statsResults) checkSimilarDistribution(expected *statsResults) os.Error {
	if !nearEqual(this.mean, expected.mean, expected.closeEnough, expected.maxError) {
		s := fmt.Sprintf("mean %v != %v (allowed error %v, %v)", this.mean, expected.mean, expected.closeEnough, expected.maxError);
		fmt.Println(s);
		return os.ErrorString(s);
	}
	if !nearEqual(this.stddev, expected.stddev, 0, expected.maxError) {
		s := fmt.Sprintf("stddev %v != %v (allowed error %v, %v)", this.stddev, expected.stddev, expected.closeEnough, expected.maxError);
		fmt.Println(s);
		return os.ErrorString(s);
	}
	return nil;
}

func getStatsResults(samples []float64) *statsResults {
	res := new(statsResults);
	var sum float64;
	for i := range samples {
		sum += samples[i];
	}
	res.mean = sum/float64(len(samples));
	var devsum float64;
	for i := range samples {
		devsum += math.Pow(samples[i] - res.mean, 2);
	}
	res.stddev = math.Sqrt(devsum/float64(len(samples)));
	return res;
}

func checkSampleDistribution(t *testing.T, samples []float64, expected *statsResults) {
	actual := getStatsResults(samples);
	err := actual.checkSimilarDistribution(expected);
	if err != nil {
		t.Errorf(err.String());
	}
}

func checkSampleSliceDistributions(t *testing.T, samples []float64, nslices int, expected *statsResults) {
	chunk := len(samples)/nslices;
	for i := 0; i < nslices; i++ {
		low := i*chunk;
		var high int;
		if i == nslices-1 {
			high = len(samples)-1;
		} else {
			high = (i+1)*chunk;
		}
		checkSampleDistribution(t, samples[low:high], expected);
	}
}

//
// Normal distribution tests
//

func generateNormalSamples(nsamples int, mean, stddev float64, seed int64) []float64 {
	r := New(NewSource(seed));
	samples := make([]float64, nsamples);
	for i := range samples {
		samples[i] = r.NormFloat64() * stddev + mean;
	}
	return samples;
}

func testNormalDistribution(t *testing.T, nsamples int, mean, stddev float64, seed int64) {
	//fmt.Printf("testing nsamples=%v mean=%v stddev=%v seed=%v\n", nsamples, mean, stddev, seed);

	samples := generateNormalSamples(nsamples, mean, stddev, seed);
	errorScale := max(1.0, stddev);	// Error scales with stddev
	expected := &statsResults{mean, stddev, 0.10 * errorScale, 0.08 * errorScale};

	// Make sure that the entire set matches the expected distribution.
	checkSampleDistribution(t, samples, expected);

	// Make sure that each half of the set matches the expected distribution.
	checkSampleSliceDistributions(t, samples, 2, expected);

	// Make sure that each 7th of the set matches the expected distribution.
	checkSampleSliceDistributions(t, samples, 7, expected);
}

// Actual tests

func TestStandardNormalValues(t *testing.T) {
	for _, seed := range testSeeds {
		testNormalDistribution(t, numTestSamples, 0, 1, seed);
	}
}

func TestNonStandardNormalValues(t *testing.T) {
	for sd := float64(0.5); sd < 1000; sd *= 2 {
		for m := float64(0.5); m < 1000; m *= 2 {
			for _, seed := range testSeeds {
				testNormalDistribution(t, numTestSamples, m, sd, seed);
			}
		}
	}
}

//
// Exponential distribution tests
//

func generateExponentialSamples(nsamples int, rate float64, seed int64) []float64 {
	r := New(NewSource(seed));
	samples := make([]float64, nsamples);
	for i := range samples {
		samples[i] = r.ExpFloat64() / rate;
	}
	return samples;
}

func testExponentialDistribution(t *testing.T, nsamples int, rate float64, seed int64) {
	//fmt.Printf("testing nsamples=%v rate=%v seed=%v\n", nsamples, rate, seed);

	mean := 1/rate;
	stddev := mean;

	samples := generateExponentialSamples(nsamples, rate, seed);
	errorScale := max(1.0, 1/rate);	// Error scales with the inverse of the rate
	expected := &statsResults{mean, stddev, 0.10 * errorScale, 0.20 * errorScale};

	// Make sure that the entire set matches the expected distribution.
	checkSampleDistribution(t, samples, expected);

	// Make sure that each half of the set matches the expected distribution.
	checkSampleSliceDistributions(t, samples, 2, expected);

	// Make sure that each 7th of the set matches the expected distribution.
	checkSampleSliceDistributions(t, samples, 7, expected);
}

// Actual tests

func TestStandardExponentialValues(t *testing.T) {
	for _, seed := range testSeeds {
		testExponentialDistribution(t, numTestSamples, 1, seed);
	}
}

func TestNonStandardExponentialValues(t *testing.T) {
	for rate := float64(0.05); rate < 10; rate *= 2 {
		for _, seed := range testSeeds {
			testExponentialDistribution(t, numTestSamples, rate, seed);
		}
	}
}

//
// Table generation tests
//

func initNorm() (testKn []uint32, testWn, testFn []float32) {
	const m1 = 1<<31;
	var (
		dn	float64	= rn;
		tn		= dn;
		vn	float64	= 9.91256303526217e-3;
	)

	testKn = make([]uint32, 128);
	testWn = make([]float32, 128);
	testFn = make([]float32, 128);

	q := vn / math.Exp(-0.5 * dn * dn);
	testKn[0] = uint32((dn/q)*m1);
	testKn[1] = 0;
	testWn[0] = float32(q/m1);
	testWn[127] = float32(dn/m1);
	testFn[0] = 1.0;
	testFn[127] = float32(math.Exp(-0.5 * dn * dn));
	for i := 126; i >= 1; i-- {
		dn = math.Sqrt(-2.0 * math.Log(vn/dn + math.Exp(-0.5 * dn * dn)));
		testKn[i+1] = uint32((dn/tn)*m1);
		tn = dn;
		testFn[i] = float32(math.Exp(-0.5 * dn * dn));
		testWn[i] = float32(dn/m1);
	}
	return;
}

func initExp() (testKe []uint32, testWe, testFe []float32) {
	const m2 = 1<<32;
	var (
		de	float64	= re;
		te		= de;
		ve	float64	= 3.9496598225815571993e-3;
	)

	testKe = make([]uint32, 256);
	testWe = make([]float32, 256);
	testFe = make([]float32, 256);

	q := ve / math.Exp(-de);
	testKe[0] = uint32((de/q)*m2);
	testKe[1] = 0;
	testWe[0] = float32(q/m2);
	testWe[255] = float32(de/m2);
	testFe[0] = 1.0;
	testFe[255] = float32(math.Exp(-de));
	for i := 254; i >= 1; i-- {
		de = -math.Log(ve/de + math.Exp(-de));
		testKe[i+1] = uint32((de/te)*m2);
		te = de;
		testFe[i] = float32(math.Exp(-de));
		testWe[i] = float32(de/m2);
	}
	return;
}

// compareUint32Slices returns the first index where the two slices
// disagree, or <0 if the lengths are the same and all elements
// are identical.
func compareUint32Slices(s1, s2 []uint32) int {
	if len(s1) != len(s2) {
		if len(s1) > len(s2) {
			return len(s2)+1;
		}
		return len(s1)+1;
	}
	for i := range s1 {
		if s1[i] != s2[i] {
			return i;
		}
	}
	return -1;
}

// compareFloat32Slices returns the first index where the two slices
// disagree, or <0 if the lengths are the same and all elements
// are identical.
func compareFloat32Slices(s1, s2 []float32) int {
	if len(s1) != len(s2) {
		if len(s1) > len(s2) {
			return len(s2)+1;
		}
		return len(s1)+1;
	}
	for i := range s1 {
		if !nearEqual(float64(s1[i]), float64(s2[i]), 0, 1e-7) {
			return i;
		}
	}
	return -1;
}

func TestNormTables(t *testing.T) {
	testKn, testWn, testFn := initNorm();
	if i := compareUint32Slices(kn[0:len(kn)], testKn); i >= 0 {
		t.Errorf("kn disagrees at index %v; %v != %v\n", i, kn[i], testKn[i]);
	}
	if i := compareFloat32Slices(wn[0:len(wn)], testWn); i >= 0 {
		t.Errorf("wn disagrees at index %v; %v != %v\n", i, wn[i], testWn[i]);
	}
	if i := compareFloat32Slices(fn[0:len(fn)], testFn); i >= 0 {
		t.Errorf("fn disagrees at index %v; %v != %v\n", i, fn[i], testFn[i]);
	}
}

func TestExpTables(t *testing.T) {
	testKe, testWe, testFe := initExp();
	if i := compareUint32Slices(ke[0:len(ke)], testKe); i >= 0 {
		t.Errorf("ke disagrees at index %v; %v != %v\n", i, ke[i], testKe[i]);
	}
	if i := compareFloat32Slices(we[0:len(we)], testWe); i >= 0 {
		t.Errorf("we disagrees at index %v; %v != %v\n", i, we[i], testWe[i]);
	}
	if i := compareFloat32Slices(fe[0:len(fe)], testFe); i >= 0 {
		t.Errorf("fe disagrees at index %v; %v != %v\n", i, fe[i], testFe[i]);
	}
}
