; Differential testing: OCaml wire vs EverParse C parsers ; ; Workflow: ; 1. BUILD_EVERPARSE=1 dune build @space-wire/test/diff/gen_c ; (generates .3d schemas, runs EverParse, produces C stubs) ; 2. BUILD_EVERPARSE=1 dune build @space-wire/test/diff/diff ; (runs differential tests) ; ; EverParse is slow, so code generation only runs when BUILD_EVERPARSE=1. ; Generated C code can be promoted and committed for C API consumers. ; Generate .3d files from SpaceOS Wire codecs (executable (name gen_schemas) (modules gen_schemas) (enabled_if (= %{env:BUILD_EVERPARSE=} "1")) (libraries space_wire_3d)) (rule (alias gen_schemas) (enabled_if (= %{env:BUILD_EVERPARSE=} "1")) (targets SpaceOSFrame.3d ErrorPayload.3d DpPayload.3d Superblock.3d) (deps gen_schemas.exe) (action (run ./gen_schemas.exe))) ; Generate EverParse C code and differential test infrastructure ; Run with: BUILD_EVERPARSE=1 dune build @space-wire/test/diff/gen_c (executable (name gen_c) (modules gen_c) (enabled_if (= %{env:BUILD_EVERPARSE=} "1")) (libraries space_wire_3d wire.diff-gen)) (rule (alias gen_c) (enabled_if (= %{env:BUILD_EVERPARSE=} "1")) (targets (dir schemas) stubs.c stubs.ml diff_test.ml) (deps gen_c.exe) (action (run ./gen_c.exe schemas))) ; Compile C stubs (includes EverParse generated C) ; NOTE: Only builds with BUILD_EVERPARSE=1 after running @gen_c first (library (name stubs) (modules stubs) (enabled_if (= %{env:BUILD_EVERPARSE=} "1")) (foreign_stubs (language c) (names stubs) (flags :standard -I schemas))) (executable (name diff_test) (modules diff_test) (enabled_if (= %{env:BUILD_EVERPARSE=} "1")) (libraries stubs)) (rule (alias diff) (enabled_if (= %{env:BUILD_EVERPARSE=} "1")) (deps diff_test.exe) (action (run ./diff_test.exe)))