From 1352e285bb1ac1600cedf27623a14f3d6e521adb Mon Sep 17 00:00:00 2001 From: pxi Date: Sun, 31 Dec 2023 18:18:29 +0100 Subject: [PATCH] =?UTF-8?q?=C2=AF\=5F(=E3=83=84)=5F/=C2=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- go-fast-replace/cmd/corpus/main.go | 17 ++++++++++++----- go-fast-replace/cmd/pairs/main.go | 11 ++++++++++- go-fast-replace/internal/corpus/corpus.go | 7 ++++--- go-fast-replace/internal/pairs/pairs.go | 4 ++-- go-fast-replace/internal/replace/bm_test.go | 12 ++++++++++++ 5 files changed, 40 insertions(+), 11 deletions(-) diff --git a/go-fast-replace/cmd/corpus/main.go b/go-fast-replace/cmd/corpus/main.go index 27d9f9e..12f29f4 100644 --- a/go-fast-replace/cmd/corpus/main.go +++ b/go-fast-replace/cmd/corpus/main.go @@ -3,6 +3,7 @@ package main import ( "fmt" "log" + "strconv" "os" "internal/corpus" ) @@ -16,10 +17,16 @@ func main() { defer f.Close() - lines := corpus.MakeCorpus() + var total int = 1000 + if len(os.Args) > 1 { + i, err := strconv.Atoi(os.Args[1]) + if err != nil { + log.Fatal(err) + } + total = i + } - // Write to file - for _, line := range lines { - f.WriteString(line + "\n") - } + corpus := corpus.MakeCorpus(total) + + f.WriteString(corpus) } \ No newline at end of file diff --git a/go-fast-replace/cmd/pairs/main.go b/go-fast-replace/cmd/pairs/main.go index 26667cc..34ac1b6 100644 --- a/go-fast-replace/cmd/pairs/main.go +++ b/go-fast-replace/cmd/pairs/main.go @@ -16,7 +16,16 @@ func main() { defer f.Close() - lines := pairs.MakePairs() + var total int = 1000 + if len(os.Args) > 1 { + i, err := strconv.Atoi(os.Args[1]) + if err != nil { + log.Fatal(err) + } + total = i + } + + lines := pairs.MakePairs(total) // Write to file for _, line := range lines { diff --git a/go-fast-replace/internal/corpus/corpus.go b/go-fast-replace/internal/corpus/corpus.go index 761f955..8124e6c 100644 --- a/go-fast-replace/internal/corpus/corpus.go +++ b/go-fast-replace/internal/corpus/corpus.go @@ -3,13 +3,14 @@ package corpus import ( "fmt" "math/rand" + "strings" ) -func MakeCorpus() []string { +func MakeCorpus(n int) string { // Generate data lineLength := 100 var lines []string - for i := 1; i <= 1000; i++ { + for i := 1; i <= n; i++ { lines = append(lines, makeLine(i, lineLength)) } @@ -19,7 +20,7 @@ func MakeCorpus() []string { lines[i], lines[j] = lines[j], lines[i] } - return lines + return strings.Join(lines, "\n") } func makeLine(line int, lineLength int) string { diff --git a/go-fast-replace/internal/pairs/pairs.go b/go-fast-replace/internal/pairs/pairs.go index be50c13..9bafdf2 100644 --- a/go-fast-replace/internal/pairs/pairs.go +++ b/go-fast-replace/internal/pairs/pairs.go @@ -5,9 +5,9 @@ import ( "math/rand" ) -func MakePairs() []string { +func MakePairs(n int) []string { var pairs []string - for i := 1; i <= 1000; i++ { + for i := 1; i <= n; i++ { pairs = append(pairs, makeKey(i) + "," + makeValue()) } diff --git a/go-fast-replace/internal/replace/bm_test.go b/go-fast-replace/internal/replace/bm_test.go index d14bf4d..d10bea0 100644 --- a/go-fast-replace/internal/replace/bm_test.go +++ b/go-fast-replace/internal/replace/bm_test.go @@ -2,6 +2,8 @@ package replace import ( "testing" + "internal/corpus" + "internal/pairs" "internal/replace" ) @@ -15,4 +17,14 @@ func TestBoyerMooreReplace(t *testing.T) { if want != got { t.Error("Replacement was wrong.") } +} + +func BenchmarkBoyerMooreReplace(b *testing.B) { + var amount int = 1000 + var corpus string = corpus.MakeCorpus(amount) + var pairs []string = pairs.MakePairs(amount) + + for n := 0; n < b.N; n++ { + replace.BoyerMooreReplace(corpus, pairs) + } } \ No newline at end of file