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 (1)

  1. odoc with-doc

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

Conflicts (2)

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