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

Conflicts (2)

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