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