package ppx_hegel_compat
Install
dune-project
Dependency
Authors
Maintainers
Sources
md5=d9f942e6f52eebae812a7de84ca8925c
sha512=07516c2970feebd58c10d4ad0390dbc9ab083f94b46b11ab4be6ddd162105dd52ab992f22042efb32595fe7ff5ee0b956c3f6a7af4b8b817865681724edc6426
Description
Abstracts over the differences between standard OCaml's ppxlib AST and OxCaml's ppxlib AST (labeled tuples, constructor modalities) so the Hegel PPX deriver and test rewriter can share a single implementation. Not intended for direct use.
Added to opam-repository:
README
Hegel for OCaml
Hegel is a property-based testing library for OCaml based on Hypothesis, and runs the native libhegel backend in-process.
Install Hegel
opam install hegelThe Hegel version in opam sometimes lags behind the version in Github. To pin the version in Github:
opam pin add hegel "git+https://github.com/hegeldev/hegel-ocaml.git"Hegel calls the native libhegel shared library and locates it automatically at runtime. It looks for the following in order:
$HEGEL_LIBHEGEL_PATH, an explicit path to the library (or a directory containing it)- a sibling hegel-rust checkout at
../hegel-rust/target/release/(then.../debug/) relative to your project - a checksum-verified download of the matching version from hegel-rust's GitHub releases, cached under
~/.cache/hegel-ocaml/libhegel/<version>/.
Set HEGEL_LIBHEGEL_NO_DOWNLOAD=1 to opt out of the download fallback.
Hegel for OCaml supports Linux (amd64/arm64) and macOS (Apple Silicon). macOS amd64 (Intel) has no published libhegel artifact, so on that platform set HEGEL_LIBHEGEL_PATH to a locally built libhegel.dylib.
Quick start
Hegel works with whatever test framework your project already uses. The examples below use Alcotest.
Add hegel and alcotest to your dune test stanza:
(test
(name my_tests)
(libraries hegel alcotest)
(preprocess (pps ppx_hegel_test)))Write a property test using let%hegel_test:
open Hegel
let%hegel_test commutative_addition tc =
let a = draw tc (Generators.integers ~min_value:(-1000) ~max_value:1000 ()) in
let b = draw tc (Generators.integers ~min_value:(-1000) ~max_value:1000 ()) in
assert (a + b = b + a)
;;
let () =
Alcotest.run
"my_tests"
[ "properties", [ Alcotest.test_case "commutative addition" `Quick commutative_addition ] ]
;;Run dune runtest. Hegel generates up to 100 random input pairs and reports the minimal counterexample if it finds one. When a test fails, Hegel prints a report naming each value you drew from the failing case (a = …, b = …, named after the let binding) and a copy-pasteable line to replay it. Alcotest reports the test as failed and exits non-zero.
To override the default settings, attach a [@@settings ...] attribute:
let%hegel_test commutative_addition tc =
let a = draw tc (Generators.integers ()) in
let b = draw tc (Generators.integers ()) in
assert (a + b = b + a)
[@@settings settings ~test_cases:500 ()]
;;For a full walkthrough, see the docs.
Development
just check # Full CI: lint + docs + tests with 100% coverage
just test # Run tests only
Dependencies (4)
-
ppxlib
>= "0.28" -
ocaml
>= "5.1" -
ppx_sexp_conv
>= "v0.16" -
dune
>= "3.16"
Dev Dependencies (1)
-
odoc
with-doc
Used by (2)
-
ppx_hegel_generator
>= "0.16.0" -
ppx_hegel_test
>= "0.16.0"
Conflicts
None