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 |