@@ -257,15 +257,20 @@ let returning_or_exc_ a = Fun.Ret_ignore_or_exc a
257257let (@->) a b = Fun. Fn (a,b)
258258
259259type _ elem =
260- | Elem : string * ('ftyp , 'r , 's ) Fun .fn * 'ftyp -> 's elem
260+ | Elem :
261+ { name : string
262+ ; fntyp : ('ftyp , 'r , 's ) Fun .fn
263+ ; value : 'ftyp
264+ }
265+ -> 's elem
261266
262267type 's api = (int * 's elem ) list
263268
264269let val_ name value fntyp =
265- (1 , Elem ( name, fntyp, value) )
270+ (1 , Elem { name ; fntyp ; value } )
266271
267272let val_freq freq name value fntyp =
268- (freq, Elem ( name, fntyp, value) )
273+ (freq, Elem { name ; fntyp ; value } )
269274
270275module type Spec = sig
271276 type t
@@ -295,12 +300,13 @@ module MakeCmd (ApiSpec : Spec) : Internal.CmdSpec = struct
295300 (* Operation name, typed argument list, return type descriptor, printer, shrinker, function *)
296301 type cmd =
297302 Cmd :
298- string *
299- ('ftyp , 'r ) Args .args *
300- ('r , deconstructible , t , _ ) ty *
301- (('ftyp , 'r ) Args .args -> string ) *
302- (('ftyp , 'r ) Args .args QCheck.Shrink .t ) *
303- 'ftyp
303+ { name : string
304+ ; args : ('ftyp , 'r ) Args .args
305+ ; rty : ('r , deconstructible , t , _ ) ty
306+ ; print : (('ftyp , 'r ) Args .args -> string )
307+ ; shrink : (('ftyp , 'r ) Args .args QCheck.Shrink .t )
308+ ; f : 'ftyp
309+ }
304310 -> cmd
305311
306312 type res =
@@ -379,20 +385,20 @@ module MakeCmd (ApiSpec : Spec) : Internal.CmdSpec = struct
379385 | _ -> failwith " Fn/Some: should not happen" ))
380386
381387 let api =
382- List. map (fun (wgt , Elem ( name , fdesc , f ) ) ->
388+ List. map (fun (wgt , Elem { name ; fntyp = fdesc ; value = f } ) ->
383389 let rty = ret_type fdesc in
384390 let open QCheck.Gen in
385391 (wgt, gen_args_of_desc fdesc >> = fun args ->
386392 let print = gen_printer name fdesc in
387393 let shrink = gen_shrinker_of_desc fdesc in
388- return (Cmd ( name, args, rty, print, shrink, f) ))) ApiSpec. api
394+ return (Cmd { name ; args ; rty ; print ; shrink ; f } ))) ApiSpec. api
389395
390396 let gen_cmd : cmd QCheck.Gen.t = QCheck.Gen. frequency api
391397
392- let show_cmd (Cmd ( _ , args , _ , print , _ , _ ) ) = print args
398+ let show_cmd (Cmd { args ; print ; _ } ) = print args
393399
394- let shrink_cmd (Cmd ( name , args , rty , print , shrink , f ) ) =
395- QCheck.Iter. map (fun args -> Cmd (name, args,rty,print,shrink,f)) ( shrink args)
400+ let shrink_cmd (Cmd cmd ) =
401+ QCheck.Iter. map (fun args -> Cmd { cmd with args }) (cmd. shrink cmd. args)
396402
397403 (* Unsafe if called on two [res] whose internal values are of different
398404 types. *)
@@ -457,6 +463,6 @@ module MakeCmd (ApiSpec : Spec) : Internal.CmdSpec = struct
457463 apply_f (f arg) rem state
458464
459465 let run cmd state =
460- let Cmd (_, args, rty, _, _, f) = cmd in
466+ let Cmd { args ; rty ; f ; _ } = cmd in
461467 Res (rty, apply_f f args state)
462468end
0 commit comments