gopkg.in/rethinkdb/rethinkdb-go.v6@v6.2.2/internal/compare/compare_test.go (about) 1 package compare 2 3 import "testing" 4 5 func TestCompareString(t *testing.T) { 6 7 // simple 8 Assert(t, "a", "a") 9 Assert(t, "á", "á") 10 Assert(t, "something longer\nwith two lines", "something longer\nwith two lines") 11 12 AssertFalse(t, "a", "b") 13 AssertFalse(t, "a", 1) 14 AssertFalse(t, "a", []interface{}{}) 15 AssertFalse(t, "a", nil) 16 AssertFalse(t, "a", []interface{}{"a"}) 17 AssertFalse(t, "a", map[string]interface{}{"a": 1}) 18 } 19 func TestCompareArray(t *testing.T) { 20 21 // simple pass 22 Assert(t, []interface{}{1, 2, 3}, []interface{}{1, 2, 3}) 23 24 // out of order 25 AssertFalse(t, []interface{}{1, 2, 3}, []interface{}{1, 3, 2}) 26 27 // totally mistmatched lists 28 AssertFalse(t, []interface{}{1, 2, 3}, []interface{}{3, 4, 5}) 29 30 // missing items 31 AssertFalse(t, []interface{}{1, 2, 3}, []interface{}{1, 2}) 32 AssertFalse(t, []interface{}{1, 2, 3}, []interface{}{1, 3}) 33 34 // extra items 35 AssertFalse(t, []interface{}{1, 2, 3}, []interface{}{1, 2, 3, 4}) 36 37 // empty array 38 Assert(t, []interface{}{}, []interface{}{}) 39 AssertFalse(t, []interface{}{1}, []interface{}{}) 40 AssertFalse(t, []interface{}{}, []interface{}{1}) 41 AssertFalse(t, []interface{}{}, nil) 42 43 // strings 44 Assert(t, []interface{}{"a", "b"}, []interface{}{"a", "b"}) 45 AssertFalse(t, []interface{}{"a", "c"}, []interface{}{"a", "b"}) 46 47 // multiple of a single value 48 Assert(t, []interface{}{1, 2, 2, 3, 3, 3}, []interface{}{1, 2, 2, 3, 3, 3}) 49 AssertFalse(t, []interface{}{1, 2, 2, 3, 3, 3}, []interface{}{1, 2, 3}) 50 AssertFalse(t, []interface{}{1, 2, 3}, []interface{}{1, 2, 2, 3, 3, 3}) 51 } 52 func TestCompareArray_PartialMatch(t *testing.T) { 53 // note that these are all in-order 54 55 // simple 56 Assert(t, PartialMatch([]interface{}{1}), []interface{}{1, 2, 3}) 57 Assert(t, PartialMatch([]interface{}{2}), []interface{}{1, 2, 3}) 58 Assert(t, PartialMatch([]interface{}{3}), []interface{}{1, 2, 3}) 59 60 Assert(t, PartialMatch([]interface{}{1, 2}), []interface{}{1, 2, 3}) 61 Assert(t, PartialMatch([]interface{}{1, 3}), []interface{}{1, 2, 3}) 62 63 Assert(t, PartialMatch([]interface{}{1, 2, 3}), []interface{}{1, 2, 3}) 64 65 AssertFalse(t, PartialMatch([]interface{}{4}), []interface{}{1, 2, 3}) 66 67 // ordered 68 AssertFalse(t, PartialMatch([]interface{}{3, 2, 1}).SetOrdered(true), []interface{}{1, 2, 3}) 69 AssertFalse(t, PartialMatch([]interface{}{1, 3, 2}).SetOrdered(true), []interface{}{1, 2, 3}) 70 71 // empty array 72 Assert(t, PartialMatch([]interface{}{}), []interface{}{1, 2, 3}) 73 74 // multiple of a single items 75 Assert(t, PartialMatch([]interface{}{1, 2, 2}), []interface{}{1, 2, 2, 3, 3, 3}) 76 AssertFalse(t, PartialMatch([]interface{}{1, 2, 2, 2}), []interface{}{1, 2, 2, 3, 3, 3}) 77 } 78 func TestCompareArray_unordered(t *testing.T) { 79 80 // simple 81 Assert(t, UnorderedMatch([]interface{}{1, 2}), []interface{}{1, 2}) 82 Assert(t, UnorderedMatch([]interface{}{2, 1}), []interface{}{1, 2}) 83 84 AssertFalse(t, UnorderedMatch([]interface{}{1, 2}), []interface{}{1, 2, 3}) 85 AssertFalse(t, UnorderedMatch([]interface{}{1, 3}), []interface{}{1, 2, 3}) 86 AssertFalse(t, UnorderedMatch([]interface{}{3, 1}), []interface{}{1, 2, 3}) 87 88 // empty array 89 Assert(t, UnorderedMatch([]interface{}{}), []interface{}{}) 90 } 91 func TestCompareMap(t *testing.T) { 92 93 // simple 94 Assert(t, map[string]interface{}{"a": 1, "b": 2, "c": 3}, map[string]interface{}{"a": 1, "b": 2, "c": 3}) 95 Assert(t, map[string]interface{}{"a": 1, "b": 2, "c": 3}, map[string]interface{}{"c": 3, "a": 1, "b": 2}) 96 97 AssertFalse(t, map[string]interface{}{"a": 1, "b": 2, "c": 3}, map[string]interface{}{"a": 1}) 98 AssertFalse(t, map[string]interface{}{"a": 1}, map[string]interface{}{"a": 1, "b": 2, "c": 3}) 99 100 // empty 101 Assert(t, map[string]interface{}{}, map[string]interface{}{}) 102 AssertFalse(t, map[string]interface{}{}, map[string]interface{}{"a": 1}) 103 AssertFalse(t, map[string]interface{}{"a": 1}, map[string]interface{}{}) 104 105 Assert(t, map[interface{}]interface{}{1: 1225, 2: 1250, 3: 1275, 0: 1200}, map[string]interface{}{"2": 1250, "3": 1275, "0": 1200, "1": 1225}) 106 Assert(t, map[interface{}]interface{}{0: 22, 20: 22, 30: 23}, map[string]interface{}{"30": 23, "0": 22, "20": 22}) 107 } 108 func TestCompareMap_PartialMatch(t *testing.T) { 109 110 // simple 111 Assert(t, PartialMatch(map[string]interface{}{"a": 1}), map[string]interface{}{"a": 1}) 112 Assert(t, PartialMatch(map[string]interface{}{"a": 1}), map[string]interface{}{"a": 1, "b": 2}) 113 114 AssertFalse(t, PartialMatch(map[string]interface{}{"a": 2}), map[string]interface{}{"a": 1, "b": 2}) 115 AssertFalse(t, PartialMatch(map[string]interface{}{"c": 1}), map[string]interface{}{"a": 1, "b": 2}) 116 AssertFalse(t, PartialMatch(map[string]interface{}{"a": 1, "b": 2}), map[string]interface{}{"b": 2}) 117 118 // empty 119 Assert(t, PartialMatch(map[string]interface{}{}), map[string]interface{}{}) 120 Assert(t, PartialMatch(map[string]interface{}{}), map[string]interface{}{"a": 1}) 121 AssertFalse(t, PartialMatch(map[string]interface{}{"a": 1}), map[string]interface{}{}) 122 } 123 func TestCompareMap_inSlice(t *testing.T) { 124 125 // simple 126 Assert(t, []interface{}{map[string]interface{}{"a": 1}}, []interface{}{map[string]interface{}{"a": 1}}) 127 Assert(t, []interface{}{map[string]interface{}{"a": 1, "b": 2}}, []interface{}{map[string]interface{}{"a": 1, "b": 2}}) 128 Assert(t, []interface{}{map[string]interface{}{"a": 1}, map[string]interface{}{"b": 2}}, []interface{}{map[string]interface{}{"a": 1}, map[string]interface{}{"b": 2}}) 129 130 AssertFalse(t, []interface{}{map[string]interface{}{"a": 1}}, []interface{}{map[string]interface{}{"a": 1, "b": 2}}) 131 AssertFalse(t, []interface{}{map[string]interface{}{"a": 2, "b": 2}}, []interface{}{map[string]interface{}{"a": 1, "b": 2}}) 132 AssertFalse(t, []interface{}{map[string]interface{}{"a": 2, "c": 3}}, []interface{}{map[string]interface{}{"a": 1, "b": 2}}) 133 AssertFalse(t, []interface{}{map[string]interface{}{"a": 2, "c": 3}}, []interface{}{map[string]interface{}{"a": 1}}) 134 AssertFalse(t, []interface{}{map[string]interface{}{"a": 1}, map[string]interface{}{"b": 2}}, []interface{}{map[string]interface{}{"a": 1, "b": 2}}) 135 136 // order 137 AssertFalse(t, []interface{}{map[string]interface{}{"a": 1}, map[string]interface{}{"b": 2}}, []interface{}{map[string]interface{}{"b": 2}, map[string]interface{}{"a": 1}}) 138 139 // partial 140 Assert(t, PartialMatch([]interface{}{map[string]interface{}{}}), []interface{}{map[string]interface{}{"a": 1, "b": 2}}) 141 Assert(t, PartialMatch([]interface{}{map[string]interface{}{}}), []interface{}{map[string]interface{}{"a": 1, "b": 2}}) 142 Assert(t, PartialMatch([]interface{}{map[string]interface{}{"a": 1}}), []interface{}{map[string]interface{}{"a": 1, "b": 2}}) 143 Assert(t, PartialMatch([]interface{}{map[string]interface{}{"a": 1, "b": 2}}), []interface{}{map[string]interface{}{"a": 1, "b": 2}}) 144 Assert(t, PartialMatch([]interface{}{map[string]interface{}{"a": 1}, map[string]interface{}{"b": 2}}), []interface{}{map[string]interface{}{"a": 1}, map[string]interface{}{"b": 2}, map[string]interface{}{"c": 3}}) 145 146 AssertFalse(t, PartialMatch([]interface{}{map[string]interface{}{"a": 2}}), []interface{}{map[string]interface{}{"a": 1, "b": 2}}) 147 AssertFalse(t, PartialMatch([]interface{}{map[string]interface{}{"a": 1, "b": 2}}), []interface{}{map[string]interface{}{"a": 1}}) 148 149 // partial order 150 AssertFalse(t, PartialMatch([]interface{}{map[string]interface{}{"a": 1}, map[string]interface{}{"b": 2}}).SetOrdered(true), []interface{}{map[string]interface{}{"b": 2}, map[string]interface{}{"a": 1}}) 151 152 // partial unordered 153 Assert(t, PartialMatch([]interface{}{map[string]interface{}{"a": 1}, map[string]interface{}{"b": 2}}), []interface{}{map[string]interface{}{"b": 2}, map[string]interface{}{"a": 1}}) 154 Assert(t, PartialMatch([]interface{}{map[string]interface{}{"a": 1}, map[string]interface{}{"b": 2}}).SetOrdered(false), []interface{}{map[string]interface{}{"b": 2}, map[string]interface{}{"a": 1}}) 155 156 Assert(t, []interface{}{map[string]interface{}{"a": 1, "b": 1}, PartialMatch(map[string]interface{}{"a": 2})}, []interface{}{map[string]interface{}{"a": 1, "b": 1}, map[string]interface{}{"a": 2, "b": 2}}) 157 } 158 159 func TestCompareUUID(t *testing.T) { 160 161 // simple 162 Assert(t, IsUUID(), "4e9e5bc2-9b11-4143-9aa1-75c10e7a193a") 163 AssertFalse(t, IsUUID(), "4") 164 AssertFalse(t, IsUUID(), "*") 165 AssertFalse(t, IsUUID(), nil) 166 } 167 168 func TestCompareNumbers(t *testing.T) { 169 170 // simple 171 Assert(t, 1, 1) 172 Assert(t, 1, 1.0) 173 Assert(t, 1.0, 1) 174 Assert(t, 1.0, 1.0) 175 176 AssertFalse(t, 1, 2) 177 AssertFalse(t, 1, 2.0) 178 AssertFalse(t, 1.0, 2) 179 AssertFalse(t, 1.0, 2.0) 180 181 // precision 182 AssertPrecision(t, 1, 1.4, 0.5) 183 AssertPrecision(t, 1.0, 1.4, 0.5) 184 185 AssertPrecisionFalse(t, 1, 2, 0.5) 186 AssertPrecisionFalse(t, 1, 1.6, 0.5) 187 AssertPrecisionFalse(t, 1.0, 2, 0.5) 188 AssertPrecisionFalse(t, 1.0, 1.6, 0.5) 189 }