@@ -133,6 +133,7 @@ func TestClient_BfExistsMulti(t *testing.T) {
133133func TestClient_BfInsert (t * testing.T ) {
134134 client .FlushAll ()
135135 key := "test_bf_insert"
136+ key_expansion := "test_bf_insert_expansion"
136137 key_nocreate := "test_bf_insert_nocreate"
137138 key_noscaling := "test_bf_insert_noscaling"
138139
@@ -149,6 +150,11 @@ func TestClient_BfInsert(t *testing.T) {
149150 assert .Nil (t , err )
150151 assert .Equal (t , 2 , len (ret ))
151152
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+
152158 // Test for NOCREATE : If specified, indicates that the filter should not be created if it does not already exist
153159 _ , err = client .BfInsert (key_nocreate , 1000 , 0.1 , - 1 , true , false , []string {"a" })
154160 assert .NotNil (t , err )
@@ -181,6 +187,22 @@ func TestClient_TopkAdd(t *testing.T) {
181187 assert .Equal (t , 3 , len (rets ))
182188}
183189
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+
184206func TestClient_TopkQuery (t * testing.T ) {
185207 client .FlushAll ()
186208 key := "test_topk_query"
@@ -294,11 +316,41 @@ func TestClient_CmsMerge(t *testing.T) {
294316 ret , err = client .CmsInitByDim ("C" , 1000 , 5 )
295317 assert .Nil (t , err )
296318 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+
297326 client .CmsIncrBy ("A" , map [string ]int64 {"foo" : 5 , "bar" : 3 , "baz" : 9 })
298327 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 )
300338 results , err := client .CmsQuery ("C" , []string {"foo" , "bar" , "baz" })
301339 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 )
302354}
303355
304356func TestClient_CmsInfo (t * testing.T ) {
@@ -317,9 +369,21 @@ func TestClient_CmsInfo(t *testing.T) {
317369func TestClient_CfReserve (t * testing.T ) {
318370 client .FlushAll ()
319371 key := "test_cf_reserve"
372+ key_max_iterations := "test_cf_reserve_maxiterations"
373+ key_expansion := "test_cf_reserve_expansion"
320374 ret , err := client .CfReserve (key , 1000 , - 1 , - 1 , - 1 )
321375 assert .Nil (t , err )
322376 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 )
323387}
324388
325389func TestClient_CfAdd (t * testing.T ) {
@@ -454,4 +518,14 @@ func TestClient_BfScanDump(t *testing.T) {
454518 }
455519 exists , err := client .Exists (key , "1" )
456520 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+
457531}
0 commit comments