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. ahrocksdb
  2. albatross >= "1.5.4"
  3. alcobar
  4. alcotest-async >= "1.9.1"
  5. alcotest-js >= "1.9.1"
  6. alcotest-lwt >= "1.9.1"
  7. alcotest-mirage >= "1.9.1"
  8. alg_structs_qcheck
  9. algaeff
  10. ambient-context
  11. ambient-context-eio
  12. ambient-context-lwt
  13. angstrom >= "0.7.0"
  14. ansi >= "0.6.0"
  15. anycache >= "0.7.4"
  16. anycache-lwt
  17. arc
  18. archetype >= "1.4.2"
  19. archi
  20. arp
  21. arrakis < "1.1.0"
  22. art
  23. asai
  24. asak
  25. asli >= "0.2.0"
  26. asn1-combinators >= "0.2.5"
  27. atd >= "2.3.3"
  28. atdgen >= "2.10.0"
  29. atdpy
  30. atdts
  31. avro-simple
  32. aws-eio
  33. awskit
  34. awskit-eio
  35. awskit-lwt
  36. awskit-lwt-unix < "0.2.0"
  37. awskit-s3
  38. awskit-s3-eio < "0.2.0"
  39. awskit-s3-lwt < "0.2.0"
  40. awskit-s3-lwt-unix < "0.2.0"
  41. awskit-s3-sim
  42. azure-cosmos-db-eio
  43. backoff
  44. base32
  45. base64 >= "2.1.2" & < "3.2.0" | >= "3.4.0"
  46. bastet
  47. bastet_lwt
  48. bech32
  49. bechamel >= "0.5.0"
  50. bigarray-overlap
  51. bigstringaf
  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. contract
  130. cookie
  131. corosync
  132. cow >= "2.2.0"
  133. crockford
  134. css
  135. css-parser
  136. cstruct
  137. cstruct-sexp
  138. ctypes-zarith
  139. cuid
  140. cure2
  141. curly
  142. current
  143. current-albatross-deployer
  144. current_git >= "0.7.1"
  145. current_incr
  146. current_rpc >= "0.7.4"
  147. data-encoding
  148. dates_calc
  149. dbase4
  150. decimal >= "0.3.0"
  151. decompress
  152. depyt
  153. digestif >= "0.9.0"
  154. dispatch >= "0.4.1"
  155. dkim
  156. dkim-bin
  157. dkim-mirage
  158. dkml-dune-dsl-show
  159. dkml-install
  160. dkml-install-installer
  161. dkml-install-runner
  162. dmarc
  163. dns >= "4.4.1"
  164. dns-cli
  165. dns-client >= "4.6.3"
  166. dns-forward-lwt-unix
  167. dns-resolver
  168. dns-server
  169. dns-tsig
  170. dnssd
  171. dnssec
  172. docfd >= "13.0.0"
  173. dockerfile >= "8.2.7"
  174. dockerfile-opam >= "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. ease-caml >= "0.1.7"
  187. echo
  188. ecma-regex
  189. eio < "0.12"
  190. eio_linux
  191. eio_windows
  192. emile
  193. encore
  194. eqaf >= "0.5"
  195. equinoxe
  196. equinoxe-cohttp
  197. equinoxe-hlc
  198. ezgzip
  199. ezjsonm
  200. ezjsonm-lwt
  201. ezlua
  202. FPauth
  203. FPauth-core
  204. FPauth-responses
  205. FPauth-strategies
  206. faraday != "0.2.0"
  207. farfadet
  208. fat-filesystem
  209. fehu < "1.0.0~alpha3"
  210. ff
  211. ff-pbt
  212. flex-array
  213. flux
  214. fluxt
  215. forcamla
  216. forester >= "5.0"
  217. fsevents-lwt
  218. functoria
  219. fungi
  220. fxmacrodata
  221. geojson
  222. geoml >= "0.1.1"
  223. git
  224. git-cohttp
  225. git-cohttp-unix
  226. git-kv != "0.1.3"
  227. git-mirage
  228. git-net
  229. git-split
  230. git-unix
  231. gitlab-unix
  232. glicko2
  233. gmap
  234. gmocoin
  235. gobba
  236. gpt
  237. graphql
  238. graphql-async
  239. graphql-cohttp >= "0.13.0"
  240. graphql-lwt
  241. graphql_parser != "0.11.0"
  242. graphql_ppx
  243. guardian >= "0.4.0"
  244. h1
  245. h1_parser
  246. h2
  247. hacl
  248. hacl-star >= "0.6.0"
  249. hacl_func
  250. hacl_x25519
  251. handlebars-ml >= "0.2.1"
  252. hedgehog-alcotest
  253. hegel
  254. highlexer
  255. highway
  256. highway-dream
  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"
  299. json-data-encoding-bson >= "1.1.1"
  300. json_decoder
  301. jsonfeed
  302. jsonschema-core
  303. jsonschema-validation
  304. jsonxt
  305. junit_alcotest >= "2.2.0"
  306. jwto
  307. kafka-eio
  308. kaun < "1.0.0~alpha3"
  309. kcas >= "0.6.0"
  310. kcas_data >= "0.6.0"
  311. kdf
  312. ke >= "0.2"
  313. kkmarkdown
  314. kmt
  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. mel-bastet
  339. melange >= "7.0.0-51"
  340. melange-edn >= "0.5.0"
  341. menhir-lsp >= "0.3.3"
  342. menhirformat
  343. merlin = "4.17.1-501"
  344. merlin-lib >= "4.17.1-501"
  345. metrics
  346. mfat
  347. mfetch
  348. miaou-core
  349. middleware
  350. migra
  351. mimic
  352. minicaml = "0.3.1" | >= "0.4"
  353. mirage >= "4.0.0"
  354. mirage-block-partition
  355. mirage-block-ramdisk
  356. mirage-channel >= "4.0.1"
  357. mirage-crypto-ec
  358. mirage-flow-unix
  359. mirage-kv >= "2.0.0"
  360. mirage-kv-mem >= "4.0.1"
  361. mirage-kv-unix >= "3.0.0"
  362. mirage-logs
  363. mirage-nat
  364. mirage-net-unix
  365. mirage-runtime < "4.7.0"
  366. mirage-tc
  367. mjson
  368. mlgpx
  369. mmdb < "0.3.0"
  370. mnd
  371. modelkit
  372. modelkit-nx
  373. modelkit-parallel
  374. modelkit-talon
  375. mqtt
  376. mrmime >= "0.2.0"
  377. msgpck >= "1.6"
  378. mssql
  379. multibase
  380. multicore-magic
  381. multihash
  382. multihash-digestif
  383. multipart-form-data
  384. multipart_form
  385. multipart_form-eio
  386. multipart_form-lwt
  387. multipart_form-miou
  388. named-pipe
  389. nanoid
  390. nbd >= "4.0.3"
  391. nbd-tool
  392. nel
  393. neo4j_bolt
  394. neodriver
  395. neodriver_core
  396. neodriver_eio
  397. neodriver_packstream
  398. nloge
  399. nocoiner
  400. noise
  401. non_empty_list
  402. nx < "1.0.0~alpha3"
  403. nx-datasets
  404. nx-text
  405. OCADml >= "0.6.0"
  406. obatcher
  407. object
  408. obs-eio
  409. obs-prometheus-eio
  410. ocaml-ai-sdk
  411. ocaml-index < "5.4.1-503"
  412. ocaml-r >= "0.4.0"
  413. ocaml-version >= "3.5.0"
  414. ocamlformat < "0.25.1"
  415. ocamlformat-lib
  416. ocamlformat-mlx-lib
  417. ocamlformat-rpc < "removed"
  418. ocamline
  419. ocgtk
  420. ochre
  421. ochre-cli
  422. ocluster
  423. ocue
  424. odoc < "2.1.1"
  425. oenv >= "0.1.0"
  426. ohex
  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. par_incr
  467. parseff
  468. passe
  469. passmaker
  470. patch
  471. pbkdf
  472. pecu >= "0.2"
  473. pf-qubes
  474. pg_query >= "0.9.6"
  475. pgx
  476. pgx_unix
  477. pgx_value_core
  478. pgx_value_ptime
  479. phylogenetics
  480. piaf
  481. picos < "0.5.0"
  482. picos_meta
  483. pidgin
  484. pidgio
  485. piece_rope
  486. plebeia >= "2.0.0"
  487. polyglot
  488. polymarket
  489. polynomial
  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_ezlua
  498. ppx_hegel_generator
  499. ppx_hegel_test
  500. ppx_inline_alcotest
  501. ppx_map
  502. ppx_marshal
  503. ppx_mica
  504. ppx_parser
  505. ppx_protocol_conv
  506. ppx_protocol_conv_json
  507. ppx_protocol_conv_jsonm
  508. ppx_protocol_conv_msgpack
  509. ppx_protocol_conv_xml_light
  510. ppx_protocol_conv_xmlm
  511. ppx_protocol_conv_yaml
  512. ppx_repr
  513. ppx_subliner
  514. ppx_units
  515. ppx_yojson >= "1.1.0"
  516. pratter
  517. prbnmcn-ucb1 >= "0.0.2"
  518. prc
  519. preface
  520. pretty_expressive
  521. prettym
  522. primavera >= "1.1.0"
  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. purl
  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. runtime_events_tools >= "0.5.2"
  571. SZXX >= "4.0.0"
  572. saga
  573. salsa20
  574. salsa20-core
  575. sanddb >= "0.2"
  576. saturn != "0.4.1"
  577. saturn_lockfree != "0.4.1"
  578. scrypt-kdf
  579. secp256k1 >= "0.4.1"
  580. secp256k1-internal
  581. secret
  582. semver >= "0.2.1"
  583. sendmail
  584. sendmail-lwt
  585. sendmail-miou-unix
  586. sendmail-mirage
  587. sendmsg
  588. seqes
  589. server-reason-react
  590. session-cookie
  591. session-cookie-async
  592. session-cookie-lwt
  593. sha256-cng
  594. shakuhachi
  595. sherlodoc
  596. sihl < "0.2.0"
  597. sihl-type
  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
  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
  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. tdmrep
  639. term-indexing
  640. term-tools
  641. termaid
  642. terminal
  643. terminal_size >= "0.1.1"
  644. terminus
  645. terminus-cohttp
  646. terminus-hlc
  647. terml
  648. testo
  649. testo-lwt
  650. textmate-language >= "0.3.0"
  651. textrazor
  652. thread-table
  653. timedesc
  654. timere
  655. timmy
  656. timmy-jsoo
  657. timmy-lwt
  658. timmy-unix
  659. tls >= "0.12.8"
  660. toc
  661. topojson
  662. topojsone
  663. trail
  664. traits
  665. transept
  666. tsort >= "2.2.0"
  667. tw
  668. twostep
  669. type_eq
  670. type_id
  671. typeid >= "1.0.1"
  672. tyre >= "0.4"
  673. tyxml >= "4.2.0"
  674. tyxml-jsx
  675. tyxml-ppx >= "4.3.0"
  676. tyxml-syntax
  677. ucharset
  678. uecc
  679. ulid
  680. universal-portal
  681. unix-dirent
  682. unix-errno
  683. unix-sys-resource
  684. unix-sys-stat
  685. unix-time
  686. unstrctrd
  687. uring < "0.4"
  688. user-agent-parser
  689. uspf
  690. uspf-lwt
  691. uspf-mirage
  692. uspf-unix
  693. utcp
  694. utop >= "2.13.0"
  695. validate
  696. validator
  697. valkey
  698. vercel
  699. vhd-format-lwt >= "0.13.0"
  700. wayland >= "2.0"
  701. wcwidth
  702. websocketaf
  703. wire
  704. x509 >= "0.7.0"
  705. xapi-rrd
  706. xapi-stdext-date
  707. xapi-stdext-encodings
  708. xapi-stdext-std >= "4.16.0"
  709. xdge
  710. xgboost
  711. xkbcommon
  712. yaml
  713. yaml-sexp
  714. yocaml
  715. yocaml_syndication >= "2.0.0"
  716. yocaml_yaml < "2.0.0"
  717. yojson >= "1.6.0"
  718. yojson-five
  719. yuscii >= "0.3.0"
  720. yuujinchou >= "1.0.0"
  721. zar
  722. zed >= "3.2.2"
  723. zlist < "0.4.0"

Conflicts (2)

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