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. awskit
  33. awskit-eio
  34. awskit-lwt
  35. awskit-lwt-unix < "0.2.0"
  36. awskit-s3
  37. awskit-s3-eio < "0.2.0"
  38. awskit-s3-lwt < "0.2.0"
  39. awskit-s3-lwt-unix < "0.2.0"
  40. awskit-s3-sim
  41. azure-cosmos-db-eio
  42. backoff
  43. base32
  44. base64 >= "2.1.2" & < "3.2.0" | >= "3.4.0"
  45. bastet
  46. bastet_lwt
  47. bech32
  48. bechamel >= "0.5.0"
  49. bigarray-overlap
  50. bigstringaf
  51. biotk >= "0.4"
  52. bitlib
  53. bizowie-api
  54. blake2
  55. bloomf
  56. bls12-381 < "0.4.1" | >= "3.0.0" & < "18.0"
  57. bls12-381-hash
  58. bls12-381-js >= "0.4.2"
  59. bls12-381-js-gen >= "0.4.2"
  60. bls12-381-legacy
  61. bls12-381-signature
  62. bls12-381-unix
  63. blurhash
  64. bm25
  65. brisk-reconciler
  66. builder-web
  67. bytebuffer
  68. bytream >= "0.2"
  69. ca-certs
  70. ca-certs-nss
  71. cabal
  72. cachet
  73. cachet-lwt
  74. cachet-solo5
  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. contract
  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. 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
  171. docfd >= "13.0.0"
  172. dockerfile >= "8.2.7"
  173. dockerfile-opam >= "8.3.4"
  174. domain-local-await >= "0.2.1"
  175. domain-local-timeout
  176. domain-name
  177. dream
  178. dream-htmx
  179. dream-pure
  180. dscheck >= "0.1.1"
  181. duff
  182. dune-deps >= "1.4.0"
  183. dune-release >= "1.0.0"
  184. duration
  185. echo
  186. ecma-regex
  187. eio < "0.12"
  188. eio_linux
  189. eio_windows
  190. emile
  191. encore
  192. eqaf >= "0.5"
  193. equinoxe
  194. equinoxe-cohttp
  195. equinoxe-hlc
  196. ezgzip
  197. ezjsonm
  198. ezjsonm-lwt
  199. ezlua
  200. FPauth
  201. FPauth-core
  202. FPauth-responses
  203. FPauth-strategies
  204. faraday != "0.2.0"
  205. farfadet
  206. fat-filesystem
  207. fehu < "1.0.0~alpha3"
  208. ff
  209. ff-pbt
  210. flex-array
  211. flux
  212. fluxt
  213. forcamla
  214. forester >= "5.0"
  215. fsevents-lwt
  216. functoria
  217. fungi
  218. geojson
  219. geoml >= "0.1.1"
  220. git
  221. git-cohttp
  222. git-cohttp-unix
  223. git-kv != "0.1.3"
  224. git-mirage
  225. git-net
  226. git-split
  227. git-unix
  228. gitlab-unix
  229. glicko2
  230. gmap
  231. gmocoin
  232. gobba
  233. gpt
  234. graphql
  235. graphql-async
  236. graphql-cohttp >= "0.13.0"
  237. graphql-lwt
  238. graphql_parser != "0.11.0"
  239. graphql_ppx
  240. guardian >= "0.4.0"
  241. h1
  242. h1_parser
  243. h2
  244. hacl
  245. hacl-star >= "0.6.0"
  246. hacl_func
  247. hacl_x25519
  248. handlebars-ml >= "0.2.1"
  249. hedgehog-alcotest
  250. hegel
  251. highlexer
  252. highway
  253. highway-dream
  254. hkdf
  255. hockmd
  256. html_of_jsx
  257. http
  258. http-multipart-formdata < "2.0.0"
  259. httpaf >= "0.2.0"
  260. httpcats
  261. httpun
  262. httpun-ws
  263. hugin < "1.0.0~alpha3"
  264. huml
  265. hvsock
  266. icalendar
  267. idna
  268. imagelib
  269. index
  270. inferno >= "20220603"
  271. influxdb-async
  272. influxdb-lwt
  273. inquire < "0.2.0"
  274. intel_hex >= "0.3"
  275. interval-map
  276. iomux
  277. irmin
  278. irmin-bench
  279. irmin-chunk
  280. irmin-cli
  281. irmin-containers
  282. irmin-fs
  283. irmin-git
  284. irmin-graphql
  285. irmin-pack
  286. irmin-pack-tools
  287. irmin-test != "3.6.1"
  288. irmin-tezos
  289. irmin-unix
  290. irmin-watcher
  291. jekyll-format
  292. jose
  293. json-data-encoding >= "0.9"
  294. json-data-encoding-bson >= "1.1.1"
  295. json_decoder
  296. jsonfeed
  297. jsonschema-core
  298. jsonschema-validation
  299. jsonxt
  300. junit_alcotest >= "2.2.0"
  301. jwto
  302. kaun < "1.0.0~alpha3"
  303. kcas >= "0.6.0"
  304. kcas_data >= "0.6.0"
  305. kdf
  306. ke >= "0.2"
  307. kkmarkdown
  308. kmt
  309. lambda-runtime
  310. lambda_streams
  311. lambda_streams_async
  312. lambdapi
  313. layoutz
  314. letters
  315. liquid_ml >= "0.1.3"
  316. lmdb >= "1.0"
  317. lockfree >= "0.3.1"
  318. logical
  319. logtk
  320. lp
  321. lp-glpk
  322. lp-glpk-js < "0.5.0"
  323. lp-gurobi < "0.5.0"
  324. lru
  325. lt-code
  326. luv
  327. mazeppa
  328. mbr-format
  329. mdx
  330. mec
  331. mechaml >= "1.2.1"
  332. mel-bastet
  333. melange >= "7.0.0-51"
  334. melange-edn >= "0.5.0"
  335. menhir-lsp >= "0.3.3"
  336. menhirformat
  337. merlin = "4.17.1-501"
  338. merlin-lib >= "4.17.1-501"
  339. metrics
  340. mfat
  341. miaou-core
  342. middleware
  343. migra
  344. mimic
  345. minicaml = "0.3.1" | >= "0.4"
  346. mirage >= "4.0.0"
  347. mirage-block-partition
  348. mirage-block-ramdisk
  349. mirage-channel >= "4.0.1"
  350. mirage-crypto-ec
  351. mirage-flow-unix
  352. mirage-kv >= "2.0.0"
  353. mirage-kv-mem >= "4.0.1"
  354. mirage-kv-unix >= "3.0.0"
  355. mirage-logs
  356. mirage-nat
  357. mirage-net-unix
  358. mirage-runtime < "4.7.0"
  359. mirage-tc
  360. mjson
  361. mlgpx
  362. mmdb < "0.3.0"
  363. mnd
  364. modelkit
  365. modelkit-parallel
  366. mqtt
  367. mrmime >= "0.2.0"
  368. msgpck >= "1.6"
  369. mssql
  370. multibase
  371. multicore-magic
  372. multihash
  373. multihash-digestif
  374. multipart-form-data
  375. multipart_form
  376. multipart_form-eio
  377. multipart_form-lwt
  378. multipart_form-miou
  379. named-pipe
  380. nanoid
  381. nbd >= "4.0.3"
  382. nbd-tool
  383. nel
  384. neo4j_bolt
  385. neodriver
  386. neodriver_core
  387. neodriver_eio
  388. neodriver_packstream
  389. nloge
  390. nocoiner
  391. noise
  392. non_empty_list
  393. nx < "1.0.0~alpha3"
  394. nx-datasets
  395. nx-text
  396. OCADml >= "0.6.0"
  397. obatcher
  398. object
  399. ocaml-ai-sdk
  400. ocaml-index < "5.4.1-503"
  401. ocaml-r >= "0.4.0"
  402. ocaml-version >= "3.5.0"
  403. ocamlformat < "0.25.1"
  404. ocamlformat-lib
  405. ocamlformat-mlx-lib
  406. ocamlformat-rpc < "removed"
  407. ocamline
  408. ocgtk
  409. ochre
  410. ochre-cli
  411. ocluster
  412. ocue
  413. odoc < "2.1.1"
  414. oenv >= "0.1.0"
  415. ohex
  416. oidc
  417. oktree >= "0.2.4"
  418. opam-0install
  419. opam-0install-cudf >= "0.5.0"
  420. opam-compiler
  421. opam-file-format >= "2.1.1"
  422. opam-repomin
  423. opencage
  424. opentelemetry >= "0.6"
  425. opentelemetry-client
  426. opentelemetry-client-cohttp-eio
  427. opentelemetry-client-cohttp-lwt >= "0.6"
  428. opentelemetry-client-ocurl >= "0.6"
  429. opentelemetry-client-ocurl-lwt
  430. opentelemetry-cohttp-lwt >= "0.6"
  431. opentelemetry-logs
  432. opentelemetry-lwt >= "0.6"
  433. opium
  434. opium-graphql
  435. opium-testing
  436. opium_kernel
  437. orewa
  438. orgeat
  439. ortac-core
  440. ortac-wrapper
  441. osnap < "0.3.0"
  442. osx-acl
  443. osx-attr
  444. osx-cf
  445. osx-fsevents
  446. osx-keychain
  447. osx-membership
  448. osx-mount
  449. osx-xattr
  450. otoggl
  451. owl >= "0.7.0" & != "0.9.0" & != "1.0.0"
  452. owl-base < "0.5.0"
  453. owl-ode >= "0.1.0" & != "0.2.0"
  454. owl-symbolic
  455. par_incr
  456. parseff
  457. passe
  458. passmaker
  459. patch
  460. pbkdf
  461. pecu >= "0.2"
  462. pf-qubes
  463. pg_query >= "0.9.6"
  464. pgx
  465. pgx_unix
  466. pgx_value_core
  467. pgx_value_ptime
  468. phylogenetics
  469. piaf
  470. picos < "0.5.0"
  471. picos_meta
  472. pidgin
  473. piece_rope
  474. plebeia >= "2.0.0"
  475. polyglot
  476. polymarket
  477. polynomial
  478. ppx_blob >= "0.3.0"
  479. ppx_catch
  480. ppx_deriving_cmdliner
  481. ppx_deriving_ezjsonm
  482. ppx_deriving_qcheck
  483. ppx_deriving_rpc
  484. ppx_deriving_yaml
  485. ppx_ezlua
  486. ppx_hegel_generator
  487. ppx_hegel_test
  488. ppx_inline_alcotest
  489. ppx_map
  490. ppx_marshal
  491. ppx_mica
  492. ppx_parser
  493. ppx_protocol_conv
  494. ppx_protocol_conv_json
  495. ppx_protocol_conv_jsonm
  496. ppx_protocol_conv_msgpack
  497. ppx_protocol_conv_xml_light
  498. ppx_protocol_conv_xmlm
  499. ppx_protocol_conv_yaml
  500. ppx_repr
  501. ppx_subliner
  502. ppx_units
  503. ppx_yojson >= "1.1.0"
  504. pratter
  505. prbnmcn-ucb1 >= "0.0.2"
  506. prc
  507. preface
  508. pretty_expressive
  509. prettym
  510. proc-smaps
  511. producer
  512. progress
  513. prom
  514. prometheus < "1.2"
  515. prometheus-app
  516. prometheus-eio
  517. prometheus-lwt
  518. prometheus-reporter
  519. protocell
  520. protocol-9p < "0.11.0" | >= "0.11.2"
  521. protocol-9p-unix
  522. proton
  523. psq
  524. public-suffix
  525. purl
  526. pxshot
  527. pyast
  528. qcaml
  529. qcheck >= "0.25"
  530. qcheck-alcotest
  531. qcheck-core >= "0.25"
  532. qcow-stream >= "0.13.0"
  533. qcow-tool = "0.13.0"
  534. qcow-types = "0.13.0"
  535. qdrant
  536. query-json
  537. quickjs
  538. quill < "1.0.0~alpha3"
  539. randii
  540. reason-standard
  541. red-black-tree
  542. reparse >= "2.0.0" & < "3.0.0"
  543. reparse-unix < "2.1.0"
  544. resp
  545. resp-unix >= "0.10.0"
  546. resto >= "0.9"
  547. rfc1951 < "1.0.0"
  548. routes < "2.0.0"
  549. rpc
  550. rpclib
  551. rpclib-async
  552. rpclib-lwt
  553. rpmfile < "0.3.0"
  554. rpmfile-eio
  555. rpmfile-unix
  556. rune < "1.0.0~alpha3"
  557. runtime_events_tools >= "0.5.2"
  558. SZXX >= "4.0.0"
  559. saga
  560. salsa20
  561. salsa20-core
  562. sanddb >= "0.2"
  563. saturn != "0.4.1"
  564. saturn_lockfree != "0.4.1"
  565. scrypt-kdf
  566. secp256k1 >= "0.4.1"
  567. secp256k1-internal
  568. semver >= "0.2.1"
  569. sendmail
  570. sendmail-lwt
  571. sendmail-miou-unix
  572. sendmail-mirage
  573. sendmsg
  574. seqes
  575. server-reason-react
  576. session-cookie
  577. session-cookie-async
  578. session-cookie-lwt
  579. sha256-cng
  580. shakuhachi
  581. sherlodoc
  582. sihl < "0.2.0"
  583. sihl-type
  584. slug
  585. smaws-clients
  586. smaws-lib
  587. smol
  588. smol-helpers
  589. smtml >= "0.30.0"
  590. sodium-fmt
  591. solidity-alcotest
  592. sosie
  593. soteria
  594. sowilo < "1.0.0~alpha3"
  595. spdx_licenses
  596. spectrum >= "0.2.0"
  597. spectrum_capabilities
  598. spectrum_palette_ppx
  599. spectrum_palettes
  600. spectrum_tools
  601. spin >= "0.7.0"
  602. spurs < "0.1.1"
  603. squirrel
  604. ssh-agent
  605. ssl >= "0.6.0"
  606. starred_ml
  607. stem
  608. stramon-lib
  609. stringx
  610. styled-ppx
  611. swapfs
  612. symex >= "0.2"
  613. symphony-orchestrator-tui
  614. synchronizer >= "0.2"
  615. syslog-rfc5424
  616. syto
  617. tabr
  618. talon < "1.0.0~alpha3"
  619. tar-eio >= "3.5.0"
  620. tar-mirage
  621. tbls
  622. tcpip
  623. tdigest < "2.1.0"
  624. term-indexing
  625. term-tools
  626. termaid
  627. terminal
  628. terminal_size >= "0.1.1"
  629. terminus
  630. terminus-cohttp
  631. terminus-hlc
  632. terml
  633. testo
  634. testo-lwt
  635. textmate-language >= "0.3.0"
  636. textrazor
  637. thread-table
  638. timedesc
  639. timere
  640. timmy
  641. timmy-jsoo
  642. timmy-lwt
  643. timmy-unix
  644. tls >= "0.12.8"
  645. toc
  646. topojson
  647. topojsone
  648. trail
  649. traits
  650. transept
  651. tsort >= "2.2.0"
  652. tw
  653. twostep
  654. type_eq
  655. type_id
  656. typeid >= "1.0.1"
  657. tyre >= "0.4"
  658. tyxml >= "4.2.0"
  659. tyxml-jsx
  660. tyxml-ppx >= "4.3.0"
  661. tyxml-syntax
  662. uecc
  663. ulid
  664. universal-portal
  665. unix-dirent
  666. unix-errno
  667. unix-sys-resource
  668. unix-sys-stat
  669. unix-time
  670. unstrctrd
  671. uring < "0.4"
  672. user-agent-parser
  673. uspf
  674. uspf-lwt
  675. uspf-mirage
  676. uspf-unix
  677. utcp
  678. utop >= "2.13.0"
  679. validate
  680. validator
  681. valkey
  682. vercel
  683. vhd-format-lwt >= "0.13.0"
  684. wayland >= "2.0"
  685. wcwidth
  686. websocketaf
  687. wire
  688. x509 >= "0.7.0"
  689. xapi-rrd
  690. xapi-stdext-date
  691. xapi-stdext-encodings
  692. xapi-stdext-std >= "4.16.0"
  693. xdge
  694. xgboost
  695. xkbcommon
  696. yaml
  697. yaml-sexp
  698. yocaml
  699. yocaml_syndication >= "2.0.0"
  700. yocaml_yaml < "2.0.0"
  701. yojson >= "1.6.0"
  702. yojson-five
  703. yuscii >= "0.3.0"
  704. yuujinchou >= "1.0.0"
  705. zar
  706. zed >= "3.2.2"
  707. zlist < "0.4.0"

Conflicts (2)

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