package alcotest

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

Install

Dune Dependency

Authors

Maintainers

Sources

alcotest-1.7.0.tbz
sha256=812bacdb34b45e88995e07d7306bdab2f72479ef1996637f1d5d1f41667902df
sha512=4ae1ba318949ec9db8b87bc8072632a02f0e4003a95ab21e474f5c34c3b5bde867b0194a2d0ea7d9fc4580c70a30ca39287d33a8c134acc7611902f79c7b7ce8

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: 27 Feb 2023

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.1.0"
  6. astring
  7. fmt >= "0.8.7"
  8. ocaml >= "4.05.0"
  9. dune >= "3.0"

Dev Dependencies (1)

  1. odoc with-doc

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

Conflicts (1)

  1. result < "1.5"
OCaml

Innovation. Community. Security.