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. docfd >= "13.0.0"
  164. dockerfile >= "8.2.7" & < "8.3.4"
  165. domain-local-await >= "0.2.1"
  166. domain-local-timeout
  167. domain-name
  168. dream
  169. dream-htmx
  170. dream-pure
  171. dscheck >= "0.1.1"
  172. duff
  173. dune-deps >= "1.4.0"
  174. dune-release >= "1.0.0"
  175. duration
  176. echo
  177. ecma-regex
  178. eio < "0.12"
  179. eio_linux
  180. eio_windows
  181. emile
  182. encore
  183. eqaf >= "0.5"
  184. equinoxe
  185. equinoxe-cohttp
  186. equinoxe-hlc
  187. ezgzip
  188. ezjsonm
  189. ezjsonm-lwt
  190. ezlua
  191. FPauth
  192. FPauth-core
  193. FPauth-responses
  194. FPauth-strategies
  195. faraday != "0.2.0"
  196. farfadet
  197. fat-filesystem
  198. fehu < "1.0.0~alpha3"
  199. ff
  200. ff-pbt
  201. flex-array
  202. flux
  203. fluxt
  204. forester >= "5.0"
  205. fsevents-lwt
  206. functoria
  207. fungi
  208. geojson
  209. geoml >= "0.1.1"
  210. git
  211. git-cohttp
  212. git-cohttp-unix
  213. git-kv != "0.1.3"
  214. git-mirage
  215. git-net
  216. git-split
  217. git-unix
  218. gitlab-unix
  219. glicko2
  220. gmap
  221. gobba
  222. gpt
  223. graphql
  224. graphql-async
  225. graphql-cohttp >= "0.13.0"
  226. graphql-lwt
  227. graphql_parser != "0.11.0"
  228. graphql_ppx
  229. h1
  230. h1_parser
  231. h2
  232. hacl
  233. hacl-star >= "0.6.0"
  234. hacl_func
  235. hacl_x25519
  236. handlebars-ml >= "0.2.1"
  237. highlexer
  238. hkdf
  239. hockmd
  240. html_of_jsx
  241. http
  242. http-multipart-formdata < "2.0.0"
  243. httpaf >= "0.2.0"
  244. httpcats
  245. httpun
  246. httpun-ws
  247. hugin < "1.0.0~alpha3"
  248. huml
  249. hvsock
  250. icalendar
  251. idna
  252. imagelib
  253. index
  254. inferno >= "20220603"
  255. influxdb-async
  256. influxdb-lwt
  257. inquire < "0.2.0"
  258. intel_hex >= "0.3"
  259. interval-map
  260. iomux
  261. irmin
  262. irmin-bench
  263. irmin-chunk
  264. irmin-cli
  265. irmin-containers
  266. irmin-fs
  267. irmin-git
  268. irmin-graphql
  269. irmin-pack
  270. irmin-pack-tools
  271. irmin-test != "3.6.1"
  272. irmin-tezos
  273. irmin-unix
  274. irmin-watcher
  275. jekyll-format
  276. jose
  277. json-data-encoding >= "0.9" & < "1.1.1"
  278. json_decoder
  279. jsonfeed
  280. jsonschema-core
  281. jsonschema-validation
  282. jsonxt
  283. junit_alcotest < "2.3.0"
  284. jwto
  285. kaun < "1.0.0~alpha3"
  286. kcas >= "0.6.0"
  287. kcas_data >= "0.6.0"
  288. kdf
  289. ke >= "0.2"
  290. kkmarkdown
  291. kmt
  292. lambda-runtime
  293. lambda_streams
  294. lambda_streams_async
  295. lambdapi
  296. layoutz
  297. letters
  298. liquid_ml >= "0.1.3"
  299. lmdb >= "1.0"
  300. lockfree >= "0.3.1"
  301. logical
  302. logtk
  303. lp
  304. lp-glpk
  305. lp-glpk-js < "0.5.0"
  306. lp-gurobi < "0.5.0"
  307. lru
  308. lt-code
  309. luv
  310. mazeppa
  311. mbr-format
  312. mdx
  313. mec
  314. mechaml >= "1.2.1"
  315. menhir-lsp >= "0.3.3"
  316. merlin = "4.17.1-501"
  317. merlin-lib >= "4.17.1-501"
  318. metrics
  319. mfat
  320. miaou-core
  321. middleware
  322. migra
  323. mimic
  324. minicaml = "0.3.1" | >= "0.4"
  325. mirage >= "4.0.0"
  326. mirage-block-partition
  327. mirage-block-ramdisk
  328. mirage-channel >= "4.0.1"
  329. mirage-crypto-ec
  330. mirage-flow-unix
  331. mirage-kv >= "2.0.0"
  332. mirage-kv-mem
  333. mirage-kv-unix >= "3.0.0"
  334. mirage-logs
  335. mirage-nat
  336. mirage-net-unix
  337. mirage-runtime < "4.7.0"
  338. mirage-tc
  339. mjson
  340. mlgpx
  341. mmdb < "0.3.0"
  342. mnd
  343. mqtt
  344. mrmime >= "0.2.0"
  345. msgpck >= "1.6"
  346. mssql
  347. multibase
  348. multicore-magic
  349. multihash
  350. multihash-digestif
  351. multipart-form-data
  352. multipart_form
  353. multipart_form-eio
  354. multipart_form-lwt
  355. multipart_form-miou
  356. named-pipe
  357. nanoid
  358. nbd >= "4.0.3"
  359. nbd-tool
  360. neo4j_bolt
  361. nloge
  362. nocoiner
  363. non_empty_list
  364. nx < "1.0.0~alpha3"
  365. nx-datasets
  366. nx-text
  367. OCADml >= "0.6.0"
  368. obatcher
  369. object
  370. ocaml-ai-sdk
  371. ocaml-index < "5.4.1-503"
  372. ocaml-r >= "0.4.0"
  373. ocaml-version >= "3.5.0"
  374. ocamlformat < "0.25.1"
  375. ocamlformat-lib
  376. ocamlformat-mlx-lib
  377. ocamlformat-rpc < "removed"
  378. ocamline
  379. ocgtk
  380. ochre
  381. ochre-cli
  382. ocluster
  383. ocue
  384. odoc < "2.1.1"
  385. oenv >= "0.1.0"
  386. ohex
  387. oidc
  388. oktree >= "0.2.4"
  389. opam-0install
  390. opam-0install-cudf >= "0.5.0"
  391. opam-compiler
  392. opam-file-format >= "2.1.1"
  393. opam-repomin
  394. opencage
  395. opentelemetry >= "0.6"
  396. opentelemetry-client
  397. opentelemetry-client-cohttp-eio
  398. opentelemetry-client-cohttp-lwt >= "0.6"
  399. opentelemetry-client-ocurl >= "0.6"
  400. opentelemetry-client-ocurl-lwt
  401. opentelemetry-cohttp-lwt >= "0.6"
  402. opentelemetry-logs
  403. opentelemetry-lwt >= "0.6"
  404. opium
  405. opium-graphql
  406. opium-testing
  407. opium_kernel
  408. orewa
  409. orgeat
  410. ortac-core
  411. ortac-wrapper
  412. osnap < "0.3.0"
  413. osx-acl
  414. osx-attr
  415. osx-cf
  416. osx-fsevents
  417. osx-membership
  418. osx-mount
  419. osx-xattr
  420. otoggl
  421. owl >= "0.7.0" & != "0.9.0" & != "1.0.0"
  422. owl-base < "0.5.0"
  423. owl-ode >= "0.1.0" & != "0.2.0"
  424. owl-symbolic
  425. par_incr
  426. parseff
  427. passe
  428. passmaker
  429. patch
  430. pbkdf
  431. pecu >= "0.2"
  432. pf-qubes
  433. pg_query >= "0.9.6"
  434. pgx
  435. pgx_unix
  436. pgx_value_core
  437. pgx_value_ptime
  438. phylogenetics
  439. piaf
  440. picos < "0.5.0"
  441. picos_meta
  442. piece_rope
  443. plebeia >= "2.0.0"
  444. polyglot
  445. polymarket
  446. polynomial
  447. ppx_blob >= "0.3.0"
  448. ppx_catch
  449. ppx_deriving_cmdliner
  450. ppx_deriving_ezjsonm
  451. ppx_deriving_qcheck
  452. ppx_deriving_rpc
  453. ppx_deriving_yaml
  454. ppx_ezlua
  455. ppx_inline_alcotest
  456. ppx_map
  457. ppx_marshal
  458. ppx_mica
  459. ppx_parser
  460. ppx_protocol_conv
  461. ppx_protocol_conv_json
  462. ppx_protocol_conv_jsonm
  463. ppx_protocol_conv_msgpack
  464. ppx_protocol_conv_xml_light
  465. ppx_protocol_conv_xmlm
  466. ppx_protocol_conv_yaml
  467. ppx_repr
  468. ppx_subliner
  469. ppx_units
  470. ppx_yojson >= "1.1.0"
  471. pratter
  472. prbnmcn-ucb1 >= "0.0.2"
  473. prc
  474. preface
  475. pretty_expressive
  476. prettym
  477. proc-smaps
  478. producer
  479. progress
  480. prom
  481. prometheus < "1.2"
  482. prometheus-app
  483. protocell
  484. protocol-9p < "0.11.0" | >= "0.11.2"
  485. protocol-9p-unix
  486. proton
  487. psq
  488. public-suffix
  489. pxshot
  490. pyast
  491. qcaml
  492. qcheck >= "0.25"
  493. qcheck-alcotest
  494. qcheck-core >= "0.25"
  495. qcow-stream >= "0.13.0"
  496. qcow-tool = "0.13.0"
  497. qcow-types = "0.13.0"
  498. qdrant
  499. query-json
  500. quickjs
  501. quill < "1.0.0~alpha3"
  502. randii
  503. reason-standard
  504. red-black-tree
  505. reparse >= "2.0.0" & < "3.0.0"
  506. reparse-unix < "2.1.0"
  507. resp
  508. resp-unix >= "0.10.0"
  509. resto >= "0.9"
  510. rfc1951 < "1.0.0"
  511. routes < "2.0.0"
  512. rpc
  513. rpclib
  514. rpclib-async
  515. rpclib-lwt
  516. rpmfile < "0.3.0"
  517. rpmfile-eio
  518. rpmfile-unix
  519. rune < "1.0.0~alpha3"
  520. SZXX >= "4.0.0"
  521. saga
  522. salsa20
  523. salsa20-core
  524. sanddb >= "0.2"
  525. saturn != "0.4.1"
  526. saturn_lockfree != "0.4.1"
  527. scrypt-kdf
  528. secp256k1 >= "0.4.1"
  529. secp256k1-internal
  530. semver >= "0.2.1"
  531. sendmail
  532. sendmail-lwt
  533. sendmail-miou-unix
  534. sendmail-mirage
  535. sendmsg
  536. seqes
  537. server-reason-react
  538. session-cookie
  539. session-cookie-async
  540. session-cookie-lwt
  541. sha256-cng
  542. shakuhachi
  543. sherlodoc
  544. sihl < "0.2.0"
  545. sihl-type
  546. slug
  547. smaws-clients
  548. smaws-lib
  549. smol
  550. smol-helpers
  551. sodium-fmt
  552. solidity-alcotest
  553. sowilo < "1.0.0~alpha3"
  554. spdx_licenses
  555. spectrum >= "0.2.0"
  556. spectrum_capabilities
  557. spectrum_palette_ppx
  558. spectrum_palettes
  559. spectrum_tools
  560. spin >= "0.7.0"
  561. spurs < "0.1.1"
  562. squirrel
  563. ssh-agent
  564. ssl >= "0.6.0"
  565. starred_ml < "0.0.8"
  566. stem
  567. stramon-lib
  568. stringx
  569. styled-ppx
  570. swapfs
  571. symex >= "0.2"
  572. symphony-orchestrator-tui
  573. synchronizer >= "0.2"
  574. syslog-rfc5424 < "0.2"
  575. syto
  576. tabr
  577. talon < "1.0.0~alpha3"
  578. tar-eio >= "3.5.0"
  579. tar-mirage
  580. tbls
  581. tcpip
  582. tdigest < "2.1.0"
  583. term-indexing
  584. term-tools
  585. terminal
  586. terminal_size >= "0.1.1"
  587. terminus
  588. terminus-cohttp
  589. terminus-hlc
  590. terml
  591. testo
  592. testo-lwt
  593. textmate-language >= "0.3.0"
  594. textrazor
  595. thread-table
  596. timedesc
  597. timere
  598. timmy
  599. timmy-jsoo
  600. timmy-lwt
  601. timmy-unix
  602. tls >= "0.12.8"
  603. toc
  604. topojson
  605. topojsone
  606. trail
  607. traits
  608. transept
  609. tsort >= "2.2.0"
  610. twostep
  611. type_eq
  612. type_id
  613. typeid >= "1.0.1"
  614. tyre >= "0.4"
  615. tyxml >= "4.2.0"
  616. tyxml-jsx
  617. tyxml-ppx >= "4.3.0"
  618. tyxml-syntax
  619. uecc
  620. ulid
  621. universal-portal
  622. unix-dirent
  623. unix-errno
  624. unix-sys-resource
  625. unix-sys-stat
  626. unix-time
  627. unstrctrd
  628. uring < "0.4"
  629. user-agent-parser
  630. uspf
  631. uspf-lwt
  632. uspf-mirage
  633. uspf-unix
  634. utcp
  635. utop >= "2.13.0"
  636. validate
  637. validator
  638. valkey
  639. vercel
  640. vhd-format-lwt >= "0.13.0"
  641. wayland >= "2.0"
  642. wcwidth
  643. websocketaf
  644. wire
  645. x509 >= "0.7.0"
  646. xapi-rrd
  647. xapi-stdext-date
  648. xapi-stdext-encodings
  649. xapi-stdext-std >= "4.16.0"
  650. xdge
  651. xkbcommon
  652. yaml
  653. yaml-sexp
  654. yocaml
  655. yocaml_syndication >= "2.0.0"
  656. yocaml_yaml < "2.0.0"
  657. yojson >= "1.6.0"
  658. yojson-five
  659. yuscii >= "0.3.0"
  660. yuujinchou >= "1.0.0"
  661. zar
  662. zed >= "3.2.2"
  663. zlist < "0.4.0"

Conflicts (2)

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