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

Conflicts (2)

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