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. 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. cure2
  114. curly
  115. current
  116. current-albatross-deployer
  117. current_git >= "0.7.1"
  118. current_incr
  119. data-encoding
  120. dates_calc
  121. dbase4
  122. decimal >= "0.3.0"
  123. decompress
  124. depyt
  125. digestif >= "0.9.0"
  126. dirsp-exchange-kbb2017
  127. dirsp-proscript-mirage
  128. dirsp-ps2ocaml
  129. dispatch >= "0.4.1"
  130. dkim
  131. dkim-bin
  132. dkim-mirage
  133. dkml-dune-dsl-show
  134. dkml-install
  135. dkml-install-installer
  136. dkml-install-runner
  137. dkml-package-console
  138. dns >= "4.4.1"
  139. dns-cli
  140. dns-client >= "4.6.3"
  141. dns-forward-lwt-unix
  142. dns-resolver
  143. dns-server
  144. dns-tsig
  145. dnssd
  146. dnssec
  147. docfd >= "2.2.0"
  148. dockerfile >= "8.2.7"
  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. interval-map
  240. iomux
  241. irmin
  242. irmin-bench
  243. irmin-chunk
  244. irmin-cli
  245. irmin-containers
  246. irmin-fs
  247. irmin-git
  248. irmin-graphql
  249. irmin-pack
  250. irmin-pack-tools
  251. irmin-test != "3.6.1"
  252. irmin-tezos
  253. irmin-unix
  254. irmin-watcher
  255. jekyll-format
  256. jose
  257. json-data-encoding >= "0.9"
  258. json_decoder
  259. jsonxt
  260. junit_alcotest < "2.3.0"
  261. jwto
  262. kaun
  263. kcas >= "0.6.0"
  264. kcas_data >= "0.6.0"
  265. kdf
  266. ke >= "0.2"
  267. kkmarkdown
  268. kmt
  269. lambda-runtime
  270. lambda_streams
  271. lambda_streams_async
  272. lambdapi
  273. ledgerwallet-tezos >= "0.2.1" & < "0.4.0"
  274. letters
  275. lmdb >= "1.0"
  276. lockfree >= "0.3.1"
  277. logical
  278. logtk >= "1.6"
  279. lp
  280. lp-glpk
  281. lp-glpk-js < "0.5.0"
  282. lp-gurobi < "0.5.0"
  283. lru
  284. lt-code
  285. luv
  286. mazeppa
  287. mbr-format
  288. mdx >= "1.6.0"
  289. mec
  290. mechaml >= "1.2.1"
  291. merlin = "4.17.1-501"
  292. merlin-lib >= "4.17.1-501"
  293. metrics
  294. middleware
  295. mimic
  296. minicaml = "0.3.1" | >= "0.4"
  297. mirage >= "4.0.0"
  298. mirage-block-partition
  299. mirage-block-ramdisk
  300. mirage-channel >= "4.0.1"
  301. mirage-crypto-ec
  302. mirage-flow-unix
  303. mirage-kv >= "2.0.0"
  304. mirage-kv-mem
  305. mirage-kv-unix >= "3.0.0"
  306. mirage-logs
  307. mirage-nat
  308. mirage-net-unix
  309. mirage-runtime < "4.7.0"
  310. mirage-tc
  311. mjson
  312. mlgpx
  313. mmdb < "0.3.0"
  314. mnd
  315. mqtt
  316. mrmime >= "0.2.0"
  317. msgpck >= "1.6"
  318. mssql >= "2.0.3"
  319. multibase
  320. multicore-magic
  321. multihash
  322. multihash-digestif
  323. multipart-form-data
  324. multipart_form
  325. multipart_form-eio
  326. multipart_form-lwt
  327. multipart_form-miou
  328. named-pipe
  329. nanoid
  330. nbd >= "4.0.3"
  331. nbd-tool
  332. nloge
  333. nocoiner
  334. non_empty_list
  335. nx
  336. nx-datasets
  337. nx-text
  338. OCADml >= "0.6.0"
  339. obatcher
  340. ocaml-index < "5.4.1-503"
  341. ocaml-r >= "0.4.0"
  342. ocaml-version >= "3.5.0"
  343. ocamlformat >= "0.13.0" & < "0.25.1"
  344. ocamlformat-lib
  345. ocamlformat-mlx-lib
  346. ocamlformat-rpc < "removed"
  347. ocamline
  348. ocluster
  349. octez-bls12-381-hash
  350. octez-bls12-381-signature
  351. octez-libs
  352. octez-mec
  353. ocue
  354. odoc < "2.1.1"
  355. oenv >= "0.1.0"
  356. ohex
  357. oidc
  358. opam-0install
  359. opam-0install-cudf >= "0.5.0"
  360. opam-compiler
  361. opam-file-format >= "2.1.1"
  362. opencage
  363. opentelemetry >= "0.6"
  364. opentelemetry-client-cohttp-eio
  365. opentelemetry-client-cohttp-lwt >= "0.6"
  366. opentelemetry-client-ocurl >= "0.6"
  367. opentelemetry-cohttp-lwt >= "0.6"
  368. opentelemetry-logs
  369. opentelemetry-lwt >= "0.6"
  370. opium
  371. opium-graphql
  372. opium-testing
  373. opium_kernel
  374. orewa
  375. orgeat
  376. ortac-core
  377. ortac-wrapper
  378. osnap < "0.3.0"
  379. osx-acl
  380. osx-attr
  381. osx-cf
  382. osx-fsevents
  383. osx-membership
  384. osx-mount
  385. osx-xattr
  386. otoggl
  387. owl >= "0.7.0" & != "0.9.0" & != "1.0.0"
  388. owl-base < "0.5.0"
  389. owl-ode >= "0.1.0" & != "0.2.0"
  390. owl-symbolic
  391. par_incr
  392. passmaker
  393. patch
  394. pbkdf
  395. pecu >= "0.2"
  396. pf-qubes
  397. pg_query >= "0.9.6"
  398. pgx >= "1.0"
  399. pgx_unix >= "1.0"
  400. pgx_value_core
  401. pgx_value_ptime
  402. phylogenetics
  403. piaf
  404. picos < "0.5.0"
  405. picos_meta
  406. piece_rope
  407. plebeia >= "2.0.0"
  408. polyglot
  409. polynomial
  410. ppx_blob >= "0.3.0"
  411. ppx_catch
  412. ppx_deriving_cmdliner
  413. ppx_deriving_ezjsonm
  414. ppx_deriving_qcheck
  415. ppx_deriving_rpc
  416. ppx_deriving_yaml
  417. ppx_inline_alcotest
  418. ppx_map
  419. ppx_marshal
  420. ppx_mica
  421. ppx_parser
  422. ppx_protocol_conv >= "5.0.0"
  423. ppx_protocol_conv_json >= "5.0.0"
  424. ppx_protocol_conv_jsonm >= "5.0.0"
  425. ppx_protocol_conv_msgpack >= "5.0.0"
  426. ppx_protocol_conv_xml_light >= "5.0.0"
  427. ppx_protocol_conv_xmlm
  428. ppx_protocol_conv_yaml >= "5.0.0"
  429. ppx_repr
  430. ppx_subliner
  431. ppx_units
  432. ppx_yojson >= "1.1.0"
  433. pratter
  434. prbnmcn-ucb1 >= "0.0.2"
  435. prc
  436. preface
  437. pretty_expressive
  438. prettym
  439. proc-smaps
  440. producer
  441. progress
  442. prom
  443. prometheus < "1.2"
  444. prometheus-app
  445. protocell
  446. protocol-9p < "0.11.0" | >= "0.11.2"
  447. protocol-9p-unix
  448. proton
  449. psq
  450. pyast
  451. qcheck >= "0.25"
  452. qcheck-alcotest
  453. qcheck-core >= "0.25"
  454. quickjs
  455. quill
  456. randii
  457. reason-standard
  458. red-black-tree
  459. reparse >= "2.0.0" & < "3.0.0"
  460. reparse-unix < "2.1.0"
  461. resp
  462. resp-unix >= "0.10.0"
  463. resto >= "0.9"
  464. rfc1951 < "1.0.0"
  465. routes < "2.0.0"
  466. rpc
  467. rpclib
  468. rpclib-async
  469. rpclib-lwt
  470. rpmfile < "0.3.0"
  471. rpmfile-eio
  472. rpmfile-unix
  473. rune
  474. SZXX >= "4.0.0"
  475. saga
  476. salsa20
  477. salsa20-core
  478. sanddb >= "0.2"
  479. saturn != "0.4.1"
  480. saturn_lockfree != "0.4.1"
  481. scrypt-kdf
  482. secp256k1 >= "0.4.1"
  483. secp256k1-internal
  484. semver >= "0.2.1"
  485. sendmail
  486. sendmail-lwt
  487. sendmail-miou-unix
  488. sendmail-mirage
  489. sendmsg
  490. seqes
  491. server-reason-react
  492. session-cookie
  493. session-cookie-async
  494. session-cookie-lwt
  495. sherlodoc
  496. sihl < "0.2.0"
  497. sihl-type
  498. slug
  499. smaws-clients
  500. smaws-lib
  501. smol
  502. smol-helpers
  503. sodium-fmt
  504. solidity-alcotest
  505. sowilo
  506. spdx_licenses
  507. spectrum >= "0.2.0"
  508. spin >= "0.7.0"
  509. spurs
  510. squirrel
  511. ssh-agent
  512. ssl >= "0.6.0"
  513. starred_ml
  514. stramon-lib
  515. stringx
  516. styled-ppx
  517. swapfs
  518. syslog-rfc5424
  519. tabr
  520. talon
  521. tar-mirage
  522. tcpip
  523. tdigest < "2.1.0"
  524. term-indexing
  525. term-tools
  526. terminal
  527. terminal_size >= "0.1.1"
  528. terminus
  529. terminus-cohttp
  530. terminus-hlc
  531. terml
  532. testo
  533. testo-lwt
  534. textmate-language >= "0.3.0"
  535. textrazor
  536. tezos-base-test-helpers < "17.3"
  537. tezos-bls12-381-polynomial
  538. tezos-client-base < "17.3"
  539. tezos-client-base-unix < "17.3"
  540. tezos-crypto >= "16.0" & < "17.3"
  541. tezos-crypto-dal < "17.3"
  542. tezos-error-monad >= "12.3" & < "17.3"
  543. tezos-event-logging-test-helpers < "17.3"
  544. tezos-plompiler = "0.1.3"
  545. tezos-plonk = "0.1.3"
  546. tezos-shell-services >= "16.0" & < "17.3"
  547. tezos-stdlib != "12.3" & < "17.3"
  548. tezos-test-helpers < "17.3"
  549. tezos-version >= "16.0" & < "17.3"
  550. tezos-webassembly-interpreter < "17.3"
  551. thread-table
  552. timedesc
  553. timere
  554. timmy
  555. timmy-jsoo
  556. timmy-lwt
  557. timmy-unix
  558. tls >= "0.12.8"
  559. toc
  560. topojson
  561. topojsone
  562. trail
  563. traits
  564. transept
  565. tsort >= "2.2.0"
  566. twostep
  567. type_eq
  568. type_id
  569. typeid >= "1.0.1"
  570. tyre >= "0.4"
  571. tyxml >= "4.2.0"
  572. tyxml-jsx
  573. tyxml-ppx >= "4.3.0"
  574. tyxml-syntax
  575. uecc
  576. ulid
  577. universal-portal
  578. unix-dirent
  579. unix-errno
  580. unix-sys-resource
  581. unix-sys-stat
  582. unix-time
  583. unstrctrd
  584. uring < "0.4"
  585. user-agent-parser
  586. uspf
  587. uspf-lwt
  588. uspf-mirage
  589. uspf-unix
  590. utop >= "2.13.0"
  591. validate
  592. validator
  593. vercel
  594. vhd-format-lwt >= "0.13.0"
  595. vpnkit
  596. wayland >= "2.0"
  597. wcwidth
  598. websocketaf
  599. x509 >= "0.7.0"
  600. xapi-rrd
  601. xapi-stdext-date
  602. xapi-stdext-encodings
  603. xapi-stdext-std >= "4.16.0"
  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"