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

// +build ignore

// This program computes the value of rng_cooked in rng.go,
// which is used for seeding all instances of rand.Source.
// a 64bit and a 63bit version of the array is printed to
// the standard output.

package main

import "fmt"

const (
	length = 607
	tap    = 273
	mask   = (1 << 63) - 1
	a      = 48271
	m      = (1 << 31) - 1
	q      = 44488
	r      = 3399
)

var (
	rngVec          [length]int64
	rngTap, rngFeed int
)

func seedrand(x int32) int32 {
	hi := x / q
	lo := x % q
	x = a*lo - r*hi
	if x < 0 {
		x += m
	}
	return x
}

func srand(seed int32) {
	rngTap = 0
	rngFeed = length - tap
	seed %= m
	if seed < 0 {
		seed += m
	} else if seed == 0 {
		seed = 89482311
	}
	x := seed
	for i := -20; i < length; i++ {
		x = seedrand(x)
		if i >= 0 {
			var u int64
			u = int64(x) << 20
			x = seedrand(x)
			u ^= int64(x) << 10
			x = seedrand(x)
			u ^= int64(x)
			rngVec[i] = u
		}
	}
}

func vrand() int64 {
	rngTap--
	if rngTap < 0 {
		rngTap += length
	}
	rngFeed--
	if rngFeed < 0 {
		rngFeed += length
	}
	x := (rngVec[rngFeed] + rngVec[rngTap])
	rngVec[rngFeed] = x
	return x
}

func main() {
	srand(1)
	for i := uint64(0); i < 7.8e12; i++ {
		vrand()
	}
	fmt.Printf("rngVec after 7.8e12 calls to vrand:\n%#v\n", rngVec)
	for i := range rngVec {
		rngVec[i] &= mask
	}
	fmt.Printf("lower 63bit of rngVec after 7.8e12 calls to vrand:\n%#v\n", rngVec)
}
