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