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

Conflicts (2)

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