package alcotest

  1. Overview
  2. Docs
Alcotest is a lightweight and colourful test framework

Install

dune-project
 Dependency

Authors

Maintainers

Sources

alcotest-1.7.0.tbz
sha256=812bacdb34b45e88995e07d7306bdab2f72479ef1996637f1d5d1f41667902df
sha512=4ae1ba318949ec9db8b87bc8072632a02f0e4003a95ab21e474f5c34c3b5bde867b0194a2d0ea7d9fc4580c70a30ca39287d33a8c134acc7611902f79c7b7ce8

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: 27 Feb 2023

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.1.0"
  6. astring
  7. fmt >= "0.8.7"
  8. ocaml >= "4.05.0"
  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. alcotest-async = "1.7.0"
  4. alg_structs_qcheck
  5. algaeff
  6. ambient-context
  7. ambient-context-eio
  8. ambient-context-lwt
  9. angstrom >= "0.7.0"
  10. ansi >= "0.6.0"
  11. anycache >= "0.7.4"
  12. anycache-async
  13. anycache-lwt
  14. arc
  15. archetype >= "1.4.2"
  16. archi
  17. arp
  18. arrakis < "1.1.0"
  19. art
  20. asai
  21. asak >= "0.2"
  22. asli >= "0.2.0"
  23. asn1-combinators >= "0.2.5"
  24. atd >= "2.3.3"
  25. atdgen >= "2.10.0"
  26. atdpy
  27. atdts
  28. avro-simple
  29. backoff
  30. base32
  31. base64 >= "2.1.2" & < "3.2.0" | >= "3.4.0"
  32. bastet
  33. bastet_lwt
  34. bech32
  35. bechamel >= "0.5.0"
  36. bigarray-overlap
  37. bigstringaf
  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. 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. curly
  116. current
  117. current-albatross-deployer
  118. current_git >= "0.7.1"
  119. current_incr
  120. data-encoding
  121. dates_calc
  122. dbase4
  123. decimal >= "0.3.0"
  124. decompress
  125. depyt
  126. digestif >= "0.9.0"
  127. dirsp-exchange-kbb2017
  128. dirsp-proscript-mirage
  129. dirsp-ps2ocaml
  130. dispatch >= "0.4.1"
  131. dkim
  132. dkim-bin
  133. dkim-mirage
  134. dkml-dune-dsl-show
  135. dkml-install
  136. dkml-install-installer
  137. dkml-install-runner
  138. dkml-package-console
  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
  149. docfd >= "2.2.0"
  150. dockerfile >= "8.2.7" & < "8.3.4"
  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.2.0"
  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" & < "0.7.2"
  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. 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. interval-map
  241. iomux
  242. irmin
  243. irmin-bench
  244. irmin-chunk
  245. irmin-cli
  246. irmin-containers
  247. irmin-fs
  248. irmin-git
  249. irmin-graphql
  250. irmin-pack
  251. irmin-pack-tools
  252. irmin-test != "3.6.1"
  253. irmin-tezos
  254. irmin-unix
  255. irmin-watcher
  256. jekyll-format
  257. jose
  258. json-data-encoding >= "0.9" & < "1.1.1"
  259. json_decoder
  260. jsonfeed
  261. jsonxt
  262. junit_alcotest < "2.2.0"
  263. jwto
  264. kaun
  265. kcas >= "0.6.0"
  266. kcas_data >= "0.6.0"
  267. kdf
  268. ke >= "0.2"
  269. kkmarkdown
  270. kmt
  271. lambda-runtime
  272. lambda_streams
  273. lambda_streams_async
  274. lambdapi
  275. ledgerwallet-tezos >= "0.2.1" & < "0.4.0"
  276. letters
  277. liquid_ml >= "0.1.3"
  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. neo4j_bolt
  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. 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_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. public-suffix
  455. pyast
  456. qcaml
  457. qcheck >= "0.25"
  458. qcheck-alcotest
  459. qcheck-core >= "0.25"
  460. query-json
  461. quickjs
  462. quill
  463. randii
  464. reason-standard
  465. red-black-tree
  466. reparse >= "2.0.0" & < "3.0.0"
  467. reparse-unix < "2.1.0"
  468. resp
  469. resp-unix >= "0.10.0"
  470. resto >= "0.9"
  471. rfc1951 < "1.0.0"
  472. routes < "2.0.0"
  473. rpc
  474. rpclib
  475. rpclib-async
  476. rpclib-lwt
  477. rpmfile < "0.3.0"
  478. rpmfile-eio
  479. rpmfile-unix
  480. rune
  481. SZXX >= "4.0.0"
  482. saga
  483. salsa20
  484. salsa20-core
  485. sanddb >= "0.2"
  486. saturn != "0.4.1"
  487. saturn_lockfree != "0.4.1"
  488. scrypt-kdf
  489. secp256k1 >= "0.4.1"
  490. secp256k1-internal
  491. semver >= "0.2.1"
  492. sendmail
  493. sendmail-lwt
  494. sendmail-miou-unix
  495. sendmail-mirage
  496. sendmsg
  497. seqes
  498. server-reason-react
  499. session-cookie
  500. session-cookie-async
  501. session-cookie-lwt
  502. shakuhachi
  503. sherlodoc
  504. sihl < "0.2.0"
  505. sihl-type
  506. slug
  507. smaws-clients
  508. smaws-lib
  509. smol
  510. smol-helpers
  511. sodium-fmt
  512. solidity-alcotest
  513. sowilo
  514. spdx_licenses
  515. spectrum >= "0.2.0"
  516. spin >= "0.7.0"
  517. spurs < "0.1.1"
  518. squirrel
  519. ssh-agent
  520. ssl >= "0.6.0"
  521. starred_ml
  522. stramon-lib
  523. stringx
  524. styled-ppx
  525. swapfs
  526. synchronizer >= "0.2"
  527. syslog-rfc5424 < "0.2"
  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. yaml
  615. yaml-sexp
  616. yocaml
  617. yocaml_syndication >= "2.0.0"
  618. yocaml_yaml < "2.0.0"
  619. yojson >= "1.6.0"
  620. yojson-five
  621. yuscii >= "0.3.0"
  622. yuujinchou >= "1.0.0"
  623. zar
  624. zed >= "3.2.2"
  625. zlist < "0.4.0"

Conflicts (1)

  1. result < "1.5"