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

Conflicts (2)

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