package alcotest

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

Install

dune-project
 Dependency

Authors

Maintainers

Sources

alcotest-1.7.0.tbz
sha256=812bacdb34b45e88995e07d7306bdab2f72479ef1996637f1d5d1f41667902df
sha512=4ae1ba318949ec9db8b87bc8072632a02f0e4003a95ab21e474f5c34c3b5bde867b0194a2d0ea7d9fc4580c70a30ca39287d33a8c134acc7611902f79c7b7ce8

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

  1. result < "1.5"