1package gen 2 3import ( 4 "math/rand" 5) 6 7type floatRandomValuesSequence struct { 8 r *rand.Rand 9 a float64 10 b float64 11} 12 13func NewFloatRandomValuesSequence(min, max float64, r *rand.Rand) FloatValuesSequence { 14 return &floatRandomValuesSequence{r: r, a: max - min, b: min} 15} 16 17func (g *floatRandomValuesSequence) Reset() {} 18 19func (g *floatRandomValuesSequence) Write(vs []float64) { 20 var ( 21 a = g.a 22 b = g.b 23 ) 24 for i := 0; i < len(vs); i++ { 25 vs[i] = a*g.r.Float64() + b // ax + b 26 } 27} 28 29type integerRandomValuesSequence struct { 30 r *rand.Zipf 31} 32 33// NewIntegerZipfValuesSequence produces int64 values using a Zipfian distribution 34// described by s. 35func NewIntegerZipfValuesSequence(s *FieldIntegerZipfSource) IntegerValuesSequence { 36 r := rand.New(rand.NewSource(s.Seed)) 37 return &integerRandomValuesSequence{r: rand.NewZipf(r, s.S, s.V, s.IMAX)} 38} 39 40func (g *integerRandomValuesSequence) Reset() {} 41 42func (g *integerRandomValuesSequence) Write(vs []int64) { 43 for i := 0; i < len(vs); i++ { 44 vs[i] = int64(g.r.Uint64()) 45 } 46} 47