package randomizer import "math/rand" type Random interface { Int() int } func init(){} type rndGenerator func(n int) int type Randomizer struct { fn rndGenerator } func NewRandomizer(fn rndGenerator) *Randomizer { return &Randomizer{fn: fn} } func (r *Randomizer) Int(n int) int { return r.fn(n) } func Rand(rand int) int { return randGen(rand) } func realRand(n int) int { return int(rand.Intn(n)) } func fakeRand(n int) func(_ int) int { return func(_ int)int { return n} } var randGen = NewRandomizer(realRand).Int func FakeRandomizer(n int) { randGen = NewRandomizer(fakeRand(n)).Int }