44 lines
712 B
Go
44 lines
712 B
Go
package randomizer
|
|
|
|
import (
|
|
"fmt"
|
|
"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(numb int) int {
|
|
return func(numb int)int {
|
|
if n >= numb {
|
|
panic(fmt.Sprintf("%d Should not be superior of %d",n,numb))
|
|
}
|
|
return n
|
|
}
|
|
}
|
|
var randGen = NewRandomizer(realRand).Int
|
|
|
|
func FakeRandomizer(n int) {
|
|
randGen = NewRandomizer(fakeRand(n)).Int
|
|
}
|