@@ -379,6 +379,40 @@ func TestBitmap(t *testing.T) {
379379 require .ErrorContains (t , rdb .Do (ctx , "BITFIELD_RO" , "str" , "INCRBY" , "u8" , "32" , 2 ).Err (), "BITFIELD_RO only supports the GET subcommand" )
380380 })
381381
382+ t .Run ("BITFIELD positional offset #N syntax" , func (t * testing.T ) {
383+ require .NoError (t , rdb .Del (ctx , "bf_pos" ).Err ())
384+
385+ // #0 with u16 = offset 0, #1 = offset 16, #2 = offset 32
386+ res := rdb .Do (ctx , "BITFIELD" , "bf_pos" , "SET" , "u16" , "#0" , 100 )
387+ require .NoError (t , res .Err ())
388+ require .EqualValues (t , []interface {}{int64 (0 )}, res .Val ())
389+
390+ res = rdb .Do (ctx , "BITFIELD" , "bf_pos" , "SET" , "u16" , "#1" , 200 )
391+ require .NoError (t , res .Err ())
392+ require .EqualValues (t , []interface {}{int64 (0 )}, res .Val ())
393+
394+ res = rdb .Do (ctx , "BITFIELD" , "bf_pos" , "GET" , "u16" , "#0" , "GET" , "u16" , "#1" )
395+ require .NoError (t , res .Err ())
396+ require .EqualValues (t , []interface {}{int64 (100 ), int64 (200 )}, res .Val ())
397+
398+ // INCRBY with #N
399+ res = rdb .Do (ctx , "BITFIELD" , "bf_pos" , "INCRBY" , "u16" , "#0" , 1 )
400+ require .NoError (t , res .Err ())
401+ require .EqualValues (t , []interface {}{int64 (101 )}, res .Val ())
402+
403+ // OVERFLOW SAT with #N
404+ res = rdb .Do (ctx , "BITFIELD" , "bf_pos" , "OVERFLOW" , "SAT" , "INCRBY" , "u16" , "#1" , 65535 )
405+ require .NoError (t , res .Err ())
406+ require .EqualValues (t , []interface {}{int64 (65535 )}, res .Val ())
407+
408+ // BITFIELD_RO GET with #N
409+ for _ , command := range []string {"BITFIELD" , "BITFIELD_RO" } {
410+ res = rdb .Do (ctx , command , "bf_pos" , "GET" , "u16" , "#0" )
411+ require .NoError (t , res .Err ())
412+ require .EqualValues (t , []interface {}{int64 (101 )}, res .Val ())
413+ }
414+ })
415+
382416 t .Run ("BITPOS BIT option check" , func (t * testing.T ) {
383417 require .NoError (t , rdb .Set (ctx , "mykey" , "\x00 \xff \xf0 " , 0 ).Err ())
384418 cmd := rdb .BitPosSpan (ctx , "mykey" , 1 , 7 , 15 , "bit" )
0 commit comments