From fe16e2325c7d321192529f7cbdee95decdc141a4 Mon Sep 17 00:00:00 2001 From: Bel LaPointe Date: Thu, 2 Mar 2023 09:31:40 -0700 Subject: [PATCH] random accepts generator --- src/device/input/input.go | 2 +- src/device/input/random.go | 17 +++++++++++------ src/device/input/random_test.go | 2 +- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/device/input/input.go b/src/device/input/input.go index 6ca127d..3619a11 100644 --- a/src/device/input/input.go +++ b/src/device/input/input.go @@ -5,5 +5,5 @@ type Input interface { } func New() Input { - return NewRandom('a', 'g') + return NewRandom(RandomCharFromRange('a', 'g')) } diff --git a/src/device/input/random.go b/src/device/input/random.go index 8530ba4..3dc3375 100644 --- a/src/device/input/random.go +++ b/src/device/input/random.go @@ -11,14 +11,13 @@ type Button struct { } type Random struct { - start byte - stop byte - down []Button + generator func() byte + down []Button } -func NewRandom(start, stop byte) *Random { +func NewRandom(generator func() byte) *Random { rand.Seed(time.Now().UnixNano()) - return &Random{start: start, stop: stop} + return &Random{generator: generator} } func (r *Random) Read() []Button { @@ -30,8 +29,14 @@ func (r *Random) Read() []Button { r.down = r.down[:0] return was } else { - c := Button{Char: r.start + byte(rand.Int()%int(1+r.stop-r.start)), Down: true} + c := Button{Char: r.generator(), Down: true} r.down = append(r.down, c) return []Button{c} } } + +func RandomCharFromRange(start, stop byte) func() byte { + return func() byte { + return start + byte(rand.Int()%int(1+stop-start)) + } +} diff --git a/src/device/input/random_test.go b/src/device/input/random_test.go index 6850e0a..8b50b0c 100644 --- a/src/device/input/random_test.go +++ b/src/device/input/random_test.go @@ -6,7 +6,7 @@ import ( ) func TestRandom(t *testing.T) { - r := input.NewRandom('a', 'g') + r := input.NewRandom(input.RandomCharFromRange('a', 'z')) for i := 0; i < 100; i++ { batch := r.Read() for _, got := range batch {