OLD | NEW |
| (Empty) |
1 // Copyright 2015 The LUCI Authors. All rights reserved. | |
2 // Use of this source code is governed under the Apache License, Version 2.0 | |
3 // that can be found in the LICENSE file. | |
4 | |
5 package memory | |
6 | |
7 import ( | |
8 "testing" | |
9 | |
10 . "github.com/smartystreets/goconvey/convey" | |
11 ) | |
12 | |
13 type keyLeftRight struct{ key, left, right []byte } | |
14 | |
15 type kv struct{ k, v []byte } | |
16 | |
17 var testCollisionCases = []struct { | |
18 name string | |
19 left, right []kv // inserts into left and right collections | |
20 expect []keyLeftRight | |
21 }{ | |
22 { | |
23 name: "nil", | |
24 }, | |
25 { | |
26 name: "empty", | |
27 left: []kv{}, | |
28 right: []kv{}, | |
29 }, | |
30 { | |
31 name: "all old", | |
32 left: []kv{ | |
33 {cat(1), cat()}, | |
34 {cat(0), cat()}, | |
35 }, | |
36 expect: []keyLeftRight{ | |
37 {cat(0), cat(), nil}, | |
38 {cat(1), cat(), nil}, | |
39 }, | |
40 }, | |
41 { | |
42 name: "all new", | |
43 right: []kv{ | |
44 {cat(1), cat()}, | |
45 {cat(0), cat()}, | |
46 }, | |
47 expect: []keyLeftRight{ | |
48 {cat(0), nil, cat()}, | |
49 {cat(1), nil, cat()}, | |
50 }, | |
51 }, | |
52 { | |
53 name: "new vals", | |
54 left: []kv{ | |
55 {cat(1), cat("hi")}, | |
56 {cat(0), cat("newb")}, | |
57 }, | |
58 right: []kv{ | |
59 {cat(0), cat(2.5)}, | |
60 {cat(1), cat(58)}, | |
61 }, | |
62 expect: []keyLeftRight{ | |
63 {cat(0), cat("newb"), cat(2.5)}, | |
64 {cat(1), cat("hi"), cat(58)}, | |
65 }, | |
66 }, | |
67 { | |
68 name: "mixed", | |
69 left: []kv{ | |
70 {cat(1), cat("one")}, | |
71 {cat(0), cat("hi")}, | |
72 {cat(6), cat()}, | |
73 {cat(3), cat(1.3)}, | |
74 {cat(2), []byte("zoop")}, | |
75 {cat(-1), cat("bob")}, | |
76 }, | |
77 right: []kv{ | |
78 {cat(3), cat(1)}, | |
79 {cat(1), cat(58)}, | |
80 {cat(0), cat(2.5)}, | |
81 {cat(4), cat(1337)}, | |
82 {cat(2), cat("ski", 7)}, | |
83 {cat(20), cat("nerd")}, | |
84 }, | |
85 expect: []keyLeftRight{ | |
86 {cat(-1), cat("bob"), nil}, | |
87 {cat(0), cat("hi"), cat(2.5)}, | |
88 {cat(1), cat("one"), cat(58)}, | |
89 {cat(2), []byte("zoop"), cat("ski", 7)}, | |
90 {cat(3), cat(1.3), cat(1)}, | |
91 {cat(4), nil, cat(1337)}, | |
92 {cat(6), cat(), nil}, | |
93 {cat(20), nil, cat("nerd")}, | |
94 }, | |
95 }, | |
96 } | |
97 | |
98 func getFilledColl(fill []kv) memCollection { | |
99 if fill == nil { | |
100 return nil | |
101 } | |
102 store := newMemStore() | |
103 ret := store.GetOrCreateCollection("") | |
104 for _, i := range fill { | |
105 ret.Set(i.k, i.v) | |
106 } | |
107 return store.Snapshot().GetCollection("") | |
108 } | |
109 | |
110 func TestCollision(t *testing.T) { | |
111 t.Parallel() | |
112 | |
113 Convey("Test gkvCollide", t, func() { | |
114 for _, tc := range testCollisionCases { | |
115 Convey(tc.name, func() { | |
116 left := getFilledColl(tc.left) | |
117 right := getFilledColl(tc.right) | |
118 i := 0 | |
119 gkvCollide(left, right, func(key, left, right []
byte) { | |
120 e := tc.expect[i] | |
121 So(key, ShouldResemble, e.key) | |
122 So(left, ShouldResemble, e.left) | |
123 So(right, ShouldResemble, e.right) | |
124 i++ | |
125 }) | |
126 So(i, ShouldEqual, len(tc.expect)) | |
127 }) | |
128 } | |
129 }) | |
130 } | |
OLD | NEW |