@@ -157,8 +157,19 @@ struct
157157 | None -> () (* no elem. shrinker provided *)
158158 | Some shrink -> Shrink. list_elems shrink l yield
159159
160+ let gen_cmds_size gen s size_gen = Gen. sized_size size_gen (gen_cmds gen s)
161+
162+ let exp_dist_gen mean =
163+ let unit_gen = Gen. float_bound_inclusive 1.0 in
164+ Gen. map (fun p -> -. mean *. (log p)) unit_gen
165+
166+ let cmd_list_size_dist mean =
167+ let skew = 0.75 in (* to avoid too many empty cmd lists *)
168+ Gen. map (fun p -> int_of_float (p +. skew)) (exp_dist_gen mean)
169+
160170 let arb_cmds s =
161- let cmds_gen = Gen. sized (gen_cmds Spec. arb_cmd s) in
171+ let mean = 10. in (* generate on average ~10 cmds, ignoring skew *)
172+ let cmds_gen = gen_cmds_size Spec. arb_cmd s (cmd_list_size_dist mean) in
162173 let shrinker = shrink_list ?shrink:(Spec. arb_cmd s).shrink in (* pass opt. elem. shrinker *)
163174 let ac = QCheck. make ~shrink: (Shrink. filter (cmds_ok Spec. init_state) shrinker) cmds_gen in
164175 (match (Spec. arb_cmd s).print with
@@ -237,8 +248,6 @@ struct
237248 (let b2 = Spec. postcond c2 s res2 in
238249 b2 && check_obs pref cs1 cs2' (Spec. next_state c2 s))
239250
240- let gen_cmds_size gen s size_gen = Gen. sized_size size_gen (gen_cmds gen s)
241-
242251 (* Shrinks a single cmd, starting in the given state *)
243252 let shrink_cmd arb cmd state =
244253 Option. value (arb state).shrink ~default: Shrink. nil @@ cmd
0 commit comments