@@ -153,7 +153,7 @@ public void TestBzmPop()
153
153
db . SortedSetAdd ( sortedSetKey , "d" , 9.4 ) ;
154
154
db . SortedSetAdd ( sortedSetKey , "e" , 7.76 ) ;
155
155
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.
157
157
var resultWithDefaultOrder = db . BzmPop ( 0 , sortedSetKey , MinMaxModifier . Min , 2 ) ;
158
158
159
159
Assert . NotNull ( resultWithDefaultOrder ) ;
@@ -162,7 +162,7 @@ public void TestBzmPop()
162
162
Assert . Equal ( "a" , resultWithDefaultOrder . Item2 [ 0 ] . Value . ToString ( ) ) ;
163
163
Assert . Equal ( "c" , resultWithDefaultOrder . Item2 [ 1 ] . Value . ToString ( ) ) ;
164
164
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.
166
166
var resultWithDescendingOrder = db . BzmPop ( 0 , sortedSetKey , MinMaxModifier . Max , 1 ) ;
167
167
168
168
Assert . NotNull ( resultWithDescendingOrder ) ;
@@ -252,7 +252,6 @@ public void TestBzmPopNoKeysProvided()
252
252
var db = redis . GetDatabase ( null ) ;
253
253
db . Execute ( "FLUSHALL" ) ;
254
254
255
- // Server would wait forever, but the multiplexer times out in 1 second.
256
255
Assert . Throws < ArgumentException > ( ( ) => db . BzmPop ( 0 , Array . Empty < RedisKey > ( ) , MinMaxModifier . Min ) ) ;
257
256
}
258
257
@@ -270,15 +269,15 @@ public void TestBzmPopWithOrderEnum()
270
269
db . SortedSetAdd ( sortedSetKey , "b" , 5.1 ) ;
271
270
db . SortedSetAdd ( sortedSetKey , "c" , 3.7 ) ;
272
271
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.
274
273
var resultWithDefaultOrder = db . BzmPop ( 0 , sortedSetKey , Order . Ascending . ToMinMax ( ) ) ;
275
274
276
275
Assert . NotNull ( resultWithDefaultOrder ) ;
277
276
Assert . Equal ( sortedSetKey , resultWithDefaultOrder ! . Item1 ) ;
278
277
Assert . Single ( resultWithDefaultOrder . Item2 ) ;
279
278
Assert . Equal ( "a" , resultWithDefaultOrder . Item2 [ 0 ] . Value . ToString ( ) ) ;
280
279
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.
282
281
var resultWithDescendingOrder = db . BzmPop ( 0 , sortedSetKey , Order . Descending . ToMinMax ( ) ) ;
283
282
284
283
Assert . NotNull ( resultWithDescendingOrder ) ;
@@ -406,6 +405,106 @@ public void TestBzPopMaxMultipleSets()
406
405
Assert . Equal ( "set-one" , result ! . Item1 ) ;
407
406
Assert . Equal ( "b" , result . Item2 . Value . ToString ( ) ) ;
408
407
}
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
+ }
409
508
410
509
[ SkipIfRedis ( Is . OSSCluster , Comparison . LessThan , "5.0.0" ) ]
411
510
public void TestBlPop ( )
0 commit comments