@@ -20,15 +20,173 @@ describe('VRANDMEMBER', () => {
2020 } ) ;
2121 } ) ;
2222
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+ } ) ;
33191 } ) ;
34192} ) ;
0 commit comments