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  }