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. biotk >= "0.4"
  38. bitlib
  39. blake2
  40. bloomf
  41. bls12-381 < "0.4.1" | >= "3.0.0" & < "18.0"
  42. bls12-381-hash
  43. bls12-381-js >= "0.4.2"
  44. bls12-381-js-gen >= "0.4.2"
  45. bls12-381-legacy
  46. bls12-381-signature
  47. bls12-381-unix
  48. blurhash
  49. brisk-reconciler
  50. builder-web
  51. bytebuffer
  52. ca-certs
  53. ca-certs-nss
  54. cachet
  55. cachet-lwt
  56. cachet-solo5
  57. cactus
  58. caldav
  59. calendar >= "3.0.0"
  60. calendars >= "2.0.0"
  61. callipyge
  62. camlix
  63. camlkit
  64. camlkit-base
  65. capnp-rpc
  66. capnp-rpc-unix
  67. caqti >= "1.7.0"
  68. caqti-async >= "1.7.0"
  69. caqti-driver-mariadb >= "1.7.0"
  70. caqti-driver-postgresql >= "1.7.0"
  71. caqti-driver-sqlite3 >= "1.7.0"
  72. caqti-dynload >= "2.0.1"
  73. caqti-eio
  74. caqti-lwt >= "1.7.0"
  75. caqti-miou
  76. carray
  77. carton < "1.0.0"
  78. carton-git
  79. carton-lwt >= "0.4.3" & < "1.0.0"
  80. catala >= "0.6.0"
  81. cborl
  82. cf-lwt
  83. chacha
  84. chamelon
  85. chamelon-unix
  86. charrua-client
  87. charrua-server
  88. checked_oint
  89. checkseum >= "0.0.3"
  90. cid
  91. clarity-lang
  92. class_group_vdf
  93. cohttp
  94. cohttp-curl-async
  95. cohttp-curl-lwt
  96. cohttp-eio >= "6.0.0~beta2"
  97. colombe >= "0.2.0"
  98. color
  99. commons
  100. conan
  101. conan-cli
  102. conan-database
  103. conan-lwt
  104. conan-unix
  105. conex < "0.10.0"
  106. conex-mirage-crypto
  107. conformist
  108. cookie
  109. corosync
  110. cow >= "2.2.0"
  111. crockford
  112. css
  113. css-parser
  114. cstruct
  115. cstruct-sexp
  116. ctypes-zarith
  117. cuid
  118. cure2
  119. curly
  120. current
  121. current-albatross-deployer
  122. current_git >= "0.7.1"
  123. current_incr
  124. data-encoding
  125. dates_calc
  126. dbase4
  127. decimal >= "0.3.0"
  128. decompress
  129. depyt
  130. digestif >= "0.9.0"
  131. dispatch >= "0.4.1"
  132. dkim
  133. dkim-bin
  134. dkim-mirage
  135. dkml-dune-dsl-show
  136. dkml-install
  137. dkml-install-installer
  138. dkml-install-runner
  139. dmarc
  140. dns >= "4.4.1"
  141. dns-cli
  142. dns-client >= "4.6.3"
  143. dns-forward-lwt-unix
  144. dns-resolver
  145. dns-server
  146. dns-tsig
  147. dnssd
  148. dnssec < "10.2.4"
  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. qcow-stream >= "0.13.0"
  463. qcow-tool >= "0.13.0"
  464. qcow-types >= "0.13.0"
  465. qdrant
  466. query-json
  467. quickjs
  468. quill
  469. randii
  470. reason-standard
  471. red-black-tree
  472. reparse >= "2.0.0" & < "3.0.0"
  473. reparse-unix < "2.1.0"
  474. resp
  475. resp-unix >= "0.10.0"
  476. resto >= "0.9"
  477. rfc1951 < "1.0.0"
  478. routes < "2.0.0"
  479. rpc
  480. rpclib
  481. rpclib-async
  482. rpclib-lwt
  483. rpmfile < "0.3.0"
  484. rpmfile-eio
  485. rpmfile-unix
  486. rune
  487. SZXX >= "4.0.0"
  488. saga
  489. salsa20
  490. salsa20-core
  491. sanddb >= "0.2"
  492. saturn != "0.4.1"
  493. saturn_lockfree != "0.4.1"
  494. scrypt-kdf
  495. secp256k1 >= "0.4.1"
  496. secp256k1-internal
  497. semver >= "0.2.1"
  498. sendmail
  499. sendmail-lwt
  500. sendmail-miou-unix
  501. sendmail-mirage
  502. sendmsg
  503. seqes
  504. server-reason-react
  505. session-cookie
  506. session-cookie-async
  507. session-cookie-lwt
  508. shakuhachi
  509. sherlodoc
  510. sihl < "0.2.0"
  511. sihl-type
  512. slug
  513. smaws-clients
  514. smaws-lib
  515. smol
  516. smol-helpers
  517. sodium-fmt
  518. solidity-alcotest
  519. sowilo
  520. spdx_licenses
  521. spectrum >= "0.2.0"
  522. spectrum_capabilities
  523. spectrum_palette_ppx
  524. spectrum_palettes
  525. spectrum_tools
  526. spin >= "0.7.0"
  527. spurs < "0.1.1"
  528. squirrel
  529. ssh-agent
  530. ssl >= "0.6.0"
  531. starred_ml
  532. stramon-lib
  533. stringx
  534. styled-ppx
  535. swapfs
  536. symex >= "0.2"
  537. synchronizer >= "0.2"
  538. syslog-rfc5424 < "0.2"
  539. tabr
  540. talon
  541. tar-mirage
  542. tcpip
  543. tdigest < "2.1.0"
  544. term-indexing
  545. term-tools
  546. terminal
  547. terminal_size >= "0.1.1"
  548. terminus
  549. terminus-cohttp
  550. terminus-hlc
  551. terml
  552. testo
  553. testo-lwt
  554. textmate-language >= "0.3.0"
  555. textrazor
  556. thread-table
  557. timedesc
  558. timere
  559. timmy
  560. timmy-jsoo
  561. timmy-lwt
  562. timmy-unix
  563. tls >= "0.12.8"
  564. toc
  565. topojson
  566. topojsone
  567. trail
  568. traits
  569. transept
  570. tsort >= "2.2.0"
  571. twostep
  572. type_eq
  573. type_id
  574. typeid >= "1.0.1"
  575. tyre >= "0.4"
  576. tyxml >= "4.2.0"
  577. tyxml-jsx
  578. tyxml-ppx >= "4.3.0"
  579. tyxml-syntax
  580. uecc
  581. ulid
  582. universal-portal
  583. unix-dirent
  584. unix-errno
  585. unix-sys-resource
  586. unix-sys-stat
  587. unix-time
  588. unstrctrd
  589. uring < "0.4"
  590. user-agent-parser
  591. uspf
  592. uspf-lwt
  593. uspf-mirage
  594. uspf-unix
  595. utcp
  596. utop >= "2.13.0"
  597. validate
  598. validator
  599. vercel
  600. vhd-format-lwt >= "0.13.0"
  601. wayland >= "2.0"
  602. wcwidth
  603. websocketaf
  604. x509 >= "0.7.0"
  605. xapi-rrd
  606. xapi-stdext-date
  607. xapi-stdext-encodings
  608. xapi-stdext-std >= "4.16.0"
  609. xdge
  610. xkbcommon
  611. yaml
  612. yaml-sexp
  613. yocaml
  614. yocaml_syndication >= "2.0.0"
  615. yocaml_yaml < "2.0.0"
  616. yojson >= "1.6.0"
  617. yojson-five
  618. yuscii >= "0.3.0"
  619. yuujinchou >= "1.0.0"
  620. zar
  621. zed >= "3.2.2"
  622. zlist < "0.4.0"

Conflicts (2)

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