fork of https://github.com/sourcegraph/zoekt
0

Configure Feed

Select the types of activity you want to include in your feed.

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