mirror of https://github.com/golang/go.git
[dev.fuzz] internal/fuzz: allow setting pcg seed via GODEBUG
Format is "fuzzseed=123". Change-Id: Idb314270c8fd4307149c8503e13424b653ec4b0a Reviewed-on: https://go-review.googlesource.com/c/go/+/313651 Trust: Roland Shoemaker <roland@golang.org> Trust: Katie Hockman <katie@golang.org> Run-TryBot: Roland Shoemaker <roland@golang.org> Run-TryBot: Katie Hockman <katie@golang.org> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Katie Hockman <katie@golang.org>
This commit is contained in:
parent
7a7eee8ab7
commit
0b5470f31d
|
|
@ -6,6 +6,9 @@ package fuzz
|
|||
|
||||
import (
|
||||
"math/bits"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
)
|
||||
|
|
@ -28,10 +31,27 @@ type pcgRand struct {
|
|||
inc uint64
|
||||
}
|
||||
|
||||
func godebugSeed() *int {
|
||||
debug := strings.Split(os.Getenv("GODEBUG"), ",")
|
||||
for _, f := range debug {
|
||||
if strings.HasPrefix(f, "fuzzseed=") {
|
||||
seed, err := strconv.Atoi(strings.TrimPrefix(f, "fuzzseed="))
|
||||
if err != nil {
|
||||
panic("malformed fuzzseed")
|
||||
}
|
||||
return &seed
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// newPcgRand generates a new, seeded Rand, ready for use.
|
||||
func newPcgRand() *pcgRand {
|
||||
r := new(pcgRand)
|
||||
now := uint64(time.Now().UnixNano())
|
||||
if seed := godebugSeed(); seed != nil {
|
||||
now = uint64(*seed)
|
||||
}
|
||||
inc := atomic.AddUint64(&globalInc, 1)
|
||||
r.state = now
|
||||
r.inc = (inc << 1) | 1
|
||||
|
|
|
|||
Loading…
Reference in New Issue