@@ -131,6 +131,46 @@ start_server {tags {"bitops"}} {
131131 r get s
132132 } " \x55\xff\x00\xaa "
133133
134+ test {SetBit and GetBit with large offset} {
135+ set max_offset [expr {2**32 - 1}]
136+ set invalid_offset [expr {2**32}]
137+
138+ r setbit large_key $max_offset 1
139+ set result [r getbit large_key $max_offset ]
140+ set invalid_result [catch {r setbit large_key $invalid_offset 1} err]
141+
142+ list $result $invalid_result $err
143+ } {1 1 {ERR bit offset is not an integer or out of range}}
144+
145+ test {BITCOUNT with large offset} {
146+ r setbit count_key 0 1
147+ r setbit count_key 100 1
148+ r setbit count_key [expr {2**32 - 1}] 1
149+
150+ set total_count [r bitcount count_key]
151+ set range_count [r bitcount count_key 0 12]
152+
153+ list $total_count $range_count
154+ } {3 2}
155+
156+ test {BITPOS with large offset} {
157+ r setbit pos_key [expr {2**32 - 1}] 1
158+ set first_one [r bitpos pos_key 1]
159+ set first_zero [r bitpos pos_key 0]
160+ list $first_one $first_zero
161+ } {4294967295 0}
162+
163+ test {BITOP operations} {
164+ r setbit key1 0 1
165+ r setbit key2 [expr {2**32 - 1}] 1
166+ r bitop or result_key key1 key2
167+
168+ set result_bit1 [r getbit result_key 0]
169+ set result_bit2 [r getbit result_key [expr {2**32 - 1}]]
170+
171+ list $result_bit1 $result_bit2
172+ } {1 1}
173+
134174 test {BITOP AND|OR|XOR don't change the string with single input key} {
135175 r set a " \x01\x02\xff "
136176 r bitop and res1 a
0 commit comments