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. faker
  209. faraday != "0.2.0"
  210. farfadet
  211. fat-filesystem
  212. fehu < "1.0.0~alpha3"
  213. ff
  214. ff-pbt
  215. flex-array
  216. flux
  217. fluxt
  218. forcamla
  219. forester >= "5.0"
  220. fsevents-lwt
  221. functoria
  222. fungi
  223. fxmacrodata
  224. geojson
  225. geoml >= "0.1.1"
  226. git
  227. git-cohttp
  228. git-cohttp-unix
  229. git-kv != "0.1.3"
  230. git-mirage
  231. git-net
  232. git-split
  233. git-unix
  234. gitlab-unix
  235. glicko2
  236. gmap
  237. gmocoin
  238. gobba
  239. gpt
  240. graphql
  241. graphql-async
  242. graphql-cohttp >= "0.13.0"
  243. graphql-lwt
  244. graphql_parser != "0.11.0"
  245. graphql_ppx
  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. hkdf
  258. hockmd
  259. hpke
  260. html_of_jsx
  261. http
  262. http-multipart-formdata < "2.0.0"
  263. httpaf >= "0.2.0"
  264. httpcats
  265. https-eio
  266. httpun
  267. httpun-ws
  268. hugin < "1.0.0~alpha3"
  269. huml
  270. hvsock
  271. icalendar
  272. idna
  273. imagelib
  274. index
  275. inferno >= "20220603"
  276. influxdb-async
  277. influxdb-lwt
  278. inquire < "0.2.0"
  279. intel_hex >= "0.3"
  280. interval-map
  281. iomux
  282. irmin
  283. irmin-bench
  284. irmin-chunk
  285. irmin-cli
  286. irmin-containers
  287. irmin-fs
  288. irmin-git
  289. irmin-graphql
  290. irmin-pack
  291. irmin-pack-tools
  292. irmin-test != "3.6.1"
  293. irmin-tezos
  294. irmin-unix
  295. irmin-watcher
  296. jekyll-format
  297. jose
  298. json-data-encoding >= "0.9" & < "1.1.1"
  299. json_decoder
  300. jsonfeed
  301. jsonschema-core
  302. jsonschema-validation
  303. jsonxt
  304. junit_alcotest < "2.3.0"
  305. jwto
  306. kafka-eio
  307. kaun < "1.0.0~alpha3"
  308. kcas >= "0.6.0"
  309. kcas_data >= "0.6.0"
  310. kdf
  311. ke >= "0.2"
  312. kkmarkdown
  313. kmt
  314. kube
  315. lambda-runtime
  316. lambda_streams
  317. lambda_streams_async
  318. lambdapi
  319. layoutz
  320. letters
  321. liquid_ml >= "0.1.3"
  322. lmdb >= "1.0"
  323. lockfree >= "0.3.1"
  324. logical
  325. logtk
  326. lp
  327. lp-glpk
  328. lp-glpk-js < "0.5.0"
  329. lp-gurobi < "0.5.0"
  330. lru
  331. lt-code
  332. luv
  333. mazeppa
  334. mbr-format
  335. mdx
  336. mec
  337. mechaml >= "1.2.1"
  338. melange >= "7.0.0-51"
  339. melange-edn >= "0.5.0"
  340. menhir-lsp >= "0.3.3"
  341. menhirformat
  342. merlin = "4.17.1-501"
  343. merlin-lib >= "4.17.1-501"
  344. metrics
  345. mfat
  346. mfetch
  347. miaou-core
  348. middleware
  349. migra
  350. mimic
  351. minicaml = "0.3.1" | >= "0.4"
  352. mirage >= "4.0.0"
  353. mirage-block-partition
  354. mirage-block-ramdisk
  355. mirage-channel >= "4.0.1"
  356. mirage-crypto-ec
  357. mirage-flow-unix
  358. mirage-kv >= "2.0.0"
  359. mirage-kv-mem
  360. mirage-kv-unix >= "3.0.0"
  361. mirage-logs
  362. mirage-nat
  363. mirage-net-unix
  364. mirage-runtime < "4.7.0"
  365. mirage-tc
  366. mjson
  367. mldsa
  368. mlgpx
  369. mlkem
  370. mmdb < "0.3.0"
  371. mnd
  372. mqtt
  373. mrmime >= "0.2.0"
  374. msgpck >= "1.6"
  375. mssql
  376. multibase
  377. multicore-magic
  378. multihash
  379. multihash-digestif
  380. multipart-form-data
  381. multipart_form
  382. multipart_form-eio
  383. multipart_form-lwt
  384. multipart_form-miou
  385. named-pipe
  386. nanoid
  387. nbd >= "4.0.3"
  388. nbd-tool
  389. neo4j_bolt
  390. neodriver
  391. neodriver_core
  392. neodriver_eio
  393. neodriver_packstream
  394. nloge
  395. nocoiner
  396. noise
  397. non_empty_list
  398. nx < "1.0.0~alpha3"
  399. nx-datasets
  400. nx-text
  401. OCADml >= "0.6.0"
  402. obatcher
  403. object
  404. obs-eio
  405. obs-prometheus-eio
  406. ocaml-ai-sdk
  407. ocaml-index < "5.4.1-503"
  408. ocaml-r >= "0.4.0"
  409. ocaml-version >= "3.5.0"
  410. ocamlformat < "0.25.1"
  411. ocamlformat-lib
  412. ocamlformat-mlx-lib
  413. ocamlformat-rpc < "removed"
  414. ocamline
  415. ocgtk
  416. ochre
  417. ochre-cli
  418. ocluster
  419. ocue
  420. odoc < "2.1.1"
  421. oenv >= "0.1.0"
  422. ohex
  423. ohttp
  424. ohttp-cohttp
  425. ohttp-cohttp-eio
  426. ohttp-cohttp-lwt
  427. ohttp-piaf
  428. oidc
  429. oktree >= "0.2.4"
  430. opam-0install
  431. opam-0install-cudf >= "0.5.0"
  432. opam-compiler
  433. opam-file-format >= "2.1.1"
  434. opam-repomin
  435. opencage
  436. opentelemetry >= "0.6"
  437. opentelemetry-client
  438. opentelemetry-client-cohttp-eio
  439. opentelemetry-client-cohttp-lwt >= "0.6"
  440. opentelemetry-client-ocurl >= "0.6"
  441. opentelemetry-client-ocurl-lwt
  442. opentelemetry-cohttp-lwt >= "0.6"
  443. opentelemetry-logs
  444. opentelemetry-lwt >= "0.6"
  445. opium
  446. opium-graphql
  447. opium-testing
  448. opium_kernel
  449. orewa
  450. orgeat
  451. ortac-core
  452. ortac-wrapper
  453. osnap < "0.3.0"
  454. osx-acl
  455. osx-attr
  456. osx-cf
  457. osx-fsevents
  458. osx-keychain
  459. osx-membership
  460. osx-mount
  461. osx-xattr
  462. otoggl
  463. owl >= "0.7.0" & != "0.9.0" & != "1.0.0"
  464. owl-base < "0.5.0"
  465. owl-ode >= "0.1.0" & != "0.2.0"
  466. owl-symbolic
  467. ozstd
  468. par_incr
  469. parseff
  470. passe
  471. passmaker
  472. patch
  473. pbkdf
  474. pecu >= "0.2"
  475. pf-qubes
  476. pg_query >= "0.9.6"
  477. pgx
  478. pgx_unix
  479. pgx_value_core
  480. pgx_value_ptime
  481. phylogenetics
  482. piaf
  483. picos < "0.5.0"
  484. picos_meta
  485. piece_rope
  486. plebeia >= "2.0.0"
  487. polyglot
  488. polymarket
  489. polynomial
  490. ppx_bin_there
  491. ppx_blob >= "0.3.0"
  492. ppx_catch
  493. ppx_deriving_cmdliner
  494. ppx_deriving_ezjsonm
  495. ppx_deriving_qcheck
  496. ppx_deriving_rpc
  497. ppx_deriving_yaml
  498. ppx_deriving_yamlx
  499. ppx_ezlua
  500. ppx_hegel_generator
  501. ppx_hegel_test
  502. ppx_inline_alcotest
  503. ppx_map
  504. ppx_marshal
  505. ppx_mica
  506. ppx_parser
  507. ppx_protocol_conv
  508. ppx_protocol_conv_json
  509. ppx_protocol_conv_jsonm
  510. ppx_protocol_conv_msgpack
  511. ppx_protocol_conv_xml_light
  512. ppx_protocol_conv_xmlm
  513. ppx_protocol_conv_yaml
  514. ppx_repr
  515. ppx_subliner
  516. ppx_units
  517. ppx_yojson >= "1.1.0"
  518. pratter
  519. prbnmcn-ucb1 >= "0.0.2"
  520. prc
  521. preface
  522. pretty_expressive
  523. prettym
  524. proc-smaps
  525. producer
  526. progress
  527. prom
  528. prometheus < "1.2"
  529. prometheus-app
  530. prometheus-eio
  531. prometheus-lwt
  532. prometheus-reporter
  533. protocell
  534. protocol-9p < "0.11.0" | >= "0.11.2"
  535. protocol-9p-unix
  536. proton
  537. psq
  538. public-suffix
  539. pxshot
  540. pyast
  541. qcaml
  542. qcheck >= "0.25"
  543. qcheck-alcotest
  544. qcheck-core >= "0.25"
  545. qcow-stream >= "0.13.0"
  546. qcow-tool = "0.13.0"
  547. qcow-types = "0.13.0"
  548. qdrant
  549. query-json
  550. quickjs
  551. quill < "1.0.0~alpha3"
  552. randii
  553. reason-standard
  554. red-black-tree
  555. reparse >= "2.0.0" & < "3.0.0"
  556. reparse-unix < "2.1.0"
  557. resp
  558. resp-unix >= "0.10.0"
  559. resto >= "0.9"
  560. rfc1951 < "1.0.0"
  561. routes < "2.0.0"
  562. rpc
  563. rpclib
  564. rpclib-async
  565. rpclib-lwt
  566. rpmfile < "0.3.0"
  567. rpmfile-eio
  568. rpmfile-unix
  569. rune < "1.0.0~alpha3"
  570. SZXX >= "4.0.0"
  571. saga
  572. salsa20
  573. salsa20-core
  574. sanddb >= "0.2"
  575. saturn != "0.4.1"
  576. saturn_lockfree != "0.4.1"
  577. scrypt-kdf
  578. secp256k1 >= "0.4.1"
  579. secp256k1-internal
  580. secret
  581. semver >= "0.2.1"
  582. sendmail
  583. sendmail-lwt
  584. sendmail-miou-unix
  585. sendmail-mirage
  586. sendmsg
  587. seqes
  588. server-reason-react
  589. session-cookie
  590. session-cookie-async
  591. session-cookie-lwt
  592. sha256-cng
  593. shakuhachi
  594. sherlodoc
  595. sihl < "0.2.0"
  596. sihl-type
  597. slhdsa
  598. slug
  599. smaws-clients
  600. smaws-lib
  601. smol
  602. smol-helpers
  603. smtml >= "0.30.0"
  604. sodium-fmt
  605. solidity-alcotest
  606. sosie
  607. soteria
  608. sowilo < "1.0.0~alpha3"
  609. spdx_licenses
  610. spectrum >= "0.2.0"
  611. spectrum_capabilities
  612. spectrum_palette_ppx
  613. spectrum_palettes
  614. spectrum_tools
  615. spin >= "0.7.0"
  616. spurs < "0.1.1"
  617. squirrel
  618. ssh-agent
  619. ssl >= "0.6.0"
  620. starred_ml < "0.0.8"
  621. stem
  622. stramon-lib
  623. stringx
  624. styled-ppx
  625. swapfs
  626. symex >= "0.2"
  627. symphony-orchestrator-tui
  628. synchronizer >= "0.2"
  629. syslog-rfc5424 < "0.2"
  630. syto
  631. tabr
  632. talon < "1.0.0~alpha3"
  633. tar-eio >= "3.5.0"
  634. tar-mirage
  635. tbls
  636. tcpip
  637. tdigest < "2.1.0"
  638. term-indexing
  639. term-tools
  640. termaid
  641. terminal
  642. terminal_size >= "0.1.1"
  643. terminus
  644. terminus-cohttp
  645. terminus-hlc
  646. terml
  647. testo
  648. testo-lwt
  649. textmate-language >= "0.3.0"
  650. textrazor
  651. thread-table
  652. timedesc
  653. timere
  654. timmy
  655. timmy-jsoo
  656. timmy-lwt
  657. timmy-unix
  658. tiny_appkits
  659. tiny_languages
  660. tiny_libs
  661. tinybox
  662. tls >= "0.12.8"
  663. toc
  664. topojson
  665. topojsone
  666. trail
  667. traits
  668. transept
  669. tsort >= "2.2.0"
  670. tw
  671. twostep
  672. type_eq
  673. type_id
  674. typeid >= "1.0.1"
  675. tyre >= "0.4"
  676. tyxml >= "4.2.0"
  677. tyxml-jsx
  678. tyxml-ppx >= "4.3.0"
  679. tyxml-syntax
  680. ucharset
  681. uecc
  682. ulid
  683. universal-portal
  684. unix-dirent
  685. unix-errno
  686. unix-sys-resource
  687. unix-sys-stat
  688. unix-time
  689. unstrctrd
  690. uring < "0.4"
  691. user-agent-parser
  692. uspf
  693. uspf-lwt
  694. uspf-mirage
  695. uspf-unix
  696. utcp
  697. utop >= "2.13.0"
  698. validate
  699. validator
  700. valkey
  701. vercel
  702. verdict
  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"