package ppx_hegel_test

  1. Overview
  2. Docs
PPX expander for Hegel test definitions with Antithesis support

Install

dune-project
 Dependency

Authors

Maintainers

Sources

hegel-0.16.0-opam.tar.gz
md5=d9f942e6f52eebae812a7de84ca8925c
sha512=07516c2970feebd58c10d4ad0390dbc9ab083f94b46b11ab4be6ddd162105dd52ab992f22042efb32595fe7ff5ee0b956c3f6a7af4b8b817865681724edc6426

Description

Provides the [let%hegel_test] extension.

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 hegel

The 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:

  1. $HEGEL_LIBHEGEL_PATH, an explicit path to the library (or a directory containing it)
  2. a sibling hegel-rust checkout at ../hegel-rust/target/release/ (then .../debug/) relative to your project
  3. 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 (6)

  1. hegel = version
  2. ppx_hegel_compat = version
  3. ppx_js_style >= "v0.17"
  4. ppxlib >= "0.28"
  5. ocaml >= "5.1"
  6. dune >= "3.16"

Dev Dependencies (5)

  1. odoc with-doc
  2. yojson with-test & >= "1.7"
  3. core_unix with-test & >= "v0.17"
  4. core with-test & >= "v0.17"
  5. alcotest with-test & >= "1.7"

Used by (1)

  1. ppx_hegel_generator >= "0.16.0"

Conflicts

None