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

Conflicts (2)

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