github.com/keltia/go-ipfs@v0.3.8-0.20150909044612-210793031c63/util/testutil/rand.go (about) 1 package testutil 2 3 import ( 4 "math/rand" 5 "sync" 6 "time" 7 ) 8 9 var SeededRand *rand.Rand 10 11 func init() { 12 SeededRand = NewSeededRand(time.Now().UTC().UnixNano()) 13 } 14 15 func NewSeededRand(seed int64) *rand.Rand { 16 src := rand.NewSource(seed) 17 return rand.New(&LockedRandSource{src: src}) 18 } 19 20 type LockedRandSource struct { 21 lk sync.Mutex 22 src rand.Source 23 } 24 25 func (r *LockedRandSource) Int63() (n int64) { 26 r.lk.Lock() 27 n = r.src.Int63() 28 r.lk.Unlock() 29 return 30 } 31 32 func (r *LockedRandSource) Seed(seed int64) { 33 r.lk.Lock() 34 r.src.Seed(seed) 35 r.lk.Unlock() 36 }