Index: go/src/infra/gae/libs/wrapper/memory/gkvlite_utils_test.go |
diff --git a/go/src/infra/gae/libs/wrapper/memory/gkvlite_utils_test.go b/go/src/infra/gae/libs/wrapper/memory/gkvlite_utils_test.go |
new file mode 100644 |
index 0000000000000000000000000000000000000000..4618d49e041069c3967ba9e5bee3cd29a319509b |
--- /dev/null |
+++ b/go/src/infra/gae/libs/wrapper/memory/gkvlite_utils_test.go |
@@ -0,0 +1,129 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+package memory |
+ |
+import ( |
+ "testing" |
+ |
+ . "github.com/smartystreets/goconvey/convey" |
+) |
+ |
+// key, old, new |
M-A Ruel
2015/05/31 23:03:16
Then use these names. The goal is not to make the
iannucci
2015/05/31 23:31:33
Done.
|
+type kon struct{ k, o, n []byte } |
+ |
+var testCollisionCases = []struct { |
+ name string |
+ left, right []kv // inserts into left and right collections |
+ expect []kon |
+}{ |
+ { |
+ name: "nil", |
+ }, |
+ { |
+ name: "empty", |
+ left: []kv{}, |
+ right: []kv{}, |
+ }, |
+ { |
+ name: "all old", |
+ left: []kv{ |
+ {cat(1), cat()}, |
+ {cat(0), cat()}, |
+ }, |
+ expect: []kon{ |
+ {cat(0), cat(), nil}, |
+ {cat(1), cat(), nil}, |
+ }, |
+ }, |
+ { |
+ name: "all new", |
+ right: []kv{ |
+ {cat(1), cat()}, |
+ {cat(0), cat()}, |
+ }, |
+ expect: []kon{ |
+ {cat(0), nil, cat()}, |
+ {cat(1), nil, cat()}, |
+ }, |
+ }, |
+ { |
+ name: "new vals", |
+ left: []kv{ |
+ {cat(1), cat("hi")}, |
+ {cat(0), cat("newb")}, |
+ }, |
+ right: []kv{ |
+ {cat(0), cat(2.5)}, |
+ {cat(1), cat(58)}, |
+ }, |
+ expect: []kon{ |
+ {cat(0), cat("newb"), cat(2.5)}, |
+ {cat(1), cat("hi"), cat(58)}, |
+ }, |
+ }, |
+ { |
+ name: "mixed", |
+ left: []kv{ |
+ {cat(1), cat("one")}, |
+ {cat(0), cat("hi")}, |
+ {cat(6), cat()}, |
+ {cat(3), cat(1.3)}, |
+ {cat(2), []byte("zoop")}, |
+ {cat(-1), cat("bob")}, |
+ }, |
+ right: []kv{ |
+ {cat(3), cat(1)}, |
+ {cat(1), cat(58)}, |
+ {cat(0), cat(2.5)}, |
+ {cat(4), cat(1337)}, |
+ {cat(2), cat("ski", 7)}, |
+ {cat(20), cat("nerd")}, |
+ }, |
+ expect: []kon{ |
+ {cat(-1), cat("bob"), nil}, |
+ {cat(0), cat("hi"), cat(2.5)}, |
+ {cat(1), cat("one"), cat(58)}, |
+ {cat(2), []byte("zoop"), cat("ski", 7)}, |
+ {cat(3), cat(1.3), cat(1)}, |
+ {cat(4), nil, cat(1337)}, |
+ {cat(6), cat(), nil}, |
+ {cat(20), nil, cat("nerd")}, |
+ }, |
+ }, |
+} |
+ |
+func getFilledColl(s *memStore, fill []kv) *memCollection { |
+ if fill == nil { |
+ return nil |
+ } |
+ ret := s.MakePrivateCollection(nil) |
+ for _, i := range fill { |
+ ret.Set(i.k, i.v) |
+ } |
+ return ret |
+} |
+ |
+func TestCollision(t *testing.T) { |
+ t.Parallel() |
+ |
+ Convey("Test gkvCollide", t, func() { |
+ s := newMemStore() |
+ for _, tc := range testCollisionCases { |
+ Convey(tc.name, func() { |
+ left := getFilledColl(s, tc.left) |
+ right := getFilledColl(s, tc.right) |
+ i := 0 |
+ gkvCollide(left, right, func(k, o, n []byte) { |
+ e := tc.expect[i] |
+ So(k, ShouldResemble, e.k) |
+ So(o, ShouldResemble, e.o) |
+ So(n, ShouldResemble, e.n) |
+ i++ |
+ }) |
+ So(i, ShouldEqual, len(tc.expect)) |
+ }) |
+ } |
+ }) |
+} |