package alcotest

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

Install

dune-project
 Dependency

Authors

Maintainers

Sources

alcotest-1.9.1.tbz
sha256=1e29c3b41d4329062105b723dfda3aff86b8cef5e7c7500d0e491fc5fd78e482
sha512=c49d402fa636dcf11f81917610dd1d2eca8606c8919aede4db23710d071f6046a8f93c78de9fbfee26637a53ca67f71fad500bfa2478b7f0f059608a492dd0a5

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 (1)

  1. odoc with-doc

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

Conflicts (2)

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