package alcotest

  1. Overview
  2. Docs
Alcotest is a lightweight and colourful test framework

Install

dune-project
 Dependency

Authors

Maintainers

Sources

alcotest-1.8.0.tbz
sha256=cba1bd01707c8c55b4764bb0df8c9c732be321e1f1c1a96a406e56d8dbca1d0e
sha512=eebb034c990abd253f526e848a99881686d7bd3c7d1b1d373953d568d062e3d5aaa79b6b4807455aaa9a98710eca4ada30e816a0134717a380619a597575564d

Description

Alcotest exposes simple interface to perform unit tests. It exposes a simple TESTABLE module type, a check function to assert test predicates and a run function to perform a list of unit -> unit test callbacks.

Alcotest provides a quiet and colorful output where only faulty runs are fully displayed at the end of the run (with the full logs ready to inspect), with a simple (yet expressive) query language to select the tests to run.

Published: 25 Jul 2024

README

A lightweight and colourful test framework.


Alcotest exposes a simple interface to perform unit tests. It exposes a simple TESTABLE module type, a check function to assert test predicates and a run function to perform a list of unit -> unit test callbacks.

Alcotest provides a quiet and colorful output where only faulty runs are fully displayed at the end of the run (with the full logs ready to inspect), with a simple (yet expressive) query language to select the tests to run. See the manpage for details.

The API documentation can be found here. For information on contributing to Alcotest, see CONTRIBUTING.md.

OCaml-CI Build Status Alcotest Documentation


Examples

A simple example (taken from examples/simple.ml):

Generated by the following test suite specification:

(* Build with `ocamlbuild -pkg alcotest simple.byte` *)

(* A module with functions to test *)
module To_test = struct
  let lowercase = String.lowercase_ascii
  let capitalize = String.capitalize_ascii
  let str_concat = String.concat ""
  let list_concat = List.append
end

(* The tests *)
let test_lowercase () =
  Alcotest.(check string) "same string" "hello!" (To_test.lowercase "hELLO!")

let test_capitalize () =
  Alcotest.(check string) "same string" "World." (To_test.capitalize "world.")

let test_str_concat () =
  Alcotest.(check string) "same string" "foobar" (To_test.str_concat ["foo"; "bar"])

let test_list_concat () =
  Alcotest.(check (list int)) "same lists" [1; 2; 3] (To_test.list_concat [1] [2; 3])

(* Run it *)
let () =
  let open Alcotest in
  run "Utils" [
      "string-case", [
          test_case "Lower case"     `Quick test_lowercase;
          test_case "Capitalization" `Quick test_capitalize;
        ];
      "string-concat", [ test_case "String mashing" `Quick test_str_concat  ];
      "list-concat",   [ test_case "List mashing"   `Slow  test_list_concat ];
    ]

The result is a self-contained binary which displays the test results. Use dune exec examples/simple.exe -- --help to see the runtime options.

Here's an example of a of failing test suite:

By default, only the first failing test log is printed to the console (and all test logs are captured on disk). Pass --show-errors to print all error messages.

Using Alcotest with opam and Dune

Add (alcotest :with-test) to the depends stanza of your dune-project file, or "alcotest" {with-test} to your opam file. Use the with-test package variable to declare your tests opam dependencies. Call opam to install them:

$ opam install --deps-only --with-test .

You can then declare your test and link with Alcotest: (test (libraries alcotest …) …), and run your tests:

$ dune runtest

Selecting tests to execute

You can filter which tests to run by supplying a regular expression matching the names of the tests to execute, or by passing a regular expression and a comma-separated list of test numbers (or ranges of test numbers, e.g. 2,4..9):

$ ./simple.native test '.*concat*'
Testing Utils.
[SKIP]     string-case            0   Lower case.
[SKIP]     string-case            1   Capitalization.
[OK]       string-concat          0   String mashing.
[OK]       list-concat            0   List mashing.
The full test results are available in `_build/_tests`.
Test Successful in 0.000s. 2 tests run.

$ ./simple.native test 'string-case' '1..3'
Testing Utils.
[SKIP]     string-case            0   Lower case.
[OK]       string-case            1   Capitalization.
[SKIP]     string-concat          0   String mashing.
[SKIP]     list-concat            0   List mashing.
The full test results are available in `_build/_tests`.
Test Successful in 0.000s. 1 test run.

Note that you cannot filter by test case name (i.e. Lower case or Capitalization), you must filter by test name & number instead.

See the examples directory for more examples.

Quick and Slow tests

In general you should use `Quick tests: tests that are ran on any invocations of the test suite. You should only use `Slow tests for stress tests that are ran only on occasion (typically before a release or after a major change). These slow tests can be suppressed by passing the -q flag on the command line, e.g.:

$ ./test.exe -q # run only the quick tests
$ ./test.exe    # run quick and slow tests

Passing custom options to the tests

In most cases, the base tests are unit -> unit functions. However, it is also possible to pass an extra option to all the test functions by using 'a -> unit, where 'a is the type of the extra parameter.

In order to do this, you need to specify how this extra parameter is read on the command-line, by providing a Cmdliner term for command-line arguments which explains how to parse and serialize values of type 'a (note: do not use positional arguments, only optional arguments are supported).

For instance:

let test_nice i = Alcotest.(check int) "Is it a nice integer?" i 42

let int =
  let doc = "What is your preferred number?" in
  Cmdliner.Arg.(required & opt (some int) None & info ["n"] ~doc ~docv:"NUM")

let () =
  Alcotest.run_with_args "foo" int [
    "all", ["nice", `Quick, test_nice]
  ]

Will generate test.exe such that:

$ test.exe test
test.exe: required option -n is missing

$ test.exe test -n 42
Testing foo.
[OK]                all          0   int.

Lwt

Alcotest provides an Alcotest_lwt module that you could use to wrap Lwt test cases. The basic idea is that instead of providing a test function in the form unit -> unit, you provide one with the type unit -> unit Lwt.t and alcotest-lwt calls Lwt_main.run for you.

However, there are a couple of extra features:

  • If an async exception occurs, it will cancel your test case for you and fail it (rather than exiting the process).
  • You get given a switch, which will be turned off when the test case finishes (or fails). You can use that to free up any resources.

For instance:

let free () = print_endline "freeing all resources"; Lwt.return ()

let test_lwt switch () =
  Lwt_switch.add_hook (Some switch) free;
  Lwt.async (fun () -> failwith "All is broken");
  Lwt_unix.sleep 10.

let () =
  Lwt_main.run @@ Alcotest_lwt.run "foo" [
    "all", [
      Alcotest_lwt.test_case "one" `Quick test_lwt
    ]
  ]

Will generate:

$ test.exe
Testing foo.
[ERROR]             all          0   one.
-- all.000 [one.] Failed --
in _build/_tests/all.000.output:
freeing all resources
[failure] All is broken

Comparison with other testing frameworks

The README is pretty clear about that:

Alcotest is the only testing framework using colors!

More seriously, Alcotest is similar to ounit but it fixes a few of the problems found in that library:

  • Alcotest has a nicer output, it is easier to see what failed and what succeeded and to read the log outputs of the failed tests;
  • Alcotest uses combinators to define pretty-printers and comparators between the things to test.

Other nice tools doing different kind of testing also exist:

  • qcheck does random generation and property testing (e.g. Quick Check);
  • crowbar and bun are similar to qcheck, but use compiler-directed randomness, i.e. they take advantage of the AFL support the OCaml compiler;
  • ppx_inline_tests allows to write tests in the same file as your source-code; they will be run only in a special mode of compilation.

Dependencies (9)

  1. ocaml-syntax-shims
  2. uutf >= "1.0.1"
  3. stdlib-shims
  4. re >= "1.7.2"
  5. cmdliner >= "1.2.0"
  6. astring
  7. fmt >= "0.8.7"
  8. ocaml >= "4.08"
  9. dune >= "3.0"

Dev Dependencies (2)

  1. odoc with-doc
  2. cmdliner with-test & < "2.0.0"

  1. ahrocksdb
  2. albatross >= "1.5.4"
  3. alg_structs_qcheck
  4. algaeff
  5. ambient-context
  6. ambient-context-eio
  7. ambient-context-lwt
  8. angstrom >= "0.7.0"
  9. ansi >= "0.6.0"
  10. anycache >= "0.7.4"
  11. anycache-async
  12. anycache-lwt
  13. arc
  14. archetype >= "1.4.2"
  15. archi
  16. arp
  17. arrakis < "1.1.0"
  18. art
  19. asai
  20. asak >= "0.2"
  21. asli >= "0.2.0"
  22. asn1-combinators >= "0.2.5"
  23. atd >= "2.3.3"
  24. atdgen >= "2.10.0"
  25. atdpy
  26. atdts
  27. avro-simple
  28. backoff
  29. base32
  30. base64 >= "2.1.2" & < "3.2.0" | >= "3.4.0"
  31. bastet
  32. bastet_lwt
  33. bech32
  34. bechamel >= "0.5.0"
  35. bigarray-overlap
  36. bigstringaf
  37. bitlib
  38. blake2
  39. bloomf
  40. bls12-381 < "0.4.1" | >= "3.0.0" & < "18.0"
  41. bls12-381-hash
  42. bls12-381-js >= "0.4.2"
  43. bls12-381-js-gen >= "0.4.2"
  44. bls12-381-legacy
  45. bls12-381-signature
  46. bls12-381-unix
  47. blurhash
  48. brisk-reconciler
  49. builder-web
  50. bytebuffer
  51. ca-certs
  52. ca-certs-nss
  53. cachet
  54. cachet-lwt
  55. cachet-solo5
  56. cactus
  57. caldav
  58. calendar >= "3.0.0"
  59. calendars >= "2.0.0"
  60. callipyge
  61. camlix
  62. camlkit
  63. camlkit-base
  64. capnp-rpc
  65. capnp-rpc-unix
  66. caqti >= "1.7.0"
  67. caqti-async >= "1.7.0"
  68. caqti-driver-mariadb >= "1.7.0"
  69. caqti-driver-postgresql >= "1.7.0"
  70. caqti-driver-sqlite3 >= "1.7.0"
  71. caqti-dynload >= "2.0.1"
  72. caqti-eio
  73. caqti-lwt >= "1.7.0"
  74. caqti-miou
  75. carray
  76. carton < "1.0.0"
  77. carton-git
  78. carton-lwt >= "0.4.3" & < "1.0.0"
  79. catala >= "0.6.0"
  80. cborl
  81. cf-lwt
  82. chacha
  83. chamelon
  84. chamelon-unix
  85. charrua-client
  86. charrua-server
  87. checked_oint
  88. checkseum >= "0.0.3"
  89. cid
  90. clarity-lang
  91. class_group_vdf
  92. cohttp
  93. cohttp-curl-async
  94. cohttp-curl-lwt
  95. cohttp-eio >= "6.0.0~beta2"
  96. colombe >= "0.2.0"
  97. color
  98. commons
  99. conan
  100. conan-cli
  101. conan-database
  102. conan-lwt
  103. conan-unix
  104. conex < "0.10.0"
  105. conex-mirage-crypto
  106. conformist
  107. cookie
  108. corosync
  109. cow >= "2.2.0"
  110. crockford
  111. css
  112. css-parser
  113. cstruct
  114. cstruct-sexp
  115. ctypes-zarith
  116. cuid
  117. cure2
  118. curly
  119. current
  120. current-albatross-deployer
  121. current_git >= "0.7.1"
  122. current_incr
  123. data-encoding
  124. dates_calc
  125. dbase4
  126. decimal >= "0.3.0"
  127. decompress
  128. depyt
  129. digestif >= "0.9.0"
  130. dispatch >= "0.4.1"
  131. dkim
  132. dkim-bin
  133. dkim-mirage
  134. dkml-dune-dsl-show
  135. dkml-install
  136. dkml-install-installer
  137. dkml-install-runner
  138. dmarc
  139. dns >= "4.4.1"
  140. dns-cli
  141. dns-client >= "4.6.3"
  142. dns-forward-lwt-unix
  143. dns-resolver
  144. dns-server
  145. dns-tsig
  146. dnssd
  147. dnssec
  148. docfd >= "2.2.0"
  149. dockerfile >= "8.2.7" & < "8.3.4"
  150. domain-local-await >= "0.2.1"
  151. domain-local-timeout
  152. domain-name
  153. dream
  154. dream-htmx
  155. dream-pure
  156. dscheck >= "0.1.1"
  157. duff
  158. dune-deps >= "1.4.0"
  159. dune-release >= "1.0.0"
  160. duration
  161. echo
  162. eio < "0.12"
  163. eio_linux
  164. eio_windows
  165. emile
  166. encore
  167. eqaf >= "0.5"
  168. equinoxe
  169. equinoxe-cohttp
  170. equinoxe-hlc
  171. ezgzip
  172. ezjsonm
  173. ezjsonm-lwt
  174. FPauth
  175. FPauth-core
  176. FPauth-responses
  177. FPauth-strategies
  178. faraday != "0.2.0"
  179. farfadet
  180. fat-filesystem
  181. fehu
  182. ff
  183. ff-pbt
  184. flex-array
  185. flux
  186. fluxt
  187. forester >= "5.0"
  188. fsevents-lwt
  189. functoria
  190. fungi
  191. geojson
  192. geoml >= "0.1.1"
  193. git
  194. git-cohttp
  195. git-cohttp-unix
  196. git-kv != "0.1.3"
  197. git-mirage
  198. git-net
  199. git-split
  200. git-unix
  201. gitlab-unix
  202. glicko2
  203. gmap
  204. gobba
  205. gpt
  206. graphql
  207. graphql-async
  208. graphql-cohttp >= "0.13.0"
  209. graphql-lwt
  210. graphql_parser != "0.11.0"
  211. graphql_ppx
  212. h1
  213. h1_parser
  214. h2
  215. hacl
  216. hacl-star >= "0.6.0"
  217. hacl_func
  218. hacl_x25519
  219. handlebars-ml >= "0.2.1"
  220. highlexer
  221. hkdf
  222. hockmd
  223. html_of_jsx
  224. http
  225. http-multipart-formdata < "2.0.0"
  226. httpaf >= "0.2.0"
  227. httpcats
  228. httpun
  229. httpun-ws
  230. hugin
  231. huml
  232. hvsock
  233. icalendar
  234. imagelib
  235. index
  236. inferno >= "20220603"
  237. influxdb-async
  238. influxdb-lwt
  239. inquire < "0.2.0"
  240. intel_hex >= "0.3"
  241. interval-map
  242. iomux
  243. irmin
  244. irmin-bench
  245. irmin-chunk
  246. irmin-cli
  247. irmin-containers
  248. irmin-fs
  249. irmin-git
  250. irmin-graphql
  251. irmin-pack
  252. irmin-pack-tools
  253. irmin-test != "3.6.1"
  254. irmin-tezos
  255. irmin-unix
  256. irmin-watcher
  257. jekyll-format
  258. jose
  259. json-data-encoding >= "0.9" & < "1.1.1"
  260. json_decoder
  261. jsonfeed
  262. jsonxt
  263. junit_alcotest < "2.3.0"
  264. jwto
  265. kaun
  266. kcas >= "0.6.0"
  267. kcas_data >= "0.6.0"
  268. kdf
  269. ke >= "0.2"
  270. kkmarkdown
  271. kmt
  272. lambda-runtime
  273. lambda_streams
  274. lambda_streams_async
  275. lambdapi
  276. layoutz
  277. letters
  278. liquid_ml >= "0.1.3"
  279. lmdb >= "1.0"
  280. lockfree >= "0.3.1"
  281. logical
  282. logtk >= "1.6"
  283. lp
  284. lp-glpk
  285. lp-glpk-js < "0.5.0"
  286. lp-gurobi < "0.5.0"
  287. lru
  288. lt-code
  289. luv
  290. mazeppa
  291. mbr-format
  292. mdx >= "1.6.0"
  293. mec
  294. mechaml >= "1.2.1"
  295. merlin = "4.17.1-501"
  296. merlin-lib >= "4.17.1-501"
  297. metrics
  298. middleware
  299. mimic
  300. minicaml = "0.3.1" | >= "0.4"
  301. mirage >= "4.0.0"
  302. mirage-block-partition
  303. mirage-block-ramdisk
  304. mirage-channel >= "4.0.1"
  305. mirage-crypto-ec
  306. mirage-flow-unix
  307. mirage-kv >= "2.0.0"
  308. mirage-kv-mem
  309. mirage-kv-unix >= "3.0.0"
  310. mirage-logs
  311. mirage-nat
  312. mirage-net-unix
  313. mirage-runtime < "4.7.0"
  314. mirage-tc
  315. mjson
  316. mlgpx
  317. mmdb < "0.3.0"
  318. mnd
  319. mqtt
  320. mrmime >= "0.2.0"
  321. msgpck >= "1.6"
  322. mssql >= "2.0.3"
  323. multibase
  324. multicore-magic
  325. multihash
  326. multihash-digestif
  327. multipart-form-data
  328. multipart_form
  329. multipart_form-eio
  330. multipart_form-lwt
  331. multipart_form-miou
  332. named-pipe
  333. nanoid
  334. nbd >= "4.0.3"
  335. nbd-tool
  336. neo4j_bolt
  337. nloge
  338. nocoiner
  339. non_empty_list
  340. nx
  341. nx-datasets
  342. nx-text
  343. OCADml >= "0.6.0"
  344. obatcher
  345. ocaml-index < "5.4.1-503"
  346. ocaml-r >= "0.4.0"
  347. ocaml-version >= "3.5.0"
  348. ocamlformat >= "0.13.0" & < "0.25.1"
  349. ocamlformat-lib
  350. ocamlformat-mlx-lib
  351. ocamlformat-rpc < "removed"
  352. ocamline
  353. ocluster
  354. ocue
  355. odoc < "2.1.1"
  356. oenv >= "0.1.0"
  357. ohex
  358. oidc
  359. oktree >= "0.2.4"
  360. opam-0install
  361. opam-0install-cudf >= "0.5.0"
  362. opam-compiler
  363. opam-file-format >= "2.1.1"
  364. opam-repomin
  365. opencage
  366. opentelemetry >= "0.6"
  367. opentelemetry-client-cohttp-eio
  368. opentelemetry-client-cohttp-lwt >= "0.6"
  369. opentelemetry-client-ocurl >= "0.6"
  370. opentelemetry-cohttp-lwt >= "0.6"
  371. opentelemetry-logs
  372. opentelemetry-lwt >= "0.6"
  373. opium
  374. opium-graphql
  375. opium-testing
  376. opium_kernel
  377. orewa
  378. orgeat
  379. ortac-core
  380. ortac-wrapper
  381. osnap < "0.3.0"
  382. osx-acl
  383. osx-attr
  384. osx-cf
  385. osx-fsevents
  386. osx-membership
  387. osx-mount
  388. osx-xattr
  389. otoggl
  390. owl >= "0.7.0" & != "0.9.0" & != "1.0.0"
  391. owl-base < "0.5.0"
  392. owl-ode >= "0.1.0" & != "0.2.0"
  393. owl-symbolic
  394. par_incr
  395. passe
  396. passmaker
  397. patch
  398. pbkdf
  399. pecu >= "0.2"
  400. pf-qubes
  401. pg_query >= "0.9.6"
  402. pgx >= "1.0"
  403. pgx_unix >= "1.0"
  404. pgx_value_core
  405. pgx_value_ptime
  406. phylogenetics
  407. piaf
  408. picos < "0.5.0"
  409. picos_meta
  410. piece_rope
  411. plebeia >= "2.0.0"
  412. polyglot
  413. polymarket
  414. polynomial
  415. ppx_blob >= "0.3.0"
  416. ppx_catch
  417. ppx_deriving_cmdliner
  418. ppx_deriving_ezjsonm
  419. ppx_deriving_qcheck
  420. ppx_deriving_rpc
  421. ppx_deriving_yaml
  422. ppx_inline_alcotest
  423. ppx_map
  424. ppx_marshal
  425. ppx_mica
  426. ppx_parser
  427. ppx_protocol_conv >= "5.0.0"
  428. ppx_protocol_conv_json >= "5.0.0"
  429. ppx_protocol_conv_jsonm >= "5.0.0"
  430. ppx_protocol_conv_msgpack >= "5.0.0"
  431. ppx_protocol_conv_xml_light >= "5.0.0"
  432. ppx_protocol_conv_xmlm
  433. ppx_protocol_conv_yaml >= "5.0.0"
  434. ppx_repr
  435. ppx_subliner
  436. ppx_units
  437. ppx_yojson >= "1.1.0"
  438. pratter
  439. prbnmcn-ucb1 >= "0.0.2"
  440. prc
  441. preface
  442. pretty_expressive
  443. prettym
  444. proc-smaps
  445. producer
  446. progress
  447. prom
  448. prometheus < "1.2"
  449. prometheus-app
  450. protocell
  451. protocol-9p < "0.11.0" | >= "0.11.2"
  452. protocol-9p-unix
  453. proton
  454. psq
  455. public-suffix
  456. pxshot
  457. pyast
  458. qcaml
  459. qcheck >= "0.25"
  460. qcheck-alcotest
  461. qcheck-core >= "0.25"
  462. qdrant
  463. query-json
  464. quickjs
  465. quill
  466. randii
  467. reason-standard
  468. red-black-tree
  469. reparse >= "2.0.0" & < "3.0.0"
  470. reparse-unix < "2.1.0"
  471. resp
  472. resp-unix >= "0.10.0"
  473. resto >= "0.9"
  474. rfc1951 < "1.0.0"
  475. routes < "2.0.0"
  476. rpc
  477. rpclib
  478. rpclib-async
  479. rpclib-lwt
  480. rpmfile < "0.3.0"
  481. rpmfile-eio
  482. rpmfile-unix
  483. rune
  484. SZXX >= "4.0.0"
  485. saga
  486. salsa20
  487. salsa20-core
  488. sanddb >= "0.2"
  489. saturn != "0.4.1"
  490. saturn_lockfree != "0.4.1"
  491. scrypt-kdf
  492. secp256k1 >= "0.4.1"
  493. secp256k1-internal
  494. semver >= "0.2.1"
  495. sendmail
  496. sendmail-lwt
  497. sendmail-miou-unix
  498. sendmail-mirage
  499. sendmsg
  500. seqes
  501. server-reason-react
  502. session-cookie
  503. session-cookie-async
  504. session-cookie-lwt
  505. shakuhachi
  506. sherlodoc
  507. sihl < "0.2.0"
  508. sihl-type
  509. slug
  510. smaws-clients
  511. smaws-lib
  512. smol
  513. smol-helpers
  514. sodium-fmt
  515. solidity-alcotest
  516. sowilo
  517. spdx_licenses
  518. spectrum >= "0.2.0"
  519. spin >= "0.7.0"
  520. spurs < "0.1.1"
  521. squirrel
  522. ssh-agent
  523. ssl >= "0.6.0"
  524. starred_ml
  525. stramon-lib
  526. stringx
  527. styled-ppx
  528. swapfs
  529. synchronizer >= "0.2"
  530. syslog-rfc5424 < "0.2"
  531. tabr
  532. talon
  533. tar-mirage
  534. tcpip
  535. tdigest < "2.1.0"
  536. term-indexing
  537. term-tools
  538. terminal
  539. terminal_size >= "0.1.1"
  540. terminus
  541. terminus-cohttp
  542. terminus-hlc
  543. terml
  544. testo
  545. testo-lwt
  546. textmate-language >= "0.3.0"
  547. textrazor
  548. thread-table
  549. timedesc
  550. timere
  551. timmy
  552. timmy-jsoo
  553. timmy-lwt
  554. timmy-unix
  555. tls >= "0.12.8"
  556. toc
  557. topojson
  558. topojsone
  559. trail
  560. traits
  561. transept
  562. tsort >= "2.2.0"
  563. twostep
  564. type_eq
  565. type_id
  566. typeid >= "1.0.1"
  567. tyre >= "0.4"
  568. tyxml >= "4.2.0"
  569. tyxml-jsx
  570. tyxml-ppx >= "4.3.0"
  571. tyxml-syntax
  572. uecc
  573. ulid
  574. universal-portal
  575. unix-dirent
  576. unix-errno
  577. unix-sys-resource
  578. unix-sys-stat
  579. unix-time
  580. unstrctrd
  581. uring < "0.4"
  582. user-agent-parser
  583. uspf
  584. uspf-lwt
  585. uspf-mirage
  586. uspf-unix
  587. utcp
  588. utop >= "2.13.0"
  589. validate
  590. validator
  591. vercel
  592. vhd-format-lwt >= "0.13.0"
  593. vpnkit
  594. wayland >= "2.0"
  595. wcwidth
  596. websocketaf
  597. x509 >= "0.7.0"
  598. xapi-rrd
  599. xapi-stdext-date
  600. xapi-stdext-encodings
  601. xapi-stdext-std >= "4.16.0"
  602. xdge
  603. xkbcommon
  604. yaml
  605. yaml-sexp
  606. yocaml
  607. yocaml_syndication >= "2.0.0"
  608. yocaml_yaml < "2.0.0"
  609. yojson >= "1.6.0"
  610. yojson-five
  611. yuscii >= "0.3.0"
  612. yuujinchou >= "1.0.0"
  613. zar
  614. zed >= "3.2.2"
  615. zlist < "0.4.0"

Conflicts (2)

  1. js_of_ocaml-compiler < "5.8"
  2. result < "1.5"