@@ -153,7 +153,7 @@ public void TestBzmPop()
153153 db . SortedSetAdd ( sortedSetKey , "d" , 9.4 ) ;
154154 db . SortedSetAdd ( sortedSetKey , "e" , 7.76 ) ;
155155
156- // Pop two items with default order , which means it will pop the minimum values.
156+ // Pop two items with Min modifier , which means it will pop the minimum values.
157157 var resultWithDefaultOrder = db . BzmPop ( 0 , sortedSetKey , MinMaxModifier . Min , 2 ) ;
158158
159159 Assert . NotNull ( resultWithDefaultOrder ) ;
@@ -162,7 +162,7 @@ public void TestBzmPop()
162162 Assert . Equal ( "a" , resultWithDefaultOrder . Item2 [ 0 ] . Value . ToString ( ) ) ;
163163 Assert . Equal ( "c" , resultWithDefaultOrder . Item2 [ 1 ] . Value . ToString ( ) ) ;
164164
165- // Pop one more item, with descending order , which means it will pop the maximum value.
165+ // Pop one more item, with Max modifier , which means it will pop the maximum value.
166166 var resultWithDescendingOrder = db . BzmPop ( 0 , sortedSetKey , MinMaxModifier . Max , 1 ) ;
167167
168168 Assert . NotNull ( resultWithDescendingOrder ) ;
@@ -252,7 +252,6 @@ public void TestBzmPopNoKeysProvided()
252252 var db = redis . GetDatabase ( null ) ;
253253 db . Execute ( "FLUSHALL" ) ;
254254
255- // Server would wait forever, but the multiplexer times out in 1 second.
256255 Assert . Throws < ArgumentException > ( ( ) => db . BzmPop ( 0 , Array . Empty < RedisKey > ( ) , MinMaxModifier . Min ) ) ;
257256 }
258257
@@ -270,15 +269,15 @@ public void TestBzmPopWithOrderEnum()
270269 db . SortedSetAdd ( sortedSetKey , "b" , 5.1 ) ;
271270 db . SortedSetAdd ( sortedSetKey , "c" , 3.7 ) ;
272271
273- // Pop two items with default order, which means it will pop the minimum values.
272+ // Pop two items with Ascending order, which means it will pop the minimum values.
274273 var resultWithDefaultOrder = db . BzmPop ( 0 , sortedSetKey , Order . Ascending . ToMinMax ( ) ) ;
275274
276275 Assert . NotNull ( resultWithDefaultOrder ) ;
277276 Assert . Equal ( sortedSetKey , resultWithDefaultOrder ! . Item1 ) ;
278277 Assert . Single ( resultWithDefaultOrder . Item2 ) ;
279278 Assert . Equal ( "a" , resultWithDefaultOrder . Item2 [ 0 ] . Value . ToString ( ) ) ;
280279
281- // Pop one more item, with descending order, which means it will pop the maximum value.
280+ // Pop one more item, with Descending order, which means it will pop the maximum value.
282281 var resultWithDescendingOrder = db . BzmPop ( 0 , sortedSetKey , Order . Descending . ToMinMax ( ) ) ;
283282
284283 Assert . NotNull ( resultWithDescendingOrder ) ;
@@ -406,6 +405,106 @@ public void TestBzPopMaxMultipleSets()
406405 Assert . Equal ( "set-one" , result ! . Item1 ) ;
407406 Assert . Equal ( "b" , result . Item2 . Value . ToString ( ) ) ;
408407 }
408+ [ SkipIfRedis ( Is . OSSCluster , Comparison . LessThan , "7.0.0" ) ]
409+ public void TestBlmPop ( )
410+ {
411+ var redis = ConnectionMultiplexer . Connect ( "localhost" ) ;
412+
413+ var db = redis . GetDatabase ( null ) ;
414+ db . Execute ( "FLUSHALL" ) ;
415+
416+ db . ListRightPush ( "my-list" , "a" ) ;
417+ db . ListRightPush ( "my-list" , "b" ) ;
418+ db . ListRightPush ( "my-list" , "c" ) ;
419+ db . ListRightPush ( "my-list" , "d" ) ;
420+ db . ListRightPush ( "my-list" , "e" ) ;
421+
422+ // Pop two items from the left side.
423+ var resultWithDefaultOrder = db . BlmPop ( 0 , "my-list" , ListSide . Left , 2 ) ;
424+
425+ Assert . NotNull ( resultWithDefaultOrder ) ;
426+ Assert . Equal ( "my-list" , resultWithDefaultOrder ! . Item1 ) ;
427+ Assert . Equal ( 2 , resultWithDefaultOrder . Item2 . Count ) ;
428+ Assert . Equal ( "a" , resultWithDefaultOrder . Item2 [ 0 ] . ToString ( ) ) ;
429+ Assert . Equal ( "b" , resultWithDefaultOrder . Item2 [ 1 ] . ToString ( ) ) ;
430+
431+ // Pop one more item, from the right side.
432+ var resultWithDescendingOrder = db . BlmPop ( 0 , "my-list" , ListSide . Right , 1 ) ;
433+
434+ Assert . NotNull ( resultWithDescendingOrder ) ;
435+ Assert . Equal ( "my-list" , resultWithDescendingOrder ! . Item1 ) ;
436+ Assert . Single ( resultWithDescendingOrder . Item2 ) ;
437+ Assert . Equal ( "e" , resultWithDescendingOrder . Item2 [ 0 ] . ToString ( ) ) ;
438+ }
439+
440+ [ SkipIfRedis ( Is . OSSCluster , Comparison . LessThan , "7.0.0" ) ]
441+ public void TestBlmPopNull ( )
442+ {
443+ var redis = ConnectionMultiplexer . Connect ( "localhost" ) ;
444+
445+ var db = redis . GetDatabase ( null ) ;
446+ db . Execute ( "FLUSHALL" ) ;
447+
448+ // Nothing in the list, and a short server timeout, which yields null.
449+ var result = db . BlmPop ( 0.5 , "my-list" , ListSide . Left ) ;
450+
451+ Assert . Null ( result ) ;
452+ }
453+
454+ [ SkipIfRedis ( Is . OSSCluster , Comparison . LessThan , "7.0.0" ) ]
455+ public void TestBlmPopMultipleLists ( )
456+ {
457+ var redis = ConnectionMultiplexer . Connect ( "localhost" ) ;
458+
459+ var db = redis . GetDatabase ( null ) ;
460+ db . Execute ( "FLUSHALL" ) ;
461+
462+ db . ListRightPush ( "list-one" , "a" ) ;
463+ db . ListRightPush ( "list-one" , "b" ) ;
464+ db . ListRightPush ( "list-one" , "c" ) ;
465+ db . ListRightPush ( "list-two" , "d" ) ;
466+ db . ListRightPush ( "list-two" , "e" ) ;
467+
468+ var result = db . BlmPop ( 0 , "list-two" , ListSide . Right ) ;
469+
470+ Assert . NotNull ( result ) ;
471+ Assert . Equal ( "list-two" , result ! . Item1 ) ;
472+ Assert . Single ( result . Item2 ) ;
473+ Assert . Equal ( "e" , result . Item2 [ 0 ] . ToString ( ) ) ;
474+
475+ result = db . BlmPop ( 0 , new [ ] { new RedisKey ( "list-two" ) , new RedisKey ( "list-one" ) } , ListSide . Left ) ;
476+
477+ Assert . NotNull ( result ) ;
478+ Assert . Equal ( "list-two" , result ! . Item1 ) ;
479+ Assert . Single ( result . Item2 ) ;
480+ Assert . Equal ( "d" , result . Item2 [ 0 ] . ToString ( ) ) ;
481+
482+ result = db . BlmPop ( 0 , new [ ] { new RedisKey ( "list-two" ) , new RedisKey ( "list-one" ) } , ListSide . Right ) ;
483+
484+ Assert . NotNull ( result ) ;
485+ Assert . Equal ( "list-one" , result ! . Item1 ) ;
486+ Assert . Single ( result . Item2 ) ;
487+ Assert . Equal ( "c" , result . Item2 [ 0 ] . ToString ( ) ) ;
488+
489+ result = db . BlmPop ( 0 , "list-one" , ListSide . Left , count : 2 ) ;
490+
491+ Assert . NotNull ( result ) ;
492+ Assert . Equal ( "list-one" , result ! . Item1 ) ;
493+ Assert . Equal ( 2 , result . Item2 . Count ) ;
494+ Assert . Equal ( "a" , result . Item2 [ 0 ] . ToString ( ) ) ;
495+ Assert . Equal ( "b" , result . Item2 [ 1 ] . ToString ( ) ) ;
496+ }
497+
498+ [ SkipIfRedis ( Is . OSSCluster , Comparison . LessThan , "7.0.0" ) ]
499+ public void TestBlmPopNoKeysProvided ( )
500+ {
501+ var redis = ConnectionMultiplexer . Connect ( "localhost" ) ;
502+
503+ var db = redis . GetDatabase ( null ) ;
504+ db . Execute ( "FLUSHALL" ) ;
505+
506+ Assert . Throws < ArgumentException > ( ( ) => db . BzmPop ( 0 , Array . Empty < RedisKey > ( ) , MinMaxModifier . Min ) ) ;
507+ }
409508
410509 [ SkipIfRedis ( Is . OSSCluster , Comparison . LessThan , "5.0.0" ) ]
411510 public void TestBlPop ( )
0 commit comments