1
1
import { strict as assert } from 'node:assert' ;
2
2
import testUtils , { GLOBAL } from '../test-utils' ;
3
- import BITOP from './BITOP' ;
3
+ import BITOP , { BitOperations } from './BITOP' ;
4
4
import { parseArgs } from './generic-transformers' ;
5
5
6
6
describe ( 'BITOP' , ( ) => {
@@ -20,13 +20,77 @@ describe('BITOP', () => {
20
20
} ) ;
21
21
} ) ;
22
22
23
- testUtils . testAll ( 'bitOp' , async client => {
23
+ for ( const op of [ 'AND' , 'OR' , 'XOR' ] as BitOperations [ ] ) {
24
+ testUtils . testAll ( `bitOp ${ op } with non-existing keys` , async client => {
25
+ assert . equal (
26
+ await client . bitOp ( op , '{tag}destKey' , [ '{tag}key1' , '{tag}key2' ] ) ,
27
+ 0
28
+ ) ;
29
+ } , {
30
+ client : GLOBAL . SERVERS . OPEN ,
31
+ cluster : GLOBAL . CLUSTERS . OPEN
32
+ } ) ;
33
+
34
+ testUtils . testAll ( `bitOp ${ op } with existing keys` , async client => {
35
+ await client . set ( '{tag}key1' , 'value1' ) ;
36
+ await client . set ( '{tag}key2' , 'value2' ) ;
37
+
38
+ assert . equal (
39
+ await client . bitOp ( op , '{tag}destKey' , [ '{tag}key1' , '{tag}key2' ] ) ,
40
+ 6
41
+ ) ;
42
+ } , {
43
+ client : GLOBAL . SERVERS . OPEN ,
44
+ cluster : GLOBAL . CLUSTERS . OPEN
45
+ } ) ;
46
+ }
47
+
48
+ // NOT operation requires only one key
49
+ testUtils . testAll ( 'bitOp NOT with non-existing keys' , async client => {
24
50
assert . equal (
25
- await client . bitOp ( 'AND ' , '{tag}destKey' , '{tag}key' ) ,
51
+ await client . bitOp ( 'NOT ' , '{tag}destKey' , '{tag}key' ) ,
26
52
0
27
53
) ;
28
54
} , {
29
55
client : GLOBAL . SERVERS . OPEN ,
30
56
cluster : GLOBAL . CLUSTERS . OPEN
31
57
} ) ;
58
+
59
+ testUtils . testAll ( 'bitOp NOT with existing keys' , async client => {
60
+ await client . set ( '{tag}key' , 'value' ) ;
61
+
62
+ assert . equal (
63
+ await client . bitOp ( 'NOT' , '{tag}destKey' , '{tag}key' ) ,
64
+ 5
65
+ ) ;
66
+ } , {
67
+ client : GLOBAL . SERVERS . OPEN ,
68
+ cluster : GLOBAL . CLUSTERS . OPEN
69
+ } ) ;
70
+
71
+ // newer operations supported since Redis 8.2
72
+ for ( const op of [ 'DIFF' , 'DIFF1' , 'ANDOR' , 'ONE' ] as BitOperations [ ] ) {
73
+ testUtils . testAll ( `bitOp ${ op } with non-existing keys` , async client => {
74
+ assert . equal (
75
+ await client . bitOp ( op , '{tag}destKey' , [ '{tag}key1' , '{tag}key2' ] ) ,
76
+ 0
77
+ ) ;
78
+ } , {
79
+ client : { ...GLOBAL . SERVERS . OPEN , minimumDockerVersion : [ 8 , 2 ] } ,
80
+ cluster : { ...GLOBAL . CLUSTERS . OPEN , minimumDockerVersion : [ 8 , 2 ] } ,
81
+ } ) ;
82
+
83
+ testUtils . testAll ( `bitOp ${ op } with existing keys` , async client => {
84
+ await client . set ( '{tag}key1' , 'value1' ) ;
85
+ await client . set ( '{tag}key2' , 'value2' ) ;
86
+
87
+ assert . equal (
88
+ await client . bitOp ( op , '{tag}destKey' , [ '{tag}key1' , '{tag}key2' ] ) ,
89
+ 6
90
+ ) ;
91
+ } , {
92
+ client : { ...GLOBAL . SERVERS . OPEN , minimumDockerVersion : [ 8 , 2 ] } ,
93
+ cluster : { ...GLOBAL . CLUSTERS . OPEN , minimumDockerVersion : [ 8 , 2 ] } ,
94
+ } ) ;
95
+ }
32
96
} ) ;
0 commit comments