Module Wire_diff_genSource

Code generation for EverParse differential testing.

Generates .3d files from Wire schemas, invokes EverParse, and produces C stubs, OCaml externals, and a test runner for comparing OCaml codecs against EverParse-generated C parsers.

Typical usage (gen_c.ml):

let run ~struct_ ~module_ =
  let schemas =
    [ Wire_diff_gen.schema ~name:"MyFrame" ~struct_ ~module_ |> Option.get ]
  in
  Wire_diff_gen.generate ~schema_dir:"schemas" ~outdir:"." schemas
Sourceval schema : name:string -> struct_:Wire.Everparse.Raw.struct_ -> module_:Wire.Everparse.Raw.module_ -> schema option

schema ~name ~struct_ ~module_ creates a schema if the struct has a known fixed wire size. Returns None for variable-length structs.

Full Pipeline

Sourceval generate : schema_dir:string -> outdir:string -> ?num_values:int -> schema list -> unit

generate ~schema_dir ~outdir schemas runs the full pipeline: 1. Generate .3d files in schema_dir 2. Invoke EverParse to produce C parsers 3. Generate stubs.c, stubs.ml, diff_test.ml in outdir

Requires EverParse installed at ~/.local/everparse/.

Individual Steps

Sourceval generate_3d_files : outdir:string -> schema list -> unit

Delegates to Wire_3d.generate_3d.

Sourceval run_everparse : ?quiet:bool -> outdir:string -> schema list -> unit

Delegates to Wire_3d.run_everparse.

Sourceval generate_c_stubs : schema_dir:string -> outdir:string -> schema list -> unit

generate_c_stubs ~schema_dir ~outdir schemas generates stubs.c with OCaml C stubs using Wire_3d.everparse_name.

Sourceval generate_ml_stubs : outdir:string -> schema list -> unit

generate_ml_stubs ~outdir schemas generates stubs.ml with OCaml externals.

Sourceval generate_test_runner : outdir:string -> ?num_values:int -> schema list -> unit

generate_test_runner ~outdir schemas generates diff_test.ml test runner.