@@ -20,15 +20,173 @@ describe('VRANDMEMBER', () => {
20
20
} ) ;
21
21
} ) ;
22
22
23
- testUtils . testAll ( 'vRandMember' , async client => {
24
- await client . vAdd ( 'key' , [ 1.0 , 2.0 , 3.0 ] , 'element1' ) ;
25
- await client . vAdd ( 'key' , [ 4.0 , 5.0 , 6.0 ] , 'element2' ) ;
26
-
27
- const result = await client . vRandMember ( 'key' , 1 ) ;
28
- assert . ok ( Array . isArray ( result ) ) ;
29
- assert . equal ( result . length , 1 ) ;
30
- } , {
31
- client : GLOBAL . SERVERS . OPEN ,
32
- cluster : GLOBAL . CLUSTERS . OPEN
23
+ describe ( 'RESP2 tests' , ( ) => {
24
+ testUtils . testAll ( 'vRandMember without count - returns single element as string' , async client => {
25
+ await client . vAdd ( 'key' , [ 1.0 , 2.0 , 3.0 ] , 'element1' ) ;
26
+ await client . vAdd ( 'key' , [ 4.0 , 5.0 , 6.0 ] , 'element2' ) ;
27
+ await client . vAdd ( 'key' , [ 7.0 , 8.0 , 9.0 ] , 'element3' ) ;
28
+
29
+ const result = await client . vRandMember ( 'key' ) ;
30
+ assert . equal ( typeof result , 'string' ) ;
31
+ assert . ok ( [ 'element1' , 'element2' , 'element3' ] . includes ( result as string ) ) ;
32
+ } , {
33
+ client : GLOBAL . SERVERS . OPEN ,
34
+ cluster : GLOBAL . CLUSTERS . OPEN
35
+ } ) ;
36
+
37
+ testUtils . testAll ( 'vRandMember with positive count - returns distinct elements' , async client => {
38
+ await client . vAdd ( 'key' , [ 1.0 , 2.0 , 3.0 ] , 'element1' ) ;
39
+ await client . vAdd ( 'key' , [ 4.0 , 5.0 , 6.0 ] , 'element2' ) ;
40
+ await client . vAdd ( 'key' , [ 7.0 , 8.0 , 9.0 ] , 'element3' ) ;
41
+
42
+ const result = await client . vRandMember ( 'key' , 2 ) ;
43
+ assert . ok ( Array . isArray ( result ) ) ;
44
+ assert . equal ( result . length , 2 ) ;
45
+
46
+ } , {
47
+ client : GLOBAL . SERVERS . OPEN ,
48
+ cluster : GLOBAL . CLUSTERS . OPEN
49
+ } ) ;
50
+
51
+ testUtils . testAll ( 'vRandMember with negative count - allows duplicates' , async client => {
52
+ await client . vAdd ( 'key' , [ 1.0 , 2.0 , 3.0 ] , 'element1' ) ;
53
+ await client . vAdd ( 'key' , [ 4.0 , 5.0 , 6.0 ] , 'element2' ) ;
54
+
55
+ const result = await client . vRandMember ( 'key' , - 5 ) ;
56
+ assert . ok ( Array . isArray ( result ) ) ;
57
+ assert . equal ( result . length , 5 ) ;
58
+
59
+ // All elements should be from our set (duplicates allowed)
60
+ result . forEach ( element => {
61
+ assert . ok ( [ 'element1' , 'element2' ] . includes ( element ) ) ;
62
+ } ) ;
63
+ } , {
64
+ client : GLOBAL . SERVERS . OPEN ,
65
+ cluster : GLOBAL . CLUSTERS . OPEN
66
+ } ) ;
67
+
68
+ testUtils . testAll ( 'vRandMember count exceeds set size - returns entire set' , async client => {
69
+ await client . vAdd ( 'key' , [ 1.0 , 2.0 , 3.0 ] , 'element1' ) ;
70
+ await client . vAdd ( 'key' , [ 4.0 , 5.0 , 6.0 ] , 'element2' ) ;
71
+
72
+ const result = await client . vRandMember ( 'key' , 10 ) ;
73
+ assert . ok ( Array . isArray ( result ) ) ;
74
+ assert . equal ( result . length , 2 ) ; // Only 2 elements exist
75
+
76
+ // Should contain both elements
77
+ assert . ok ( result . includes ( 'element1' ) ) ;
78
+ assert . ok ( result . includes ( 'element2' ) ) ;
79
+ } , {
80
+ client : GLOBAL . SERVERS . OPEN ,
81
+ cluster : GLOBAL . CLUSTERS . OPEN
82
+ } ) ;
83
+
84
+ testUtils . testAll ( 'vRandMember on non-existent key' , async client => {
85
+ // Without count - should return null
86
+ const resultNoCount = await client . vRandMember ( 'nonexistent' ) ;
87
+ assert . equal ( resultNoCount , null ) ;
88
+
89
+ // With count - should return empty array
90
+ const resultWithCount = await client . vRandMember ( 'nonexistent' , 5 ) ;
91
+ assert . ok ( Array . isArray ( resultWithCount ) ) ;
92
+ assert . equal ( resultWithCount . length , 0 ) ;
93
+ } , {
94
+ client : GLOBAL . SERVERS . OPEN ,
95
+ cluster : GLOBAL . CLUSTERS . OPEN
96
+ } ) ;
97
+ } ) ;
98
+
99
+ describe ( 'RESP3 tests' , ( ) => {
100
+ testUtils . testWithClient ( 'vRandMember without count - returns single element as string' , async client => {
101
+ await client . vAdd ( 'resp3-key' , [ 1.0 , 2.0 , 3.0 ] , 'element1' ) ;
102
+ await client . vAdd ( 'resp3-key' , [ 4.0 , 5.0 , 6.0 ] , 'element2' ) ;
103
+ await client . vAdd ( 'resp3-key' , [ 7.0 , 8.0 , 9.0 ] , 'element3' ) ;
104
+
105
+ const result = await client . vRandMember ( 'resp3-key' ) ;
106
+ assert . equal ( typeof result , 'string' ) ;
107
+ assert . ok ( [ 'element1' , 'element2' , 'element3' ] . includes ( result as string ) ) ;
108
+ } , {
109
+ ...GLOBAL . SERVERS . OPEN ,
110
+ clientOptions : {
111
+ RESP : 3
112
+ }
113
+ } ) ;
114
+
115
+ testUtils . testWithClient ( 'vRandMember with positive count - returns distinct elements' , async client => {
116
+ await client . vAdd ( 'resp3-key' , [ 1.0 , 2.0 , 3.0 ] , 'element1' ) ;
117
+ await client . vAdd ( 'resp3-key' , [ 4.0 , 5.0 , 6.0 ] , 'element2' ) ;
118
+ await client . vAdd ( 'resp3-key' , [ 7.0 , 8.0 , 9.0 ] , 'element3' ) ;
119
+
120
+ const result = await client . vRandMember ( 'resp3-key' , 2 ) ;
121
+ assert . ok ( Array . isArray ( result ) ) ;
122
+ assert . equal ( result . length , 2 ) ;
123
+
124
+ // Should be distinct elements (no duplicates)
125
+ const uniqueElements = new Set ( result ) ;
126
+ assert . equal ( uniqueElements . size , 2 ) ;
127
+
128
+ // All elements should be from our set
129
+ result . forEach ( element => {
130
+ assert . ok ( [ 'element1' , 'element2' , 'element3' ] . includes ( element ) ) ;
131
+ } ) ;
132
+ } , {
133
+ ...GLOBAL . SERVERS . OPEN ,
134
+ clientOptions : {
135
+ RESP : 3
136
+ }
137
+ } ) ;
138
+
139
+ testUtils . testWithClient ( 'vRandMember with negative count - allows duplicates' , async client => {
140
+ await client . vAdd ( 'resp3-key' , [ 1.0 , 2.0 , 3.0 ] , 'element1' ) ;
141
+ await client . vAdd ( 'resp3-key' , [ 4.0 , 5.0 , 6.0 ] , 'element2' ) ;
142
+
143
+ const result = await client . vRandMember ( 'resp3-key' , - 5 ) ;
144
+ assert . ok ( Array . isArray ( result ) ) ;
145
+ assert . equal ( result . length , 5 ) ;
146
+
147
+ // All elements should be from our set (duplicates allowed)
148
+ result . forEach ( element => {
149
+ assert . ok ( [ 'element1' , 'element2' ] . includes ( element ) ) ;
150
+ } ) ;
151
+ } , {
152
+ ...GLOBAL . SERVERS . OPEN ,
153
+ clientOptions : {
154
+ RESP : 3
155
+ }
156
+ } ) ;
157
+
158
+ testUtils . testWithClient ( 'vRandMember count exceeds set size - returns entire set' , async client => {
159
+ await client . vAdd ( 'resp3-key' , [ 1.0 , 2.0 , 3.0 ] , 'element1' ) ;
160
+ await client . vAdd ( 'resp3-key' , [ 4.0 , 5.0 , 6.0 ] , 'element2' ) ;
161
+
162
+ const result = await client . vRandMember ( 'resp3-key' , 10 ) ;
163
+ assert . ok ( Array . isArray ( result ) ) ;
164
+ assert . equal ( result . length , 2 ) ; // Only 2 elements exist
165
+
166
+ // Should contain both elements
167
+ assert . ok ( result . includes ( 'element1' ) ) ;
168
+ assert . ok ( result . includes ( 'element2' ) ) ;
169
+ } , {
170
+ ...GLOBAL . SERVERS . OPEN ,
171
+ clientOptions : {
172
+ RESP : 3
173
+ }
174
+ } ) ;
175
+
176
+ testUtils . testWithClient ( 'vRandMember on non-existent key' , async client => {
177
+ // Without count - should return null
178
+ const resultNoCount = await client . vRandMember ( 'resp3-nonexistent' ) ;
179
+ assert . equal ( resultNoCount , null ) ;
180
+
181
+ // With count - should return empty array
182
+ const resultWithCount = await client . vRandMember ( 'resp3-nonexistent' , 5 ) ;
183
+ assert . ok ( Array . isArray ( resultWithCount ) ) ;
184
+ assert . equal ( resultWithCount . length , 0 ) ;
185
+ } , {
186
+ ...GLOBAL . SERVERS . OPEN ,
187
+ clientOptions : {
188
+ RESP : 3
189
+ }
190
+ } ) ;
33
191
} ) ;
34
192
} ) ;
0 commit comments