mirror of
https://github.com/johnkerl/miller.git
synced 2026-01-23 02:14:13 +00:00
42 lines
1 KiB
Go
42 lines
1 KiB
Go
// ================================================================
|
|
// Thinly wraps Go's rand library, with seed-function support
|
|
// ================================================================
|
|
|
|
package lib
|
|
|
|
import (
|
|
"math/rand"
|
|
"os"
|
|
"time"
|
|
)
|
|
|
|
// By default, Miller random numbers are different on every run.
|
|
var defaultSeed = time.Now().UnixNano() ^ int64(os.Getpid())
|
|
var source = rand.NewSource(defaultSeed)
|
|
var generator = rand.New(source)
|
|
|
|
// Users can request specific seeds if they want the same random-number
|
|
// sequence on each run.
|
|
func SeedRandom(seed int64) {
|
|
source = rand.NewSource(seed)
|
|
generator = rand.New(source)
|
|
}
|
|
|
|
func RandFloat64() float64 {
|
|
return generator.Float64()
|
|
}
|
|
func RandUint32() uint32 {
|
|
return generator.Uint32()
|
|
}
|
|
func RandInt63() int64 {
|
|
return generator.Int63()
|
|
}
|
|
func RandRange(lowInclusive, highExclusive int64) int64 {
|
|
if lowInclusive == highExclusive {
|
|
return lowInclusive
|
|
} else {
|
|
u := generator.Int63()
|
|
// TODO: test divide-by-zero cases in UT
|
|
return lowInclusive + (u % (highExclusive - lowInclusive))
|
|
}
|
|
}
|