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

Conflicts (2)

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