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

Conflicts (2)

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