fork of https://github.com/sourcegraph/zoekt
1package zoekt
2
3import (
4 "bytes"
5 "encoding/gob"
6 "testing"
7
8 "github.com/google/go-cmp/cmp"
9)
10
11func BenchmarkRepoList_Encode(b *testing.B) {
12 set := genRepoList(1000)
13
14 // do one write to amortize away the cost of gob registration
15 w := &countWriter{}
16 enc := gob.NewEncoder(w)
17 if err := enc.Encode(set); err != nil {
18 b.Fatal(err)
19 }
20
21 b.ResetTimer()
22 b.ReportAllocs()
23
24 b.ReportMetric(float64(w.n), "bytes")
25
26 for n := 0; n < b.N; n++ {
27 if err := enc.Encode(set); err != nil {
28 b.Fatal(err)
29 }
30 }
31}
32
33func BenchmarkRepoList_Decode(b *testing.B) {
34 set := genRepoList(1000)
35
36 var buf bytes.Buffer
37 if err := gob.NewEncoder(&buf).Encode(set); err != nil {
38 b.Fatal(err)
39 }
40
41 b.ResetTimer()
42 b.ReportAllocs()
43
44 for n := 0; n < b.N; n++ {
45 // We need to include gob.NewDecoder cost to avoid measuring encoding.
46 var repoBranches RepoList
47 if err := gob.NewDecoder(bytes.NewReader(buf.Bytes())).Decode(&repoBranches); err != nil {
48 b.Fatal(err)
49 }
50 }
51}
52
53func TestRepoList_Marshal(t *testing.T) {
54 for i := range []int{0, 1, 10, 100} {
55 want := genRepoList(i)
56
57 var buf bytes.Buffer
58 if err := gob.NewEncoder(&buf).Encode(want); err != nil {
59 t.Fatal(err)
60 }
61
62 var got RepoList
63 if err := gob.NewDecoder(bytes.NewReader(buf.Bytes())).Decode(&got); err != nil {
64 t.Fatal(err)
65 }
66
67 if diff := cmp.Diff(want, &got); diff != "" {
68 t.Fatalf("mismatch for reposmap size %d (-want +got):\n%s", i, diff)
69 }
70 }
71}
72
73func genRepoList(size int) *RepoList {
74 m := make(ReposMap, size)
75 for i := 0; i < size; i++ {
76 m[uint32(i)] = MinimalRepoListEntry{
77 HasSymbols: true,
78 Branches: []RepositoryBranch{{
79 Name: "HEAD",
80 Version: "c301e5c82b6e1632dce5c39902691c359559852e",
81 }},
82 }
83 }
84 return &RepoList{ReposMap: m}
85}
86
87type countWriter struct {
88 n int
89}
90
91func (w *countWriter) Write(b []byte) (int, error) {
92 w.n += len(b)
93 return len(b), nil
94}