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.

Added to opam-repository:

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

Conflicts (2)

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