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

Conflicts (1)

  1. result < "1.5"