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. 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. 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. crockford
  108. css
  109. css-parser
  110. cstruct
  111. cstruct-sexp
  112. ctypes-zarith
  113. cuid
  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.2.0"
  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" & < "0.7.2"
  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. httpun
  227. httpun-ws
  228. hugin
  229. huml
  230. hvsock
  231. icalendar
  232. imagelib
  233. index
  234. inferno >= "20220603"
  235. influxdb-async
  236. influxdb-lwt
  237. inquire < "0.2.0"
  238. interval-map
  239. iomux
  240. irmin
  241. irmin-bench
  242. irmin-chunk
  243. irmin-cli
  244. irmin-containers
  245. irmin-fs
  246. irmin-git
  247. irmin-graphql
  248. irmin-pack
  249. irmin-pack-tools
  250. irmin-test != "3.6.1"
  251. irmin-tezos
  252. irmin-unix
  253. irmin-watcher
  254. jekyll-format
  255. jose
  256. json-data-encoding >= "0.9"
  257. json_decoder
  258. jsonfeed
  259. jsonxt
  260. junit_alcotest < "2.2.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. liquid_ml >= "0.1.3"
  276. lmdb >= "1.0"
  277. lockfree >= "0.3.1"
  278. logical
  279. logtk >= "1.6"
  280. lp
  281. lp-glpk
  282. lp-glpk-js < "0.5.0"
  283. lp-gurobi < "0.5.0"
  284. lru
  285. lt-code
  286. luv
  287. mazeppa
  288. mbr-format
  289. mdx >= "1.6.0"
  290. mec
  291. mechaml >= "1.2.1"
  292. merlin = "4.17.1-501"
  293. merlin-lib >= "4.17.1-501"
  294. metrics
  295. middleware
  296. mimic
  297. minicaml = "0.3.1" | >= "0.4"
  298. mirage >= "4.0.0"
  299. mirage-block-partition
  300. mirage-block-ramdisk
  301. mirage-channel >= "4.0.1"
  302. mirage-crypto-ec
  303. mirage-flow-unix
  304. mirage-kv >= "2.0.0"
  305. mirage-kv-mem
  306. mirage-kv-unix >= "3.0.0"
  307. mirage-logs
  308. mirage-nat
  309. mirage-net-unix
  310. mirage-runtime < "4.7.0"
  311. mirage-tc
  312. mjson
  313. mlgpx
  314. mmdb < "0.3.0"
  315. mnd
  316. mqtt
  317. mrmime >= "0.2.0"
  318. msgpck >= "1.6"
  319. mssql >= "2.0.3"
  320. multibase
  321. multicore-magic
  322. multihash
  323. multihash-digestif
  324. multipart-form-data
  325. multipart_form
  326. multipart_form-eio
  327. multipart_form-lwt
  328. multipart_form-miou
  329. named-pipe
  330. nanoid
  331. nbd >= "4.0.3"
  332. nbd-tool
  333. nloge
  334. nocoiner
  335. non_empty_list
  336. nx
  337. nx-datasets
  338. nx-text
  339. OCADml >= "0.6.0"
  340. obatcher
  341. ocaml-index < "5.4.1-503"
  342. ocaml-r >= "0.4.0"
  343. ocaml-version >= "3.5.0"
  344. ocamlformat >= "0.13.0" & < "0.25.1"
  345. ocamlformat-lib
  346. ocamlformat-mlx-lib
  347. ocamlformat-rpc < "removed"
  348. ocamline
  349. ocluster
  350. octez-bls12-381-hash
  351. octez-bls12-381-signature
  352. octez-libs
  353. octez-mec
  354. ocue
  355. odoc < "2.1.1"
  356. oenv >= "0.1.0"
  357. ohex
  358. oidc
  359. opam-0install
  360. opam-0install-cudf >= "0.5.0"
  361. opam-compiler
  362. opam-file-format >= "2.1.1"
  363. opencage
  364. opentelemetry >= "0.6"
  365. opentelemetry-client-cohttp-eio
  366. opentelemetry-client-cohttp-lwt >= "0.6"
  367. opentelemetry-client-ocurl >= "0.6"
  368. opentelemetry-cohttp-lwt >= "0.6"
  369. opentelemetry-logs
  370. opentelemetry-lwt >= "0.6"
  371. opium
  372. opium-graphql
  373. opium-testing
  374. opium_kernel
  375. orewa
  376. orgeat
  377. ortac-core
  378. ortac-wrapper
  379. osnap < "0.3.0"
  380. osx-acl
  381. osx-attr
  382. osx-cf
  383. osx-fsevents
  384. osx-membership
  385. osx-mount
  386. osx-xattr
  387. otoggl
  388. owl >= "0.7.0" & != "0.9.0" & != "1.0.0"
  389. owl-base < "0.5.0"
  390. owl-ode >= "0.1.0" & != "0.2.0"
  391. owl-symbolic
  392. par_incr
  393. passmaker
  394. patch
  395. pbkdf
  396. pecu >= "0.2"
  397. pf-qubes
  398. pg_query >= "0.9.6"
  399. pgx >= "1.0"
  400. pgx_unix >= "1.0"
  401. pgx_value_core
  402. pgx_value_ptime
  403. phylogenetics
  404. piaf
  405. picos < "0.5.0"
  406. picos_meta
  407. piece_rope
  408. plebeia >= "2.0.0"
  409. polyglot
  410. polynomial
  411. ppx_blob >= "0.3.0"
  412. ppx_catch
  413. ppx_deriving_cmdliner
  414. ppx_deriving_ezjsonm
  415. ppx_deriving_qcheck
  416. ppx_deriving_rpc
  417. ppx_deriving_yaml
  418. ppx_inline_alcotest
  419. ppx_map
  420. ppx_marshal
  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. qcaml
  452. qcheck >= "0.25"
  453. qcheck-alcotest
  454. qcheck-core >= "0.25"
  455. query-json
  456. quickjs
  457. quill
  458. randii
  459. reason-standard
  460. red-black-tree
  461. reparse >= "2.0.0" & < "3.0.0"
  462. reparse-unix < "2.1.0"
  463. resp
  464. resp-unix >= "0.10.0"
  465. resto >= "0.9"
  466. rfc1951 < "1.0.0"
  467. routes < "2.0.0"
  468. rpc
  469. rpclib
  470. rpclib-async
  471. rpclib-lwt
  472. rpmfile < "0.3.0"
  473. rpmfile-eio
  474. rpmfile-unix
  475. rune
  476. SZXX >= "4.0.0"
  477. saga
  478. salsa20
  479. salsa20-core
  480. sanddb >= "0.2"
  481. saturn != "0.4.1"
  482. saturn_lockfree != "0.4.1"
  483. scrypt-kdf
  484. secp256k1 >= "0.4.1"
  485. secp256k1-internal
  486. semver >= "0.2.1"
  487. sendmail
  488. sendmail-lwt
  489. sendmail-miou-unix
  490. sendmail-mirage
  491. sendmsg
  492. seqes
  493. server-reason-react
  494. session-cookie
  495. session-cookie-async
  496. session-cookie-lwt
  497. sherlodoc
  498. sihl < "0.2.0"
  499. sihl-type
  500. slug
  501. smaws-clients
  502. smaws-lib
  503. smol
  504. smol-helpers
  505. sodium-fmt
  506. solidity-alcotest
  507. sowilo
  508. spdx_licenses
  509. spectrum >= "0.2.0"
  510. spin >= "0.7.0"
  511. spurs
  512. squirrel
  513. ssh-agent
  514. ssl >= "0.6.0"
  515. starred_ml
  516. stramon-lib
  517. stringx
  518. styled-ppx
  519. swapfs
  520. syslog-rfc5424
  521. tabr
  522. talon
  523. tar-mirage
  524. tcpip
  525. tdigest < "2.1.0"
  526. term-indexing
  527. term-tools
  528. terminal
  529. terminal_size >= "0.1.1"
  530. terminus
  531. terminus-cohttp
  532. terminus-hlc
  533. terml
  534. testo
  535. testo-lwt
  536. textmate-language >= "0.3.0"
  537. textrazor
  538. tezos-base-test-helpers < "17.3"
  539. tezos-bls12-381-polynomial
  540. tezos-client-base < "17.3"
  541. tezos-client-base-unix < "17.3"
  542. tezos-crypto >= "16.0" & < "17.3"
  543. tezos-crypto-dal < "17.3"
  544. tezos-error-monad >= "12.3" & < "17.3"
  545. tezos-event-logging-test-helpers < "17.3"
  546. tezos-plompiler = "0.1.3"
  547. tezos-plonk = "0.1.3"
  548. tezos-shell-services >= "16.0" & < "17.3"
  549. tezos-stdlib != "12.3" & < "17.3"
  550. tezos-test-helpers < "17.3"
  551. tezos-version >= "16.0" & < "17.3"
  552. tezos-webassembly-interpreter < "17.3"
  553. thread-table
  554. timedesc
  555. timere
  556. timmy
  557. timmy-jsoo
  558. timmy-lwt
  559. timmy-unix
  560. tls >= "0.12.8"
  561. toc
  562. topojson
  563. topojsone
  564. trail
  565. traits
  566. transept
  567. tsort >= "2.2.0"
  568. twostep
  569. type_eq
  570. type_id
  571. typeid >= "1.0.1"
  572. tyre >= "0.4"
  573. tyxml >= "4.2.0"
  574. tyxml-jsx
  575. tyxml-ppx >= "4.3.0"
  576. tyxml-syntax
  577. uecc
  578. ulid
  579. universal-portal
  580. unix-dirent
  581. unix-errno
  582. unix-sys-resource
  583. unix-sys-stat
  584. unix-time
  585. unstrctrd
  586. uring < "0.4"
  587. user-agent-parser
  588. uspf
  589. uspf-lwt
  590. uspf-mirage
  591. uspf-unix
  592. utop >= "2.13.0"
  593. validate
  594. validator
  595. vercel
  596. vhd-format-lwt >= "0.13.0"
  597. vpnkit
  598. wayland >= "2.0"
  599. wcwidth
  600. websocketaf
  601. x509 >= "0.7.0"
  602. xapi-rrd
  603. xapi-stdext-date
  604. xapi-stdext-encodings
  605. xapi-stdext-std >= "4.16.0"
  606. yaml
  607. yaml-sexp
  608. yocaml
  609. yocaml_syndication >= "2.0.0"
  610. yocaml_yaml < "2.0.0"
  611. yojson >= "1.6.0"
  612. yojson-five
  613. yuscii >= "0.3.0"
  614. yuujinchou >= "1.0.0"
  615. zar
  616. zed >= "3.2.2"
  617. zlist < "0.4.0"

Conflicts (1)

  1. result < "1.5"