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. avro-simple
  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. cachet-lwt
  54. cachet-solo5
  55. cactus
  56. caldav
  57. calendar >= "3.0.0"
  58. callipyge
  59. camlix
  60. camlkit
  61. camlkit-base
  62. capnp-rpc
  63. capnp-rpc-unix
  64. caqti >= "1.7.0"
  65. caqti-async >= "1.7.0"
  66. caqti-driver-mariadb >= "1.7.0"
  67. caqti-driver-postgresql >= "1.7.0"
  68. caqti-driver-sqlite3 >= "1.7.0"
  69. caqti-dynload >= "2.0.1"
  70. caqti-eio
  71. caqti-lwt >= "1.7.0"
  72. caqti-miou
  73. carray
  74. carton < "1.0.0"
  75. carton-git
  76. carton-lwt >= "0.4.3" & < "1.0.0"
  77. catala >= "0.6.0"
  78. cborl
  79. cf-lwt
  80. chacha
  81. chamelon
  82. chamelon-unix
  83. charrua-client
  84. charrua-server
  85. checked_oint
  86. checkseum >= "0.0.3"
  87. cid
  88. clarity-lang
  89. class_group_vdf
  90. cohttp
  91. cohttp-curl-async
  92. cohttp-curl-lwt
  93. cohttp-eio >= "6.0.0~beta2"
  94. colombe >= "0.2.0"
  95. color
  96. commons
  97. conan
  98. conan-cli
  99. conan-database
  100. conan-lwt
  101. conan-unix
  102. conex < "0.10.0"
  103. conex-mirage-crypto
  104. conformist
  105. cookie
  106. corosync
  107. cow >= "2.2.0"
  108. crockford
  109. css
  110. css-parser
  111. cstruct
  112. cstruct-sexp
  113. ctypes-zarith
  114. cuid
  115. cure2
  116. curly
  117. current
  118. current-albatross-deployer
  119. current_git >= "0.7.1"
  120. current_incr
  121. data-encoding
  122. dates_calc
  123. dbase4
  124. decimal >= "0.3.0"
  125. decompress
  126. depyt
  127. digestif >= "0.9.0"
  128. dirsp-exchange-kbb2017
  129. dirsp-proscript-mirage
  130. dirsp-ps2ocaml
  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. dkml-package-console
  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
  149. docfd >= "2.2.0"
  150. dockerfile >= "8.2.7"
  151. domain-local-await >= "0.2.1"
  152. domain-local-timeout
  153. domain-name
  154. dream
  155. dream-htmx
  156. dream-pure
  157. dscheck >= "0.1.1"
  158. duff
  159. dune-deps >= "1.4.0"
  160. dune-release >= "1.0.0"
  161. duration
  162. echo
  163. eio < "0.12"
  164. eio_linux
  165. eio_windows
  166. emile
  167. encore
  168. eqaf >= "0.5"
  169. equinoxe
  170. equinoxe-cohttp
  171. equinoxe-hlc
  172. ezgzip
  173. ezjsonm
  174. ezjsonm-lwt
  175. FPauth
  176. FPauth-core
  177. FPauth-responses
  178. FPauth-strategies
  179. faraday != "0.2.0"
  180. farfadet
  181. fat-filesystem
  182. fehu
  183. ff
  184. ff-pbt
  185. flex-array
  186. flux
  187. fluxt
  188. forester >= "5.0"
  189. fsevents-lwt
  190. functoria
  191. fungi
  192. geojson
  193. geoml >= "0.1.1"
  194. git
  195. git-cohttp
  196. git-cohttp-unix
  197. git-kv != "0.1.3"
  198. git-mirage
  199. git-net
  200. git-split
  201. git-unix
  202. gitlab-unix
  203. glicko2
  204. gmap
  205. gobba
  206. gpt
  207. graphql
  208. graphql-async
  209. graphql-cohttp >= "0.13.0"
  210. graphql-lwt
  211. graphql_parser != "0.11.0"
  212. graphql_ppx
  213. h1
  214. h1_parser
  215. h2
  216. hacl
  217. hacl-star >= "0.6.0"
  218. hacl_func
  219. hacl_x25519
  220. handlebars-ml >= "0.2.1"
  221. highlexer
  222. hkdf
  223. hockmd
  224. html_of_jsx
  225. http
  226. http-multipart-formdata < "2.0.0"
  227. httpaf >= "0.2.0"
  228. httpcats
  229. httpun
  230. httpun-ws
  231. hugin
  232. huml
  233. hvsock
  234. icalendar
  235. imagelib
  236. index
  237. inferno >= "20220603"
  238. influxdb-async
  239. influxdb-lwt
  240. inquire < "0.2.0"
  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"
  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. ledgerwallet-tezos >= "0.2.1" & < "0.4.0"
  277. letters
  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. nloge
  336. nocoiner
  337. non_empty_list
  338. nx
  339. nx-datasets
  340. nx-text
  341. OCADml >= "0.6.0"
  342. obatcher
  343. ocaml-index < "5.4.1-503"
  344. ocaml-r >= "0.4.0"
  345. ocaml-version >= "3.5.0"
  346. ocamlformat >= "0.13.0" & < "0.25.1"
  347. ocamlformat-lib
  348. ocamlformat-mlx-lib
  349. ocamlformat-rpc < "removed"
  350. ocamline
  351. ocluster
  352. octez-bls12-381-hash
  353. octez-bls12-381-signature
  354. octez-libs
  355. octez-mec
  356. ocue
  357. odoc < "2.1.1"
  358. oenv >= "0.1.0"
  359. ohex
  360. oidc
  361. opam-0install
  362. opam-0install-cudf >= "0.5.0"
  363. opam-compiler
  364. opam-file-format >= "2.1.1"
  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. 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. polynomial
  413. ppx_blob >= "0.3.0"
  414. ppx_catch
  415. ppx_deriving_cmdliner
  416. ppx_deriving_ezjsonm
  417. ppx_deriving_qcheck
  418. ppx_deriving_rpc
  419. ppx_deriving_yaml
  420. ppx_inline_alcotest
  421. ppx_map
  422. ppx_marshal
  423. ppx_mica
  424. ppx_parser
  425. ppx_protocol_conv >= "5.0.0"
  426. ppx_protocol_conv_json >= "5.0.0"
  427. ppx_protocol_conv_jsonm >= "5.0.0"
  428. ppx_protocol_conv_msgpack >= "5.0.0"
  429. ppx_protocol_conv_xml_light >= "5.0.0"
  430. ppx_protocol_conv_xmlm
  431. ppx_protocol_conv_yaml >= "5.0.0"
  432. ppx_repr
  433. ppx_subliner
  434. ppx_units
  435. ppx_yojson >= "1.1.0"
  436. pratter
  437. prbnmcn-ucb1 >= "0.0.2"
  438. prc
  439. preface
  440. pretty_expressive
  441. prettym
  442. proc-smaps
  443. producer
  444. progress
  445. prom
  446. prometheus < "1.2"
  447. prometheus-app
  448. protocell
  449. protocol-9p < "0.11.0" | >= "0.11.2"
  450. protocol-9p-unix
  451. proton
  452. psq
  453. pyast
  454. qcaml
  455. qcheck >= "0.25"
  456. qcheck-alcotest
  457. qcheck-core >= "0.25"
  458. query-json
  459. quickjs
  460. quill
  461. randii
  462. reason-standard
  463. red-black-tree
  464. reparse >= "2.0.0" & < "3.0.0"
  465. reparse-unix < "2.1.0"
  466. resp
  467. resp-unix >= "0.10.0"
  468. resto >= "0.9"
  469. rfc1951 < "1.0.0"
  470. routes < "2.0.0"
  471. rpc
  472. rpclib
  473. rpclib-async
  474. rpclib-lwt
  475. rpmfile < "0.3.0"
  476. rpmfile-eio
  477. rpmfile-unix
  478. rune
  479. SZXX >= "4.0.0"
  480. saga
  481. salsa20
  482. salsa20-core
  483. sanddb >= "0.2"
  484. saturn != "0.4.1"
  485. saturn_lockfree != "0.4.1"
  486. scrypt-kdf
  487. secp256k1 >= "0.4.1"
  488. secp256k1-internal
  489. semver >= "0.2.1"
  490. sendmail
  491. sendmail-lwt
  492. sendmail-miou-unix
  493. sendmail-mirage
  494. sendmsg
  495. seqes
  496. server-reason-react
  497. session-cookie
  498. session-cookie-async
  499. session-cookie-lwt
  500. sherlodoc
  501. sihl < "0.2.0"
  502. sihl-type
  503. slug
  504. smaws-clients
  505. smaws-lib
  506. smol
  507. smol-helpers
  508. sodium-fmt
  509. solidity-alcotest
  510. sowilo
  511. spdx_licenses
  512. spectrum >= "0.2.0"
  513. spin >= "0.7.0"
  514. spurs
  515. squirrel
  516. ssh-agent
  517. ssl >= "0.6.0"
  518. starred_ml
  519. stramon-lib
  520. stringx
  521. styled-ppx
  522. swapfs
  523. syslog-rfc5424
  524. tabr
  525. talon
  526. tar-mirage
  527. tcpip
  528. tdigest < "2.1.0"
  529. term-indexing
  530. term-tools
  531. terminal
  532. terminal_size >= "0.1.1"
  533. terminus
  534. terminus-cohttp
  535. terminus-hlc
  536. terml
  537. testo
  538. testo-lwt
  539. textmate-language >= "0.3.0"
  540. textrazor
  541. tezos-base-test-helpers < "17.3"
  542. tezos-bls12-381-polynomial
  543. tezos-client-base < "17.3"
  544. tezos-client-base-unix < "17.3"
  545. tezos-crypto >= "16.0" & < "17.3"
  546. tezos-crypto-dal < "17.3"
  547. tezos-error-monad >= "12.3" & < "17.3"
  548. tezos-event-logging-test-helpers < "17.3"
  549. tezos-plompiler = "0.1.3"
  550. tezos-plonk = "0.1.3"
  551. tezos-shell-services >= "16.0" & < "17.3"
  552. tezos-stdlib != "12.3" & < "17.3"
  553. tezos-test-helpers < "17.3"
  554. tezos-version >= "16.0" & < "17.3"
  555. tezos-webassembly-interpreter < "17.3"
  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. utop >= "2.13.0"
  596. validate
  597. validator
  598. vercel
  599. vhd-format-lwt >= "0.13.0"
  600. vpnkit
  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. xkbcommon
  610. yaml
  611. yaml-sexp
  612. yocaml
  613. yocaml_syndication >= "2.0.0"
  614. yocaml_yaml < "2.0.0"
  615. yojson >= "1.6.0"
  616. yojson-five
  617. yuscii >= "0.3.0"
  618. yuujinchou >= "1.0.0"
  619. zar
  620. zed >= "3.2.2"
  621. zlist < "0.4.0"

Conflicts (2)

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