From c0b0749dab7fdd68698bbcb5f0c2e8af9faba875 Mon Sep 17 00:00:00 2001 From: talis Date: Tue, 26 Feb 2019 09:19:22 +0200 Subject: [PATCH 1/3] support for setting a seed --- reggen.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/reggen.go b/reggen.go index 7f7a5ad..cfb9c64 100644 --- a/reggen.go +++ b/reggen.go @@ -201,6 +201,10 @@ func NewGenerator(regex string) (*Generator, error) { }, nil } +func (gen *Generator) SetSeed(seed int64) { + gen.rand = rand.New(rand.NewSource(seed)) +} + func Generate(regex string, limit int) (string, error) { g, err := NewGenerator(regex) if err != nil { From 7dd9a02ae22a2213f378fb951ad4426fc19dd5a0 Mon Sep 17 00:00:00 2001 From: talis Date: Tue, 26 Feb 2019 09:32:43 +0200 Subject: [PATCH 2/3] testing that seed makes results recreatable --- reggen_test.go | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/reggen_test.go b/reggen_test.go index 474040f..b4f8624 100644 --- a/reggen_test.go +++ b/reggen_test.go @@ -4,6 +4,7 @@ import ( "fmt" "regexp" "testing" + "time" ) type testCase struct { @@ -51,6 +52,28 @@ func TestGenerate(t *testing.T) { } } +func TestSeed(t *testing.T) { + g1, err := NewGenerator(cases[0].regex) + if err != nil { + t.Fatal("Error creating generator: ", err) + } + g2, err := NewGenerator(cases[0].regex) + if err != nil { + t.Fatal("Error creating generator: ", err) + } + currentTime := time.Now().UnixNano() + g1.SetSeed(currentTime) + g2.SetSeed(currentTime) + for i := 0; i < 10; i++ { + res1 := g1.Generate(100) + res2 := g2.Generate(100) + fmt.Printf("res1: %v\n res2: %v\n", res1, res2) + if res1 != res2 { + t.Error("Results are not reproducible") + } + } +} + func BenchmarkGenerate(b *testing.B) { r, err := NewGenerator(`^[a-z]{5,10}@[a-z]+\.(com|net|org)$`) if err != nil { From 849f950ff52a8a15d0067912a3ac561fdedfc578 Mon Sep 17 00:00:00 2001 From: talis Date: Tue, 26 Feb 2019 09:36:37 +0200 Subject: [PATCH 3/3] improve testing --- reggen_test.go | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/reggen_test.go b/reggen_test.go index b4f8624..0b479f4 100644 --- a/reggen_test.go +++ b/reggen_test.go @@ -65,13 +65,19 @@ func TestSeed(t *testing.T) { g1.SetSeed(currentTime) g2.SetSeed(currentTime) for i := 0; i < 10; i++ { - res1 := g1.Generate(100) - res2 := g2.Generate(100) - fmt.Printf("res1: %v\n res2: %v\n", res1, res2) - if res1 != res2 { + if g1.Generate(100) != g2.Generate(100) { t.Error("Results are not reproducible") } } + + g1.SetSeed(123) + g2.SetSeed(456) + for i := 0; i < 10; i++ { + if g1.Generate(100) == g2.Generate(100) { + t.Error("Results should not match") + } + } + } func BenchmarkGenerate(b *testing.B) {