@@ -133,6 +133,7 @@ func TestClient_BfExistsMulti(t *testing.T) {
133
133
func TestClient_BfInsert (t * testing.T ) {
134
134
client .FlushAll ()
135
135
key := "test_bf_insert"
136
+ key_expansion := "test_bf_insert_expansion"
136
137
key_nocreate := "test_bf_insert_nocreate"
137
138
key_noscaling := "test_bf_insert_noscaling"
138
139
@@ -149,6 +150,11 @@ func TestClient_BfInsert(t *testing.T) {
149
150
assert .Nil (t , err )
150
151
assert .Equal (t , 2 , len (ret ))
151
152
153
+ // Test for EXPANSION : If a new sub-filter is created, its size will be the size of the current filter multiplied by expansion
154
+ ret , err = client .BfInsert (key_expansion , 1000 , 0.1 , 4 , false , false , []string {"a" })
155
+ assert .Nil (t , err )
156
+ assert .Equal (t , 1 , len (ret ))
157
+
152
158
// Test for NOCREATE : If specified, indicates that the filter should not be created if it does not already exist
153
159
_ , err = client .BfInsert (key_nocreate , 1000 , 0.1 , - 1 , true , false , []string {"a" })
154
160
assert .NotNil (t , err )
@@ -181,6 +187,22 @@ func TestClient_TopkAdd(t *testing.T) {
181
187
assert .Equal (t , 3 , len (rets ))
182
188
}
183
189
190
+ func TestClient_TopkCount (t * testing.T ) {
191
+ client .FlushAll ()
192
+ key := "test_topk_count"
193
+ ret , err := client .TopkReserve (key , 10 , 2000 , 7 , 0.925 )
194
+ assert .Nil (t , err )
195
+ assert .Equal (t , "OK" , ret )
196
+ rets , err := client .TopkAdd (key , []string {"test" , "test1" , "test3" })
197
+ assert .Nil (t , err )
198
+ assert .Equal (t , 3 , len (rets ))
199
+ counts , err := client .TopkCount (key , []string {"test" , "test1" , "test3" })
200
+ assert .Equal (t , 3 , len (counts ))
201
+ for _ , element := range counts {
202
+ assert .LessOrEqual (t , int64 (1 ), element )
203
+ }
204
+ }
205
+
184
206
func TestClient_TopkQuery (t * testing.T ) {
185
207
client .FlushAll ()
186
208
key := "test_topk_query"
@@ -294,11 +316,41 @@ func TestClient_CmsMerge(t *testing.T) {
294
316
ret , err = client .CmsInitByDim ("C" , 1000 , 5 )
295
317
assert .Nil (t , err )
296
318
assert .Equal (t , "OK" , ret )
319
+ ret , err = client .CmsInitByDim ("D" , 1000 , 5 )
320
+ assert .Nil (t , err )
321
+ assert .Equal (t , "OK" , ret )
322
+ ret , err = client .CmsInitByDim ("E" , 1000 , 5 )
323
+ assert .Nil (t , err )
324
+ assert .Equal (t , "OK" , ret )
325
+
297
326
client .CmsIncrBy ("A" , map [string ]int64 {"foo" : 5 , "bar" : 3 , "baz" : 9 })
298
327
client .CmsIncrBy ("B" , map [string ]int64 {"foo" : 2 , "bar" : 3 , "baz" : 1 })
299
- client .CmsMerge ("C" , []string {"A" , "B" }, nil )
328
+
329
+ // Negative test ( key not exist )
330
+ ret , err = client .CmsMerge ("dont_exist" , []string {"A" , "B" }, nil )
331
+ assert .NotNil (t , err )
332
+ assert .Equal (t , "CMS: key does not exist" , err .Error ())
333
+
334
+ // Positive tests
335
+ ret , err = client .CmsMerge ("C" , []string {"A" , "B" }, nil )
336
+ assert .Nil (t , err )
337
+ assert .Equal (t , "OK" , ret )
300
338
results , err := client .CmsQuery ("C" , []string {"foo" , "bar" , "baz" })
301
339
assert .Equal (t , []int64 {7 , 6 , 10 }, results )
340
+
341
+ // Test for WEIGHTS ( default weight )
342
+ ret , err = client .CmsMerge ("D" , []string {"A" , "B" }, []int64 {1 , 1 , 1 })
343
+ assert .Nil (t , err )
344
+ assert .Equal (t , "OK" , ret )
345
+ results , err = client .CmsQuery ("D" , []string {"foo" , "bar" , "baz" })
346
+ assert .Equal (t , []int64 {7 , 6 , 10 }, results )
347
+
348
+ // Test for WEIGHTS ( default weight )
349
+ ret , err = client .CmsMerge ("E" , []string {"A" , "B" }, []int64 {1 , 5 })
350
+ assert .Nil (t , err )
351
+ assert .Equal (t , "OK" , ret )
352
+ results , err = client .CmsQuery ("E" , []string {"foo" , "bar" , "baz" })
353
+ assert .Equal (t , []int64 {5 + 2 * 5 , 3 + 3 * 5 , 9 + 1 * 5 }, results )
302
354
}
303
355
304
356
func TestClient_CmsInfo (t * testing.T ) {
@@ -317,9 +369,21 @@ func TestClient_CmsInfo(t *testing.T) {
317
369
func TestClient_CfReserve (t * testing.T ) {
318
370
client .FlushAll ()
319
371
key := "test_cf_reserve"
372
+ key_max_iterations := "test_cf_reserve_maxiterations"
373
+ key_expansion := "test_cf_reserve_expansion"
320
374
ret , err := client .CfReserve (key , 1000 , - 1 , - 1 , - 1 )
321
375
assert .Nil (t , err )
322
376
assert .Equal (t , "OK" , ret )
377
+
378
+ // Test for MAXITERATIONS property
379
+ ret , err = client .CfReserve (key_max_iterations , 1000 , - 1 , 20 , - 1 )
380
+ assert .Nil (t , err )
381
+ assert .Equal (t , "OK" , ret )
382
+
383
+ // Test for EXPANSION property
384
+ ret , err = client .CfReserve (key_expansion , 1000 , - 1 , - 1 , 2 )
385
+ assert .Nil (t , err )
386
+ assert .Equal (t , "OK" , ret )
323
387
}
324
388
325
389
func TestClient_CfAdd (t * testing.T ) {
@@ -454,4 +518,14 @@ func TestClient_BfScanDump(t *testing.T) {
454
518
}
455
519
exists , err := client .Exists (key , "1" )
456
520
assert .True (t , exists )
521
+
522
+ // Negative testing
523
+ notBfKey := "string_key"
524
+ conn := client .Pool .Get ()
525
+ defer conn .Close ()
526
+ _ , err = conn .Do ("SET" , redis.Args {notBfKey , "value" }... )
527
+ assert .Nil (t , err )
528
+ _ , _ , err = client .BfScanDump (notBfKey , 0 )
529
+ assert .Equal (t , err .Error (), "WRONGTYPE Operation against a key holding the wrong kind of value" )
530
+
457
531
}
0 commit comments