From 285e8394861765757a057ca1e16c36c9ca8227cb Mon Sep 17 00:00:00 2001 From: Michael Muré Date: Sun, 19 Aug 2018 21:26:35 +0200 Subject: random_bugs: make it seedable and reusable --- misc/create_random_bugs.go | 127 --------------------------------- misc/random_bugs/create_random_bugs.go | 126 ++++++++++++++++++++++++++++++++ misc/random_bugs/main.go | 28 ++++++++ 3 files changed, 154 insertions(+), 127 deletions(-) delete mode 100644 misc/create_random_bugs.go create mode 100644 misc/random_bugs/create_random_bugs.go create mode 100644 misc/random_bugs/main.go diff --git a/misc/create_random_bugs.go b/misc/create_random_bugs.go deleted file mode 100644 index 1ca20aee..00000000 --- a/misc/create_random_bugs.go +++ /dev/null @@ -1,127 +0,0 @@ -// +build ignore - -package main - -import ( - "math/rand" - "os" - "strings" - "time" - - "github.com/MichaelMure/git-bug/bug" - "github.com/MichaelMure/git-bug/bug/operations" - "github.com/MichaelMure/git-bug/repository" - "github.com/icrowley/fake" -) - -const bugNumber = 15 -const personNumber = 5 -const minOp = 3 -const maxOp = 20 - -type opsGenerator func(*bug.Bug, bug.Person) - -// This program will randomly generate a collection of bugs in the repository -// of the current path -func main() { - rand.Seed(time.Now().UnixNano()) - - opsGenerators := []opsGenerator{ - comment, - comment, - title, - labels, - operations.Open, - operations.Close, - } - - dir, err := os.Getwd() - if err != nil { - panic(err) - } - - repo, err := repository.NewGitRepo(dir, func(repo *repository.GitRepo) error { - return nil - }) - if err != nil { - panic(err) - } - - for i := 0; i < bugNumber; i++ { - addedLabels = []string{} - - b, err := operations.Create(randomPerson(), fake.Sentence(), paragraphs()) - - if err != nil { - panic(err) - } - - nOps := minOp + rand.Intn(maxOp-minOp) - for j := 0; j < nOps; j++ { - index := rand.Intn(len(opsGenerators)) - opsGenerators[index](b, randomPerson()) - } - - err = b.Commit(repo) - if err != nil { - panic(err) - } - } -} - -func person() bug.Person { - return bug.Person{ - Name: fake.FullName(), - Email: fake.EmailAddress(), - } -} - -var persons []bug.Person - -func randomPerson() bug.Person { - if len(persons) == 0 { - persons = make([]bug.Person, personNumber) - for i := range persons { - persons[i] = person() - } - } - - index := rand.Intn(personNumber) - return persons[index] -} - -func paragraphs() string { - p := fake.Paragraphs() - return strings.Replace(p, "\t", "\n\n", -1) -} - -func comment(b *bug.Bug, p bug.Person) { - operations.Comment(b, p, paragraphs()) -} - -func title(b *bug.Bug, p bug.Person) { - operations.SetTitle(b, p, fake.Sentence()) -} - -var addedLabels []string - -func labels(b *bug.Bug, p bug.Person) { - var removed []string - nbRemoved := rand.Intn(3) - for nbRemoved > 0 && len(addedLabels) > 0 { - index := rand.Intn(len(addedLabels)) - removed = append(removed, addedLabels[index]) - addedLabels[index] = addedLabels[len(addedLabels)-1] - addedLabels = addedLabels[:len(addedLabels)-1] - } - - var added []string - nbAdded := rand.Intn(3) - for i := 0; i < nbAdded; i++ { - label := fake.Word() - added = append(added, label) - addedLabels = append(addedLabels, label) - } - - operations.ChangeLabels(nil, b, p, added, removed) -} diff --git a/misc/random_bugs/create_random_bugs.go b/misc/random_bugs/create_random_bugs.go new file mode 100644 index 00000000..54dad58a --- /dev/null +++ b/misc/random_bugs/create_random_bugs.go @@ -0,0 +1,126 @@ +package random_bugs + +import ( + "math/rand" + "strings" + "time" + + "github.com/MichaelMure/git-bug/bug" + "github.com/MichaelMure/git-bug/bug/operations" + "github.com/MichaelMure/git-bug/repository" + "github.com/icrowley/fake" +) + +type opsGenerator func(*bug.Bug, bug.Person) + +type Options struct { + BugNumber int + PersonNumber int + MinOp int + MaxOp int +} + +func DefaultOptions() Options { + return Options{ + BugNumber: 15, + PersonNumber: 5, + MinOp: 3, + MaxOp: 20, + } +} + +func GenerateRandomBugs(repo repository.Repo, opts Options) { + GenerateRandomBugsWithSeed(repo, opts, time.Now().UnixNano()) +} + +func GenerateRandomBugsWithSeed(repo repository.Repo, opts Options, seed int64) { + rand.Seed(seed) + fake.Seed(seed) + + opsGenerators := []opsGenerator{ + comment, + comment, + title, + labels, + operations.Open, + operations.Close, + } + + for i := 0; i < opts.BugNumber; i++ { + addedLabels = []string{} + + b, err := operations.Create(randomPerson(opts.PersonNumber), fake.Sentence(), paragraphs()) + + if err != nil { + panic(err) + } + + nOps := opts.MinOp + rand.Intn(opts.MaxOp-opts.MinOp) + for j := 0; j < nOps; j++ { + index := rand.Intn(len(opsGenerators)) + opsGenerators[index](b, randomPerson(opts.PersonNumber)) + } + + err = b.Commit(repo) + if err != nil { + panic(err) + } + } +} + +func person() bug.Person { + return bug.Person{ + Name: fake.FullName(), + Email: fake.EmailAddress(), + } +} + +var persons []bug.Person + +func randomPerson(personNumber int) bug.Person { + if len(persons) == 0 { + persons = make([]bug.Person, personNumber) + for i := range persons { + persons[i] = person() + } + } + + index := rand.Intn(personNumber) + return persons[index] +} + +func paragraphs() string { + p := fake.Paragraphs() + return strings.Replace(p, "\t", "\n\n", -1) +} + +func comment(b *bug.Bug, p bug.Person) { + operations.Comment(b, p, paragraphs()) +} + +func title(b *bug.Bug, p bug.Person) { + operations.SetTitle(b, p, fake.Sentence()) +} + +var addedLabels []string + +func labels(b *bug.Bug, p bug.Person) { + var removed []string + nbRemoved := rand.Intn(3) + for nbRemoved > 0 && len(addedLabels) > 0 { + index := rand.Intn(len(addedLabels)) + removed = append(removed, addedLabels[index]) + addedLabels[index] = addedLabels[len(addedLabels)-1] + addedLabels = addedLabels[:len(addedLabels)-1] + } + + var added []string + nbAdded := rand.Intn(3) + for i := 0; i < nbAdded; i++ { + label := fake.Word() + added = append(added, label) + addedLabels = append(addedLabels, label) + } + + operations.ChangeLabels(nil, b, p, added, removed) +} diff --git a/misc/random_bugs/main.go b/misc/random_bugs/main.go new file mode 100644 index 00000000..7211548e --- /dev/null +++ b/misc/random_bugs/main.go @@ -0,0 +1,28 @@ +// +build ignore + +package main + +import ( + "os" + + rb "github.com/MichaelMure/git-bug/misc/random_bugs" + "github.com/MichaelMure/git-bug/repository" +) + +// This program will randomly generate a collection of bugs in the repository +// of the current path +func main() { + dir, err := os.Getwd() + if err != nil { + panic(err) + } + + repo, err := repository.NewGitRepo(dir, func(repo *repository.GitRepo) error { + return nil + }) + if err != nil { + panic(err) + } + + rb.GenerateRandomBugs(repo, rb.DefaultOptions()) +} -- cgit