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. 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. nloge
  337. nocoiner
  338. non_empty_list
  339. nx
  340. nx-datasets
  341. nx-text
  342. OCADml >= "0.6.0"
  343. obatcher
  344. ocaml-index < "5.4.1-503"
  345. ocaml-r >= "0.4.0"
  346. ocaml-version >= "3.5.0"
  347. ocamlformat >= "0.13.0" & < "0.25.1"
  348. ocamlformat-lib
  349. ocamlformat-mlx-lib
  350. ocamlformat-rpc < "removed"
  351. ocamline
  352. ocluster
  353. octez-bls12-381-hash
  354. octez-bls12-381-signature
  355. octez-libs
  356. octez-mec
  357. ocue
  358. odoc < "2.1.1"
  359. oenv >= "0.1.0"
  360. ohex
  361. oidc
  362. opam-0install
  363. opam-0install-cudf >= "0.5.0"
  364. opam-compiler
  365. opam-file-format >= "2.1.1"
  366. opencage
  367. opentelemetry >= "0.6"
  368. opentelemetry-client-cohttp-eio
  369. opentelemetry-client-cohttp-lwt >= "0.6"
  370. opentelemetry-client-ocurl >= "0.6"
  371. opentelemetry-cohttp-lwt >= "0.6"
  372. opentelemetry-logs
  373. opentelemetry-lwt >= "0.6"
  374. opium
  375. opium-graphql
  376. opium-testing
  377. opium_kernel
  378. orewa
  379. orgeat
  380. ortac-core
  381. ortac-wrapper
  382. osnap < "0.3.0"
  383. osx-acl
  384. osx-attr
  385. osx-cf
  386. osx-fsevents
  387. osx-membership
  388. osx-mount
  389. osx-xattr
  390. otoggl
  391. owl >= "0.7.0" & != "0.9.0" & != "1.0.0"
  392. owl-base < "0.5.0"
  393. owl-ode >= "0.1.0" & != "0.2.0"
  394. owl-symbolic
  395. par_incr
  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. polynomial
  414. ppx_blob >= "0.3.0"
  415. ppx_catch
  416. ppx_deriving_cmdliner
  417. ppx_deriving_ezjsonm
  418. ppx_deriving_qcheck
  419. ppx_deriving_rpc
  420. ppx_deriving_yaml
  421. ppx_inline_alcotest
  422. ppx_map
  423. ppx_marshal
  424. ppx_mica
  425. ppx_parser
  426. ppx_protocol_conv >= "5.0.0"
  427. ppx_protocol_conv_json >= "5.0.0"
  428. ppx_protocol_conv_jsonm >= "5.0.0"
  429. ppx_protocol_conv_msgpack >= "5.0.0"
  430. ppx_protocol_conv_xml_light >= "5.0.0"
  431. ppx_protocol_conv_xmlm
  432. ppx_protocol_conv_yaml >= "5.0.0"
  433. ppx_repr
  434. ppx_subliner
  435. ppx_units
  436. ppx_yojson >= "1.1.0"
  437. pratter
  438. prbnmcn-ucb1 >= "0.0.2"
  439. prc
  440. preface
  441. pretty_expressive
  442. prettym
  443. proc-smaps
  444. producer
  445. progress
  446. prom
  447. prometheus < "1.2"
  448. prometheus-app
  449. protocell
  450. protocol-9p < "0.11.0" | >= "0.11.2"
  451. protocol-9p-unix
  452. proton
  453. psq
  454. pyast
  455. qcaml
  456. qcheck >= "0.25"
  457. qcheck-alcotest
  458. qcheck-core >= "0.25"
  459. query-json
  460. quickjs
  461. quill
  462. randii
  463. reason-standard
  464. red-black-tree
  465. reparse >= "2.0.0" & < "3.0.0"
  466. reparse-unix < "2.1.0"
  467. resp
  468. resp-unix >= "0.10.0"
  469. resto >= "0.9"
  470. rfc1951 < "1.0.0"
  471. routes < "2.0.0"
  472. rpc
  473. rpclib
  474. rpclib-async
  475. rpclib-lwt
  476. rpmfile < "0.3.0"
  477. rpmfile-eio
  478. rpmfile-unix
  479. rune
  480. SZXX >= "4.0.0"
  481. saga
  482. salsa20
  483. salsa20-core
  484. sanddb >= "0.2"
  485. saturn != "0.4.1"
  486. saturn_lockfree != "0.4.1"
  487. scrypt-kdf
  488. secp256k1 >= "0.4.1"
  489. secp256k1-internal
  490. semver >= "0.2.1"
  491. sendmail
  492. sendmail-lwt
  493. sendmail-miou-unix
  494. sendmail-mirage
  495. sendmsg
  496. seqes
  497. server-reason-react
  498. session-cookie
  499. session-cookie-async
  500. session-cookie-lwt
  501. sherlodoc
  502. sihl < "0.2.0"
  503. sihl-type
  504. slug
  505. smaws-clients
  506. smaws-lib
  507. smol
  508. smol-helpers
  509. sodium-fmt
  510. solidity-alcotest
  511. sowilo
  512. spdx_licenses
  513. spectrum >= "0.2.0"
  514. spin >= "0.7.0"
  515. spurs
  516. squirrel
  517. ssh-agent
  518. ssl >= "0.6.0"
  519. starred_ml
  520. stramon-lib
  521. stringx
  522. styled-ppx
  523. swapfs
  524. syslog-rfc5424
  525. tabr
  526. talon
  527. tar-mirage
  528. tcpip
  529. tdigest < "2.1.0"
  530. term-indexing
  531. term-tools
  532. terminal
  533. terminal_size >= "0.1.1"
  534. terminus
  535. terminus-cohttp
  536. terminus-hlc
  537. terml
  538. testo
  539. testo-lwt
  540. textmate-language >= "0.3.0"
  541. textrazor
  542. tezos-base-test-helpers < "17.3"
  543. tezos-bls12-381-polynomial
  544. tezos-client-base < "17.3"
  545. tezos-client-base-unix < "17.3"
  546. tezos-crypto >= "16.0" & < "17.3"
  547. tezos-crypto-dal < "17.3"
  548. tezos-error-monad >= "12.3" & < "17.3"
  549. tezos-event-logging-test-helpers < "17.3"
  550. tezos-plompiler = "0.1.3"
  551. tezos-plonk = "0.1.3"
  552. tezos-shell-services >= "16.0" & < "17.3"
  553. tezos-stdlib != "12.3" & < "17.3"
  554. tezos-test-helpers < "17.3"
  555. tezos-version >= "16.0" & < "17.3"
  556. tezos-webassembly-interpreter < "17.3"
  557. thread-table
  558. timedesc
  559. timere
  560. timmy
  561. timmy-jsoo
  562. timmy-lwt
  563. timmy-unix
  564. tls >= "0.12.8"
  565. toc
  566. topojson
  567. topojsone
  568. trail
  569. traits
  570. transept
  571. tsort >= "2.2.0"
  572. twostep
  573. type_eq
  574. type_id
  575. typeid >= "1.0.1"
  576. tyre >= "0.4"
  577. tyxml >= "4.2.0"
  578. tyxml-jsx
  579. tyxml-ppx >= "4.3.0"
  580. tyxml-syntax
  581. uecc
  582. ulid
  583. universal-portal
  584. unix-dirent
  585. unix-errno
  586. unix-sys-resource
  587. unix-sys-stat
  588. unix-time
  589. unstrctrd
  590. uring < "0.4"
  591. user-agent-parser
  592. uspf
  593. uspf-lwt
  594. uspf-mirage
  595. uspf-unix
  596. utop >= "2.13.0"
  597. validate
  598. validator
  599. vercel
  600. vhd-format-lwt >= "0.13.0"
  601. vpnkit
  602. wayland >= "2.0"
  603. wcwidth
  604. websocketaf
  605. x509 >= "0.7.0"
  606. xapi-rrd
  607. xapi-stdext-date
  608. xapi-stdext-encodings
  609. xapi-stdext-std >= "4.16.0"
  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"