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 < "10.2.4"
  148. dockerfile >= "8.2.7" & < "8.3.4"
  149. domain-local-await >= "0.2.1"
  150. domain-local-timeout
  151. domain-name
  152. dream
  153. dream-htmx
  154. dream-pure
  155. dscheck >= "0.1.1"
  156. duff
  157. dune-deps >= "1.4.0"
  158. dune-release >= "1.0.0"
  159. duration
  160. echo
  161. eio < "0.12"
  162. eio_linux
  163. eio_windows
  164. emile
  165. encore
  166. eqaf >= "0.5"
  167. equinoxe
  168. equinoxe-cohttp
  169. equinoxe-hlc
  170. ezgzip
  171. ezjsonm
  172. ezjsonm-lwt
  173. FPauth
  174. FPauth-core
  175. FPauth-responses
  176. FPauth-strategies
  177. faraday != "0.2.0"
  178. farfadet
  179. fat-filesystem
  180. fehu
  181. ff
  182. ff-pbt
  183. flex-array
  184. flux
  185. fluxt
  186. forester >= "5.0"
  187. fsevents-lwt
  188. functoria
  189. fungi
  190. geojson
  191. geoml >= "0.1.1"
  192. git
  193. git-cohttp
  194. git-cohttp-unix
  195. git-kv != "0.1.3"
  196. git-mirage
  197. git-net
  198. git-split
  199. git-unix
  200. gitlab-unix
  201. glicko2
  202. gmap
  203. gobba
  204. gpt
  205. graphql
  206. graphql-async
  207. graphql-cohttp >= "0.13.0"
  208. graphql-lwt
  209. graphql_parser != "0.11.0"
  210. graphql_ppx
  211. h1
  212. h1_parser
  213. h2
  214. hacl
  215. hacl-star >= "0.6.0"
  216. hacl_func
  217. hacl_x25519
  218. handlebars-ml >= "0.2.1"
  219. highlexer
  220. hkdf
  221. hockmd
  222. html_of_jsx
  223. http
  224. http-multipart-formdata < "2.0.0"
  225. httpaf >= "0.2.0"
  226. httpcats
  227. httpun
  228. httpun-ws
  229. hugin
  230. huml
  231. hvsock
  232. icalendar
  233. imagelib
  234. index
  235. inferno >= "20220603"
  236. influxdb-async
  237. influxdb-lwt
  238. inquire < "0.2.0"
  239. intel_hex >= "0.3"
  240. interval-map
  241. iomux
  242. irmin
  243. irmin-bench
  244. irmin-chunk
  245. irmin-cli
  246. irmin-containers
  247. irmin-fs
  248. irmin-git
  249. irmin-graphql
  250. irmin-pack
  251. irmin-pack-tools
  252. irmin-test != "3.6.1"
  253. irmin-tezos
  254. irmin-unix
  255. irmin-watcher
  256. jekyll-format
  257. jose
  258. json-data-encoding >= "0.9" & < "1.1.1"
  259. json_decoder
  260. jsonfeed
  261. jsonxt
  262. junit_alcotest < "2.3.0"
  263. jwto
  264. kaun
  265. kcas >= "0.6.0"
  266. kcas_data >= "0.6.0"
  267. kdf
  268. ke >= "0.2"
  269. kkmarkdown
  270. kmt
  271. lambda-runtime
  272. lambda_streams
  273. lambda_streams_async
  274. lambdapi
  275. layoutz
  276. letters
  277. liquid_ml >= "0.1.3"
  278. lmdb >= "1.0"
  279. lockfree >= "0.3.1"
  280. logical
  281. logtk >= "1.6"
  282. lp
  283. lp-glpk
  284. lp-glpk-js < "0.5.0"
  285. lp-gurobi < "0.5.0"
  286. lru
  287. lt-code
  288. luv
  289. mazeppa
  290. mbr-format
  291. mdx >= "1.6.0"
  292. mec
  293. mechaml >= "1.2.1"
  294. merlin = "4.17.1-501"
  295. merlin-lib >= "4.17.1-501"
  296. metrics
  297. middleware
  298. mimic
  299. minicaml = "0.3.1" | >= "0.4"
  300. mirage >= "4.0.0"
  301. mirage-block-partition
  302. mirage-block-ramdisk
  303. mirage-channel >= "4.0.1"
  304. mirage-crypto-ec
  305. mirage-flow-unix
  306. mirage-kv >= "2.0.0"
  307. mirage-kv-mem
  308. mirage-kv-unix >= "3.0.0"
  309. mirage-logs
  310. mirage-nat
  311. mirage-net-unix
  312. mirage-runtime < "4.7.0"
  313. mirage-tc
  314. mjson
  315. mlgpx
  316. mmdb < "0.3.0"
  317. mnd
  318. mqtt
  319. mrmime >= "0.2.0"
  320. msgpck >= "1.6"
  321. mssql >= "2.0.3"
  322. multibase
  323. multicore-magic
  324. multihash
  325. multihash-digestif
  326. multipart-form-data
  327. multipart_form
  328. multipart_form-eio
  329. multipart_form-lwt
  330. multipart_form-miou
  331. named-pipe
  332. nanoid
  333. nbd >= "4.0.3"
  334. nbd-tool
  335. neo4j_bolt
  336. nloge
  337. nocoiner
  338. non_empty_list
  339. nx
  340. nx-datasets
  341. nx-text
  342. OCADml >= "0.6.0"
  343. obatcher
  344. ocaml-index < "5.4.1-503"
  345. ocaml-r >= "0.4.0"
  346. ocaml-version >= "3.5.0"
  347. ocamlformat >= "0.13.0" & < "0.25.1"
  348. ocamlformat-lib
  349. ocamlformat-mlx-lib
  350. ocamlformat-rpc < "removed"
  351. ocamline
  352. ocluster
  353. ocue
  354. odoc < "2.1.1"
  355. oenv >= "0.1.0"
  356. ohex
  357. oidc
  358. oktree >= "0.2.4"
  359. opam-0install
  360. opam-0install-cudf >= "0.5.0"
  361. opam-compiler
  362. opam-file-format >= "2.1.1"
  363. opam-repomin
  364. opencage
  365. opentelemetry >= "0.6"
  366. opentelemetry-client-cohttp-eio
  367. opentelemetry-client-cohttp-lwt >= "0.6"
  368. opentelemetry-client-ocurl >= "0.6"
  369. opentelemetry-cohttp-lwt >= "0.6"
  370. opentelemetry-logs
  371. opentelemetry-lwt >= "0.6"
  372. opium
  373. opium-graphql
  374. opium-testing
  375. opium_kernel
  376. orewa
  377. orgeat
  378. ortac-core
  379. ortac-wrapper
  380. osnap < "0.3.0"
  381. osx-acl
  382. osx-attr
  383. osx-cf
  384. osx-fsevents
  385. osx-membership
  386. osx-mount
  387. osx-xattr
  388. otoggl
  389. owl >= "0.7.0" & != "0.9.0" & != "1.0.0"
  390. owl-base < "0.5.0"
  391. owl-ode >= "0.1.0" & != "0.2.0"
  392. owl-symbolic
  393. par_incr
  394. passe
  395. passmaker
  396. patch
  397. pbkdf
  398. pecu >= "0.2"
  399. pf-qubes
  400. pg_query >= "0.9.6"
  401. pgx >= "1.0"
  402. pgx_unix >= "1.0"
  403. pgx_value_core
  404. pgx_value_ptime
  405. phylogenetics
  406. piaf
  407. picos < "0.5.0"
  408. picos_meta
  409. piece_rope
  410. plebeia >= "2.0.0"
  411. polyglot
  412. polymarket
  413. polynomial
  414. ppx_blob >= "0.3.0"
  415. ppx_catch
  416. ppx_deriving_cmdliner
  417. ppx_deriving_ezjsonm
  418. ppx_deriving_qcheck
  419. ppx_deriving_rpc
  420. ppx_deriving_yaml
  421. ppx_inline_alcotest
  422. ppx_map
  423. ppx_marshal
  424. ppx_mica
  425. ppx_parser
  426. ppx_protocol_conv >= "5.0.0"
  427. ppx_protocol_conv_json >= "5.0.0"
  428. ppx_protocol_conv_jsonm >= "5.0.0"
  429. ppx_protocol_conv_msgpack >= "5.0.0"
  430. ppx_protocol_conv_xml_light >= "5.0.0"
  431. ppx_protocol_conv_xmlm
  432. ppx_protocol_conv_yaml >= "5.0.0"
  433. ppx_repr
  434. ppx_subliner
  435. ppx_units
  436. ppx_yojson >= "1.1.0"
  437. pratter
  438. prbnmcn-ucb1 >= "0.0.2"
  439. prc
  440. preface
  441. pretty_expressive
  442. prettym
  443. proc-smaps
  444. producer
  445. progress
  446. prom
  447. prometheus < "1.2"
  448. prometheus-app
  449. protocell
  450. protocol-9p < "0.11.0" | >= "0.11.2"
  451. protocol-9p-unix
  452. proton
  453. psq
  454. public-suffix
  455. pxshot
  456. pyast
  457. qcaml
  458. qcheck >= "0.25"
  459. qcheck-alcotest
  460. qcheck-core >= "0.25"
  461. qcow-stream >= "0.13.0"
  462. qcow-tool >= "0.13.0"
  463. qcow-types >= "0.13.0"
  464. qdrant
  465. query-json
  466. quickjs
  467. quill
  468. randii
  469. reason-standard
  470. red-black-tree
  471. reparse >= "2.0.0" & < "3.0.0"
  472. reparse-unix < "2.1.0"
  473. resp
  474. resp-unix >= "0.10.0"
  475. resto >= "0.9"
  476. rfc1951 < "1.0.0"
  477. routes < "2.0.0"
  478. rpc
  479. rpclib
  480. rpclib-async
  481. rpclib-lwt
  482. rpmfile < "0.3.0"
  483. rpmfile-eio
  484. rpmfile-unix
  485. rune
  486. SZXX >= "4.0.0"
  487. saga
  488. salsa20
  489. salsa20-core
  490. sanddb >= "0.2"
  491. saturn != "0.4.1"
  492. saturn_lockfree != "0.4.1"
  493. scrypt-kdf
  494. secp256k1 >= "0.4.1"
  495. secp256k1-internal
  496. semver >= "0.2.1"
  497. sendmail
  498. sendmail-lwt
  499. sendmail-miou-unix
  500. sendmail-mirage
  501. sendmsg
  502. seqes
  503. server-reason-react
  504. session-cookie
  505. session-cookie-async
  506. session-cookie-lwt
  507. shakuhachi
  508. sherlodoc
  509. sihl < "0.2.0"
  510. sihl-type
  511. slug
  512. smaws-clients
  513. smaws-lib
  514. smol
  515. smol-helpers
  516. sodium-fmt
  517. solidity-alcotest
  518. sowilo
  519. spdx_licenses
  520. spectrum >= "0.2.0"
  521. spin >= "0.7.0"
  522. spurs < "0.1.1"
  523. squirrel
  524. ssh-agent
  525. ssl >= "0.6.0"
  526. starred_ml
  527. stramon-lib
  528. stringx
  529. styled-ppx
  530. swapfs
  531. synchronizer >= "0.2"
  532. syslog-rfc5424 < "0.2"
  533. tabr
  534. talon
  535. tar-mirage
  536. tcpip
  537. tdigest < "2.1.0"
  538. term-indexing
  539. term-tools
  540. terminal
  541. terminal_size >= "0.1.1"
  542. terminus
  543. terminus-cohttp
  544. terminus-hlc
  545. terml
  546. testo
  547. testo-lwt
  548. textmate-language >= "0.3.0"
  549. textrazor
  550. thread-table
  551. timedesc
  552. timere
  553. timmy
  554. timmy-jsoo
  555. timmy-lwt
  556. timmy-unix
  557. tls >= "0.12.8"
  558. toc
  559. topojson
  560. topojsone
  561. trail
  562. traits
  563. transept
  564. tsort >= "2.2.0"
  565. twostep
  566. type_eq
  567. type_id
  568. typeid >= "1.0.1"
  569. tyre >= "0.4"
  570. tyxml >= "4.2.0"
  571. tyxml-jsx
  572. tyxml-ppx >= "4.3.0"
  573. tyxml-syntax
  574. uecc
  575. ulid
  576. universal-portal
  577. unix-dirent
  578. unix-errno
  579. unix-sys-resource
  580. unix-sys-stat
  581. unix-time
  582. unstrctrd
  583. uring < "0.4"
  584. user-agent-parser
  585. uspf
  586. uspf-lwt
  587. uspf-mirage
  588. uspf-unix
  589. utcp
  590. utop >= "2.13.0"
  591. validate
  592. validator
  593. vercel
  594. vhd-format-lwt >= "0.13.0"
  595. wayland >= "2.0"
  596. wcwidth
  597. websocketaf
  598. x509 >= "0.7.0"
  599. xapi-rrd
  600. xapi-stdext-date
  601. xapi-stdext-encodings
  602. xapi-stdext-std >= "4.16.0"
  603. xdge
  604. xkbcommon
  605. yaml
  606. yaml-sexp
  607. yocaml
  608. yocaml_syndication >= "2.0.0"
  609. yocaml_yaml < "2.0.0"
  610. yojson >= "1.6.0"
  611. yojson-five
  612. yuscii >= "0.3.0"
  613. yuujinchou >= "1.0.0"
  614. zar
  615. zed >= "3.2.2"
  616. zlist < "0.4.0"

Conflicts (2)

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