package bisect_ppx
Install
dune-project
Dependency
Authors
Maintainers
Sources
sha256=b6635adfad9804dbaa1858d0be6d4adeaa39585f704f26d43b51e7281320caa6
md5=8b20abf343d34dd00eaf60670f87ee7d
Description
Bisect_ppx helps you test thoroughly. It is a small preprocessor that inserts instrumentation at places in your code, such as if-then-else and match expressions. After you run tests, Bisect_ppx gives a nice HTML report showing which places were visited and which were missed.
Usage is simple - add package bisect_ppx when building tests, run your tests, then run the Bisect_ppx report tool on the generated visitation files.
Published: 18 Jan 2020
README
Bisect_ppx

Bisect_ppx is a code coverage tool for OCaml. It helps you test thoroughly by showing which parts of your code are not tested.
For a live demonstration, see the coverage report Bisect_ppx generates for itself.
Instructions
Most of these commands go in a Makefile or other script, so that you only have to run that script, then refresh your browser.
Install Bisect_ppx.
opam install bisect_ppxAdd
bisect_ppxto your library- or executable-under-test. Instructions are also available for Ocamlbuild, ocamlfind, and OASIS.(library (public_name my_code) (preprocess (pps bisect_ppx -conditional)))Don't add
bisect_ppxto your tests.Run your test binary. In addition to testing your code, it will produce one or more files with names like
bisect0001.out.BISECT_ENABLE=yes dune runtestGenerate the coverage report.
bisect-ppx-report -I _build/default/ -html coverage/ `find . -name 'bisect*.out'`Open
coverage/index.html!In each file of the report,
- Green lines contain expressions, all of which were visited.
- Red lines contain expressions, none of which were visited.
- Yellow lines contain expressions, some of which were visited, but others not.
- White lines are those that don't contain visitable expressions. They may have type declarations, keywords, or something else that Bisect_ppx did not, or cannot instrument.
See also the advanced usage.
Coveralls.io
You can generate a Coveralls json report using the bisect-ppx-report tool with the -coveralls flag. Note that Bisect_ppx reports are more precise than Coveralls, which only considers whole lines as visited or not. The built-in Coveralls reporter will consider a full line unvisited if any point on that line is not visited, check the html report to verify precisly which points are not covered.
Example using the built-in Coveralls reporter on Travis CI (which sets $TRAVIS_JOB_ID):
bisect-ppx-report \
-I _build/default/ \
-coveralls coverage.json \
-service-name travis-ci \
-service-job-id $TRAVIS_JOB_ID \
`find . -name 'bisect*.out'`
curl -L -F json_file=@./coverage.json https://coveralls.io/api/v1/jobsBisect_ppx in practice
A small sample of projects using Bisect_ppx:
License
Bisect_ppx is available under the Mozilla Public License 2.0 (MPL). To summarize, you can incorporate Bisect_ppx into proprietary projects. If you make modifications to Bisect_ppx, you have to open-source them. The rest of your project remains proprietary.
Essentially, this is like the BSD or MIT licenses, except that if you include a customized Bisect_ppx in a release (as opposed to private use), you have to make the altered source visible. This can be done by contributing the changes back, keeping Bisect_ppx in a visible fork, or if your bigger project itself also happens to be open source.
Besides proprietary licenses, MPL is compatible with BSD/MIT/Apache- and (L)GPL-licensed projects. See the MPL 2.0 FAQ.
The Ocamlbuild plugin is dedicated to the public domain.
Contributing
Bug reports and pull requests are warmly welcome. Bisect_ppx is developed on GitHub, so please open an issue.
To get the latest development version of Bisect_ppx using OPAM, run
opam source --dev-repo --pin bisect_ppxYou will now have a bisect_ppx subdirectory to work in.
Dependencies (5)
-
ppx_tools_versioned
>= "5.2.3" -
ocaml-migrate-parsetree
>= "1.4.0" & < "2.0.0" -
ocaml
>= "4.02.0" - dune
- base-unix
Used by (49)
- ambient-context
- ambient-context-eio
- ambient-context-lwt
-
azure-cosmos-db
>= "0.2.3" -
base58
>= "0.1.2" -
bio_io
< "0.5.1" - bisect-summary
-
bisect_ppx-ocamlbuild
>= "1.0.1" - checked_oint
- cll
-
cuid
>= "0.2" - exit
-
GT
>= "0.5.2" - gobba
-
hc
< "0.2" - jose
- little_logger
-
lwt
< "5.3.0" | >= "6.0.0~alpha00" - lwt_direct
-
markup
= "0.8.1" - mazeppa
-
memo
< "0.2" -
minicaml
>= "0.3.3" - mirage-block-ccm
- mirage-btrees
- mnd
-
mssql
< "2.0.3" - obeam
-
ocaml-protoc-plugin
>= "5.0.0" -
ocamlformat
= "0.11.0" -
ocveralls
>= "0.3.2" -
odoc
< "2.1.1" - omg
- opazl
- partition_map
- pf-qubes
-
pgx
< "1.0" -
ppx_make
>= "0.3.4" -
ppx_subliner
>= "0.2.0" -
pyml_bindgen
< "0.3.0" - reed-solomon-erasure
- relude
- rfc6287
- so
- tezos-bls12-381-polynomial
-
tezos-plompiler
= "0.1.3" -
tezos-plonk
= "0.1.3" -
validate
>= "1.0.0" -
zanuda
>= "1.1.0"
Conflicts (1)
-
ocveralls
<= "0.3.2"
