@@ -140,6 +140,48 @@ describe('roulette', () => {
140140 const variant = selectVariantUsingRoulette ( [ banditData ] , epicTest , rand ) ;
141141 expect ( variant ) . toBeDefined ( ) ;
142142 } ) ;
143+
144+ it ( 'should ensure a minimum of 10% for variants with mean of 0' , ( ) => {
145+ const variants = [
146+ {
147+ variantName : 'v1' ,
148+ mean : 2 ,
149+ } ,
150+ {
151+ variantName : 'v2' ,
152+ mean : 0 ,
153+ } ,
154+ {
155+ variantName : 'v3' ,
156+ mean : 0 ,
157+ } ,
158+ ] ;
159+ const banditData = {
160+ testName : 'example-1' ,
161+ bestVariants : variants ,
162+ variants : variants ,
163+ } ;
164+
165+ /**
166+ * variantsWithWeights: [
167+ * { variantName: 'v2', weight: 0.1 },
168+ * { variantName: 'v3', weight: 0.1 },
169+ * { variantName: 'v1', weight: 1 }
170+ * ]
171+ *
172+ * normalisedWeights: [
173+ * { variantName: 'v2', weight: 0.08333333333333334 },
174+ * { variantName: 'v3', weight: 0.08333333333333334 },
175+ * { variantName: 'v1', weight: 0.8333333333333334 }
176+ * ]
177+ */
178+ const variantSelection1 = selectVariantUsingRoulette ( [ banditData ] , epicTest , 0.08 ) ;
179+ const variantSelection2 = selectVariantUsingRoulette ( [ banditData ] , epicTest , 0.16 ) ;
180+ const variantSelection3 = selectVariantUsingRoulette ( [ banditData ] , epicTest , 0.2 ) ;
181+ expect ( variantSelection1 ) . toBe ( epicTest . variants [ 1 ] ) ;
182+ expect ( variantSelection2 ) . toBe ( epicTest . variants [ 2 ] ) ;
183+ expect ( variantSelection3 ) . toBe ( epicTest . variants [ 0 ] ) ;
184+ } ) ;
143185} ) ;
144186
145187describe ( 'rouletteTest2' , ( ) => {
0 commit comments