package alcotest

  1. Overview
  2. Docs
Alcotest is a lightweight and colourful test framework

Install

dune-project
 Dependency

Authors

Maintainers

Sources

alcotest-1.7.0.tbz
sha256=812bacdb34b45e88995e07d7306bdab2f72479ef1996637f1d5d1f41667902df
sha512=4ae1ba318949ec9db8b87bc8072632a02f0e4003a95ab21e474f5c34c3b5bde867b0194a2d0ea7d9fc4580c70a30ca39287d33a8c134acc7611902f79c7b7ce8

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: 27 Feb 2023

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

Conflicts (1)

  1. result < "1.5"