Add some basic benchmarks for tracking potential performance improvements/regressions
This commit is contained in:
100
db/bookmarks_test.go
Normal file
100
db/bookmarks_test.go
Normal file
@@ -0,0 +1,100 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
"github.com/tardisx/linkwallet/entity"
|
||||
)
|
||||
|
||||
var bmm *BookmarkManager
|
||||
var corporaDB string = "/tmp/corpora.db"
|
||||
|
||||
func createCorporaIfNecessary() {
|
||||
_, err := os.Stat(corporaDB)
|
||||
if err != nil {
|
||||
log.Printf("creating corpora")
|
||||
dbh := DB{}
|
||||
dbh.Open(corporaDB)
|
||||
bmm := NewBookmarkManager(&dbh)
|
||||
importCorpora(*bmm)
|
||||
dbh.Close()
|
||||
log.Printf("finished creating corpora")
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
func newCorpusTestServer() *httptest.Server {
|
||||
mux := http.NewServeMux()
|
||||
|
||||
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
||||
id := 0
|
||||
n, _ := fmt.Sscanf(r.URL.Path, "/%d", &id)
|
||||
if n != 1 {
|
||||
panic("bad req")
|
||||
}
|
||||
w.Header().Set("Content-Type", "text/html")
|
||||
f, err := os.Open(fmt.Sprintf("../content/corpora/%d.html", id))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
io.Copy(w, f)
|
||||
})
|
||||
return httptest.NewServer(mux)
|
||||
}
|
||||
|
||||
func importCorpora(bmm BookmarkManager) {
|
||||
ts := newCorpusTestServer()
|
||||
defer ts.Close()
|
||||
|
||||
for i := 1; i <= 100; i++ {
|
||||
url := fmt.Sprintf("%s/%d", ts.URL, i)
|
||||
bm := entity.Bookmark{URL: url}
|
||||
bmm.AddBookmark(&bm)
|
||||
bmm.ScrapeAndIndex(&bm)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func createDBAndImportCorpora() *BookmarkManager {
|
||||
|
||||
return bmm
|
||||
}
|
||||
|
||||
func BenchmarkOneWordSearch(b *testing.B) {
|
||||
createCorporaIfNecessary()
|
||||
dbh := DB{}
|
||||
dbh.Open(corporaDB)
|
||||
bmm := NewBookmarkManager(&dbh)
|
||||
b.ResetTimer()
|
||||
for i := 0; i < b.N; i++ {
|
||||
bmm.Search("hello")
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkTwoWordSearch(b *testing.B) {
|
||||
createCorporaIfNecessary()
|
||||
dbh := DB{}
|
||||
dbh.Open(corporaDB)
|
||||
bmm := NewBookmarkManager(&dbh)
|
||||
b.ResetTimer()
|
||||
for i := 0; i < b.N; i++ {
|
||||
bmm.Search("human relate")
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkThreeWordSearch(b *testing.B) {
|
||||
createCorporaIfNecessary()
|
||||
dbh := DB{}
|
||||
dbh.Open(corporaDB)
|
||||
bmm := NewBookmarkManager(&dbh)
|
||||
b.ResetTimer()
|
||||
for i := 0; i < b.N; i++ {
|
||||
bmm.Search("human wiki editor")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user