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. aho-corasick
  2. ahrocksdb
  3. albatross >= "1.5.4"
  4. alcobar
  5. alcotest-async >= "1.9.1"
  6. alcotest-js >= "1.9.1"
  7. alcotest-lwt >= "1.9.1"
  8. alcotest-mirage >= "1.9.1"
  9. alg_structs_qcheck
  10. algaeff
  11. ambient-context
  12. ambient-context-eio
  13. ambient-context-lwt
  14. angstrom >= "0.7.0"
  15. ansi >= "0.6.0"
  16. anycache >= "0.7.4"
  17. anycache-lwt
  18. arc
  19. archetype >= "1.4.2"
  20. archi
  21. arp
  22. arrakis < "1.1.0"
  23. art
  24. asai
  25. asak
  26. asli >= "0.2.0"
  27. asn1-combinators >= "0.2.5"
  28. atd >= "2.3.3"
  29. atdgen >= "2.10.0"
  30. atdpy
  31. atdts
  32. avro-simple
  33. aws-eio
  34. awskit
  35. awskit-eio
  36. awskit-lwt
  37. awskit-lwt-unix < "0.2.0"
  38. awskit-s3
  39. awskit-s3-eio < "0.2.0"
  40. awskit-s3-lwt < "0.2.0"
  41. awskit-s3-lwt-unix < "0.2.0"
  42. awskit-s3-sim
  43. azure-cosmos-db-eio
  44. backoff
  45. base32
  46. base64 >= "2.1.2" & < "3.2.0" | >= "3.4.0"
  47. bastet
  48. bastet_lwt
  49. bech32
  50. bechamel >= "0.5.0"
  51. bigarray-overlap
  52. bigstringaf
  53. bin_there
  54. biotk >= "0.4"
  55. bitlib
  56. bizowie-api
  57. blake2
  58. bloomf
  59. bls12-381 < "0.4.1" | >= "3.0.0" & < "18.0"
  60. bls12-381-hash
  61. bls12-381-js >= "0.4.2"
  62. bls12-381-js-gen >= "0.4.2"
  63. bls12-381-legacy
  64. bls12-381-signature
  65. bls12-381-unix
  66. blurhash
  67. bm25
  68. brisk-reconciler
  69. builder-web
  70. bytebuffer
  71. bytream >= "0.2"
  72. ca-certs
  73. ca-certs-nss
  74. cabal
  75. cachet
  76. cachet-lwt
  77. cachet-solo5
  78. cactus
  79. caldav
  80. calendar >= "3.0.0"
  81. calendars >= "2.0.0"
  82. callipyge
  83. camlix
  84. camlkit
  85. camlkit-base
  86. capnp-rpc
  87. capnp-rpc-unix
  88. caqti >= "1.7.0"
  89. caqti-async >= "1.7.0"
  90. caqti-driver-mariadb >= "1.7.0"
  91. caqti-driver-postgresql >= "1.7.0"
  92. caqti-driver-sqlite3 >= "1.7.0"
  93. caqti-dynload = "2.0.1"
  94. caqti-eio
  95. caqti-lwt >= "1.7.0"
  96. caqti-miou
  97. carray
  98. carton < "1.0.0"
  99. carton-git
  100. carton-lwt >= "0.4.3" & < "1.0.0"
  101. cascade
  102. catala >= "0.6.0"
  103. cborl
  104. cf-lwt
  105. chacha
  106. chamelon
  107. chamelon-unix
  108. charrua-client
  109. charrua-server
  110. checked_oint
  111. checkseum >= "0.0.3"
  112. cid
  113. clarity-lang
  114. class_group_vdf
  115. cohttp
  116. cohttp-curl-async
  117. cohttp-curl-lwt
  118. cohttp-eio >= "6.0.0~beta2"
  119. cohttp-mirage >= "6.3.0"
  120. colombe >= "0.2.0"
  121. color
  122. commons
  123. conan
  124. conan-cli
  125. conan-database
  126. conan-lwt
  127. conan-unix
  128. conex < "0.10.0"
  129. conex-mirage-crypto
  130. conformist
  131. contract
  132. cookie
  133. corosync
  134. cow >= "2.2.0"
  135. crockford
  136. css
  137. css-parser
  138. cstruct
  139. cstruct-sexp
  140. ctypes-zarith
  141. cuid
  142. cure2
  143. curly
  144. current
  145. current-albatross-deployer
  146. current_git >= "0.7.1"
  147. current_incr
  148. current_rpc >= "0.7.4"
  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
  174. docfd >= "13.0.0"
  175. dockerfile >= "8.2.7"
  176. dockerfile-opam >= "8.3.4"
  177. domain-local-await >= "0.2.1"
  178. domain-local-timeout
  179. domain-name
  180. dream
  181. dream-htmx
  182. dream-pure
  183. dscheck >= "0.1.1"
  184. duff
  185. dune-deps >= "1.4.0"
  186. dune-release >= "1.0.0"
  187. duration
  188. ease-caml >= "0.1.7"
  189. echo
  190. ecma-regex
  191. eio < "0.12"
  192. eio_linux
  193. eio_windows
  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. guardian >= "0.4.0"
  246. h1
  247. h1_parser
  248. h2
  249. hacl
  250. hacl-star >= "0.6.0"
  251. hacl_func
  252. hacl_x25519
  253. handlebars-ml >= "0.2.1"
  254. hedgehog-alcotest
  255. hegel
  256. highlexer
  257. highway
  258. highway-dream
  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"
  301. json-data-encoding-bson >= "1.1.1"
  302. json_decoder
  303. jsonfeed
  304. jsonschema-core
  305. jsonschema-validation
  306. jsonxt
  307. junit_alcotest >= "2.2.0"
  308. jwto
  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. mel-bastet
  342. melange >= "7.0.0-51"
  343. melange-edn >= "0.5.0"
  344. menhir-lsp >= "0.3.3"
  345. menhirformat
  346. merlin = "4.17.1-501"
  347. merlin-lib >= "4.17.1-501"
  348. metrics
  349. mfat
  350. mfetch
  351. miaou-core
  352. middleware
  353. migra
  354. mimic
  355. minicaml = "0.3.1" | >= "0.4"
  356. mirage >= "4.0.0"
  357. mirage-block-partition
  358. mirage-block-ramdisk
  359. mirage-channel >= "4.0.1"
  360. mirage-crypto-ec
  361. mirage-flow-unix
  362. mirage-kv >= "2.0.0"
  363. mirage-kv-mem >= "4.0.1"
  364. mirage-kv-unix >= "3.0.0"
  365. mirage-logs
  366. mirage-nat
  367. mirage-net-unix
  368. mirage-runtime < "4.7.0"
  369. mirage-tc
  370. mjson
  371. mlgpx
  372. mmdb < "0.3.0"
  373. mnd
  374. modelkit
  375. modelkit-nx
  376. modelkit-parallel
  377. modelkit-talon
  378. mqtt
  379. mrmime >= "0.2.0"
  380. msgpck >= "1.6"
  381. mssql
  382. multibase
  383. multicore-magic
  384. multihash
  385. multihash-digestif
  386. multipart-form-data
  387. multipart_form
  388. multipart_form-eio
  389. multipart_form-lwt
  390. multipart_form-miou
  391. named-pipe
  392. nanoid
  393. nbd >= "4.0.3"
  394. nbd-tool
  395. nel
  396. neo4j_bolt
  397. neodriver
  398. neodriver_core
  399. neodriver_eio
  400. neodriver_packstream
  401. nloge
  402. nocoiner
  403. noise
  404. non_empty_list
  405. nx < "1.0.0~alpha3"
  406. nx-datasets
  407. nx-text
  408. OCADml >= "0.6.0"
  409. obatcher
  410. object
  411. obs-eio
  412. obs-prometheus-eio
  413. ocaml-ai-sdk
  414. ocaml-index < "5.4.1-503"
  415. ocaml-r >= "0.4.0"
  416. ocaml-version >= "3.5.0"
  417. ocamlformat < "0.25.1"
  418. ocamlformat-lib
  419. ocamlformat-mlx-lib
  420. ocamlformat-rpc < "removed"
  421. ocamline
  422. ocgtk
  423. ochre
  424. ochre-cli
  425. ocluster
  426. ocue
  427. odoc < "2.1.1"
  428. oenv >= "0.1.0"
  429. ohex
  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. par_incr
  470. parseff
  471. passe
  472. passmaker
  473. patch
  474. pbkdf
  475. pecu >= "0.2"
  476. pf-qubes
  477. pg_query >= "0.9.6"
  478. pgx
  479. pgx_unix
  480. pgx_value_core
  481. pgx_value_ptime
  482. phylogenetics
  483. piaf
  484. picos < "0.5.0"
  485. picos_meta
  486. pidgin
  487. pidgio
  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_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. primavera >= "1.1.0"
  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. purl
  543. pxshot
  544. pyast
  545. qcaml
  546. qcheck >= "0.25"
  547. qcheck-alcotest
  548. qcheck-core >= "0.25"
  549. qcow-stream >= "0.13.0"
  550. qcow-tool = "0.13.0"
  551. qcow-types = "0.13.0"
  552. qdrant
  553. query-json
  554. quickjs
  555. quill < "1.0.0~alpha3"
  556. randii
  557. reason-standard
  558. red-black-tree
  559. reparse >= "2.0.0" & < "3.0.0"
  560. reparse-unix < "2.1.0"
  561. resp
  562. resp-unix >= "0.10.0"
  563. resto >= "0.9"
  564. rfc1951 < "1.0.0"
  565. routes < "2.0.0"
  566. rpc
  567. rpclib
  568. rpclib-async
  569. rpclib-lwt
  570. rpmfile < "0.3.0"
  571. rpmfile-eio
  572. rpmfile-unix
  573. rune < "1.0.0~alpha3"
  574. runtime_events_tools >= "0.5.2"
  575. SZXX >= "4.0.0"
  576. saga
  577. salsa20
  578. salsa20-core
  579. sanddb >= "0.2"
  580. saturn != "0.4.1"
  581. saturn_lockfree != "0.4.1"
  582. scrypt-kdf
  583. secp256k1 >= "0.4.1"
  584. secp256k1-internal
  585. secret
  586. semver >= "0.2.1"
  587. sendmail
  588. sendmail-lwt
  589. sendmail-miou-unix
  590. sendmail-mirage
  591. sendmsg
  592. seqes
  593. server-reason-react
  594. session-cookie
  595. session-cookie-async
  596. session-cookie-lwt
  597. sha256-cng
  598. shakuhachi
  599. sherlodoc
  600. sihl < "0.2.0"
  601. sihl-type
  602. slug
  603. smaws-clients
  604. smaws-lib
  605. smol
  606. smol-helpers
  607. smtml >= "0.30.0"
  608. sodium-fmt
  609. solidity-alcotest
  610. sosie
  611. soteria
  612. sowilo < "1.0.0~alpha3"
  613. spdx_licenses
  614. spectrum >= "0.2.0"
  615. spectrum_capabilities
  616. spectrum_palette_ppx
  617. spectrum_palettes
  618. spectrum_tools
  619. spin >= "0.7.0"
  620. spurs < "0.1.1"
  621. squirrel
  622. ssh-agent
  623. ssl >= "0.6.0"
  624. starred_ml
  625. stem
  626. stramon-lib
  627. stringx
  628. styled-ppx
  629. swapfs
  630. symex >= "0.2"
  631. symphony-orchestrator-tui
  632. synchronizer >= "0.2"
  633. syslog-rfc5424
  634. syto
  635. tabr
  636. talon < "1.0.0~alpha3"
  637. tar-eio >= "3.5.0"
  638. tar-mirage
  639. tbls
  640. tcpip
  641. tdigest < "2.1.0"
  642. tdmrep
  643. term-indexing
  644. term-tools
  645. termaid
  646. terminal
  647. terminal_size >= "0.1.1"
  648. terminus
  649. terminus-cohttp
  650. terminus-hlc
  651. terml
  652. testo
  653. testo-lwt
  654. textmate-language >= "0.3.0"
  655. textrazor
  656. thread-table
  657. timedesc
  658. timere
  659. timmy
  660. timmy-jsoo
  661. timmy-lwt
  662. timmy-unix
  663. tls >= "0.12.8"
  664. toc
  665. topojson
  666. topojsone
  667. trail
  668. traits
  669. transept
  670. tsort >= "2.2.0"
  671. tw
  672. twostep
  673. type_eq
  674. type_id
  675. typeid >= "1.0.1"
  676. tyre >= "0.4"
  677. tyxml >= "4.2.0"
  678. tyxml-jsx
  679. tyxml-ppx >= "4.3.0"
  680. tyxml-syntax
  681. ucharset
  682. uecc
  683. ulid
  684. universal-portal
  685. unix-dirent
  686. unix-errno
  687. unix-sys-resource
  688. unix-sys-stat
  689. unix-time
  690. unstrctrd
  691. uring < "0.4"
  692. user-agent-parser
  693. uspf
  694. uspf-lwt
  695. uspf-mirage
  696. uspf-unix
  697. utcp
  698. utop >= "2.13.0"
  699. validate
  700. validator
  701. valkey
  702. vercel
  703. vhd-format-lwt >= "0.13.0"
  704. wayland >= "2.0"
  705. wcwidth
  706. websocketaf
  707. wire
  708. x509 >= "0.7.0"
  709. xapi-rrd
  710. xapi-stdext-date
  711. xapi-stdext-encodings
  712. xapi-stdext-std >= "4.16.0"
  713. xdge
  714. xgboost
  715. xkbcommon
  716. yaml
  717. yaml-sexp
  718. yocaml
  719. yocaml_syndication >= "2.0.0"
  720. yocaml_yaml < "2.0.0"
  721. yojson >= "1.6.0"
  722. yojson-five
  723. yuscii >= "0.3.0"
  724. yuujinchou >= "1.0.0"
  725. zar
  726. zed >= "3.2.2"
  727. zlist < "0.4.0"

Conflicts (2)

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