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.

Published: 27 Feb 2023

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. ahrocksdb
  2. albatross >= "1.5.4"
  3. alcotest-async = "1.7.0"
  4. alg_structs_qcheck
  5. algaeff
  6. ambient-context
  7. ambient-context-eio
  8. ambient-context-lwt
  9. angstrom >= "0.7.0"
  10. ansi >= "0.6.0"
  11. anycache >= "0.7.4"
  12. anycache-async
  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 >= "0.2"
  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. backoff
  30. base32
  31. base64 >= "2.1.2" & < "3.2.0" | >= "3.4.0"
  32. bastet
  33. bastet_lwt
  34. bech32
  35. bechamel >= "0.5.0"
  36. bigarray-overlap
  37. bigstringaf
  38. bitlib
  39. blake2
  40. bloomf
  41. bls12-381 < "0.4.1" | >= "3.0.0" & < "18.0"
  42. bls12-381-hash
  43. bls12-381-js >= "0.4.2"
  44. bls12-381-js-gen >= "0.4.2"
  45. bls12-381-legacy
  46. bls12-381-signature
  47. bls12-381-unix
  48. blurhash
  49. brisk-reconciler
  50. builder-web
  51. bytebuffer
  52. ca-certs
  53. ca-certs-nss
  54. cachet
  55. cactus
  56. caldav
  57. calendar >= "3.0.0"
  58. calendars >= "2.0.0"
  59. callipyge
  60. camlix
  61. camlkit
  62. camlkit-base
  63. capnp-rpc
  64. capnp-rpc-unix
  65. caqti >= "1.7.0"
  66. caqti-async >= "1.7.0"
  67. caqti-driver-mariadb >= "1.7.0"
  68. caqti-driver-postgresql >= "1.7.0"
  69. caqti-driver-sqlite3 >= "1.7.0"
  70. caqti-dynload >= "2.0.1"
  71. caqti-eio
  72. caqti-lwt >= "1.7.0"
  73. caqti-miou
  74. carray
  75. carton < "1.0.0"
  76. carton-git
  77. carton-lwt >= "0.4.3" & < "1.0.0"
  78. catala >= "0.6.0"
  79. cborl
  80. cf-lwt
  81. chacha
  82. chamelon
  83. chamelon-unix
  84. charrua-client
  85. charrua-server
  86. checked_oint
  87. checkseum >= "0.0.3"
  88. cid
  89. clarity-lang
  90. class_group_vdf
  91. cohttp
  92. cohttp-curl-async
  93. cohttp-curl-lwt
  94. cohttp-eio >= "6.0.0~beta2"
  95. colombe >= "0.2.0"
  96. color
  97. commons
  98. conan
  99. conan-cli
  100. conan-database
  101. conan-lwt
  102. conan-unix
  103. conex < "0.10.0"
  104. conex-mirage-crypto
  105. conformist
  106. cookie
  107. corosync
  108. cow >= "2.2.0"
  109. crockford
  110. css
  111. css-parser
  112. cstruct
  113. cstruct-sexp
  114. ctypes-zarith
  115. cuid
  116. curly
  117. current
  118. current-albatross-deployer
  119. current_git >= "0.7.1"
  120. current_incr
  121. data-encoding
  122. dates_calc
  123. dbase4
  124. decimal >= "0.3.0"
  125. decompress
  126. depyt
  127. digestif >= "0.9.0"
  128. dispatch >= "0.4.1"
  129. dkim
  130. dkim-bin
  131. dkim-mirage
  132. dkml-dune-dsl-show
  133. dkml-install
  134. dkml-install-installer
  135. dkml-install-runner
  136. dmarc
  137. dns >= "4.4.1"
  138. dns-cli
  139. dns-client >= "4.6.3"
  140. dns-forward-lwt-unix
  141. dns-resolver
  142. dns-server
  143. dns-tsig
  144. dnssd
  145. dnssec
  146. docfd >= "2.2.0"
  147. dockerfile >= "8.2.7" & < "8.3.4"
  148. domain-local-await >= "0.2.1"
  149. domain-local-timeout
  150. domain-name
  151. dream
  152. dream-htmx
  153. dream-pure
  154. dscheck >= "0.1.1"
  155. duff
  156. dune-deps >= "1.4.0"
  157. dune-release >= "1.0.0"
  158. duration
  159. echo
  160. eio < "0.12"
  161. eio_linux
  162. eio_windows
  163. emile
  164. encore
  165. eqaf >= "0.5"
  166. equinoxe
  167. equinoxe-cohttp
  168. equinoxe-hlc
  169. ezgzip
  170. ezjsonm
  171. ezjsonm-lwt
  172. FPauth
  173. FPauth-core
  174. FPauth-responses
  175. FPauth-strategies
  176. faraday != "0.2.0"
  177. farfadet
  178. fat-filesystem
  179. fehu
  180. ff
  181. ff-pbt
  182. flex-array
  183. flux
  184. fluxt
  185. forester >= "5.0"
  186. fsevents-lwt
  187. functoria
  188. fungi
  189. geojson
  190. geoml >= "0.1.1"
  191. git
  192. git-cohttp
  193. git-cohttp-unix
  194. git-kv >= "0.2.0"
  195. git-mirage
  196. git-net
  197. git-split
  198. git-unix
  199. gitlab-unix
  200. glicko2
  201. gmap
  202. gobba
  203. gpt
  204. graphql
  205. graphql-async
  206. graphql-cohttp >= "0.13.0"
  207. graphql-lwt
  208. graphql_parser != "0.11.0"
  209. graphql_ppx
  210. h1
  211. h1_parser
  212. h2
  213. hacl
  214. hacl-star >= "0.6.0" & < "0.7.2"
  215. hacl_func
  216. hacl_x25519
  217. handlebars-ml >= "0.2.1"
  218. highlexer
  219. hkdf
  220. hockmd
  221. html_of_jsx
  222. http
  223. http-multipart-formdata < "2.0.0"
  224. httpaf >= "0.2.0"
  225. httpun
  226. httpun-ws
  227. hugin
  228. huml
  229. hvsock
  230. icalendar
  231. imagelib
  232. index
  233. inferno >= "20220603"
  234. influxdb-async
  235. influxdb-lwt
  236. inquire < "0.2.0"
  237. intel_hex >= "0.3"
  238. interval-map
  239. iomux
  240. irmin
  241. irmin-bench
  242. irmin-chunk
  243. irmin-cli
  244. irmin-containers
  245. irmin-fs
  246. irmin-git
  247. irmin-graphql
  248. irmin-pack
  249. irmin-pack-tools
  250. irmin-test != "3.6.1"
  251. irmin-tezos
  252. irmin-unix
  253. irmin-watcher
  254. jekyll-format
  255. jose
  256. json-data-encoding >= "0.9" & < "1.1.1"
  257. json_decoder
  258. jsonfeed
  259. jsonxt
  260. junit_alcotest < "2.2.0"
  261. jwto
  262. kaun
  263. kcas >= "0.6.0"
  264. kcas_data >= "0.6.0"
  265. kdf
  266. ke >= "0.2"
  267. kkmarkdown
  268. kmt
  269. lambda-runtime
  270. lambda_streams
  271. lambda_streams_async
  272. lambdapi
  273. layoutz
  274. letters
  275. liquid_ml >= "0.1.3"
  276. lmdb >= "1.0"
  277. lockfree >= "0.3.1"
  278. logical
  279. logtk >= "1.6"
  280. lp
  281. lp-glpk
  282. lp-glpk-js < "0.5.0"
  283. lp-gurobi < "0.5.0"
  284. lru
  285. lt-code
  286. luv
  287. mazeppa
  288. mbr-format
  289. mdx >= "1.6.0"
  290. mec
  291. mechaml >= "1.2.1"
  292. merlin = "4.17.1-501"
  293. merlin-lib >= "4.17.1-501"
  294. metrics
  295. middleware
  296. mimic
  297. minicaml = "0.3.1" | >= "0.4"
  298. mirage >= "4.0.0"
  299. mirage-block-partition
  300. mirage-block-ramdisk
  301. mirage-channel >= "4.0.1"
  302. mirage-crypto-ec
  303. mirage-flow-unix
  304. mirage-kv >= "2.0.0"
  305. mirage-kv-mem
  306. mirage-kv-unix >= "3.0.0"
  307. mirage-logs
  308. mirage-nat
  309. mirage-net-unix
  310. mirage-runtime < "4.7.0"
  311. mirage-tc
  312. mjson
  313. mlgpx
  314. mmdb < "0.3.0"
  315. mnd
  316. mqtt
  317. mrmime >= "0.2.0"
  318. msgpck >= "1.6"
  319. mssql >= "2.0.3"
  320. multibase
  321. multicore-magic
  322. multihash
  323. multihash-digestif
  324. multipart-form-data
  325. multipart_form
  326. multipart_form-eio
  327. multipart_form-lwt
  328. multipart_form-miou
  329. named-pipe
  330. nanoid
  331. nbd >= "4.0.3"
  332. nbd-tool
  333. neo4j_bolt
  334. nloge
  335. nocoiner
  336. non_empty_list
  337. nx
  338. nx-datasets
  339. nx-text
  340. OCADml >= "0.6.0"
  341. obatcher
  342. ocaml-index < "5.4.1-503"
  343. ocaml-r >= "0.4.0"
  344. ocaml-version >= "3.5.0"
  345. ocamlformat >= "0.13.0" & < "0.25.1"
  346. ocamlformat-lib
  347. ocamlformat-mlx-lib
  348. ocamlformat-rpc < "removed"
  349. ocamline
  350. ocluster
  351. ocue
  352. odoc < "2.1.1"
  353. oenv >= "0.1.0"
  354. ohex
  355. oidc
  356. opam-0install
  357. opam-0install-cudf >= "0.5.0"
  358. opam-compiler
  359. opam-file-format >= "2.1.1"
  360. opam-repomin
  361. opencage
  362. opentelemetry >= "0.6"
  363. opentelemetry-client-cohttp-eio
  364. opentelemetry-client-cohttp-lwt >= "0.6"
  365. opentelemetry-client-ocurl >= "0.6"
  366. opentelemetry-cohttp-lwt >= "0.6"
  367. opentelemetry-logs
  368. opentelemetry-lwt >= "0.6"
  369. opium
  370. opium-graphql
  371. opium-testing
  372. opium_kernel
  373. orewa
  374. orgeat
  375. ortac-core
  376. ortac-wrapper
  377. osnap < "0.3.0"
  378. osx-acl
  379. osx-attr
  380. osx-cf
  381. osx-fsevents
  382. osx-membership
  383. osx-mount
  384. osx-xattr
  385. otoggl
  386. owl >= "0.7.0" & != "0.9.0" & != "1.0.0"
  387. owl-base < "0.5.0"
  388. owl-ode >= "0.1.0" & != "0.2.0"
  389. owl-symbolic
  390. par_incr
  391. passe
  392. passmaker
  393. patch
  394. pbkdf
  395. pecu >= "0.2"
  396. pf-qubes
  397. pg_query >= "0.9.6"
  398. pgx >= "1.0"
  399. pgx_unix >= "1.0"
  400. pgx_value_core
  401. pgx_value_ptime
  402. phylogenetics
  403. piaf
  404. picos < "0.5.0"
  405. picos_meta
  406. piece_rope
  407. plebeia >= "2.0.0"
  408. polyglot
  409. polymarket
  410. polynomial
  411. ppx_blob >= "0.3.0"
  412. ppx_catch
  413. ppx_deriving_cmdliner
  414. ppx_deriving_ezjsonm
  415. ppx_deriving_qcheck
  416. ppx_deriving_rpc
  417. ppx_deriving_yaml
  418. ppx_inline_alcotest
  419. ppx_map
  420. ppx_marshal
  421. ppx_parser
  422. ppx_protocol_conv >= "5.0.0"
  423. ppx_protocol_conv_json >= "5.0.0"
  424. ppx_protocol_conv_jsonm >= "5.0.0"
  425. ppx_protocol_conv_msgpack >= "5.0.0"
  426. ppx_protocol_conv_xml_light >= "5.0.0"
  427. ppx_protocol_conv_xmlm
  428. ppx_protocol_conv_yaml >= "5.0.0"
  429. ppx_repr
  430. ppx_subliner
  431. ppx_units
  432. ppx_yojson >= "1.1.0"
  433. pratter
  434. prbnmcn-ucb1 >= "0.0.2"
  435. prc
  436. preface
  437. pretty_expressive
  438. prettym
  439. proc-smaps
  440. producer
  441. progress
  442. prom
  443. prometheus < "1.2"
  444. prometheus-app
  445. protocell
  446. protocol-9p < "0.11.0" | >= "0.11.2"
  447. protocol-9p-unix
  448. proton
  449. psq
  450. public-suffix
  451. pxshot
  452. pyast
  453. qcaml
  454. qcheck >= "0.25"
  455. qcheck-alcotest
  456. qcheck-core >= "0.25"
  457. qdrant
  458. query-json
  459. quickjs
  460. quill
  461. randii
  462. reason-standard
  463. red-black-tree
  464. reparse >= "2.0.0" & < "3.0.0"
  465. reparse-unix < "2.1.0"
  466. resp
  467. resp-unix >= "0.10.0"
  468. resto >= "0.9"
  469. rfc1951 < "1.0.0"
  470. routes < "2.0.0"
  471. rpc
  472. rpclib
  473. rpclib-async
  474. rpclib-lwt
  475. rpmfile < "0.3.0"
  476. rpmfile-eio
  477. rpmfile-unix
  478. rune
  479. SZXX >= "4.0.0"
  480. saga
  481. salsa20
  482. salsa20-core
  483. sanddb >= "0.2"
  484. saturn != "0.4.1"
  485. saturn_lockfree != "0.4.1"
  486. scrypt-kdf
  487. secp256k1 >= "0.4.1"
  488. secp256k1-internal
  489. semver >= "0.2.1"
  490. sendmail
  491. sendmail-lwt
  492. sendmail-miou-unix
  493. sendmail-mirage
  494. sendmsg
  495. seqes
  496. server-reason-react
  497. session-cookie
  498. session-cookie-async
  499. session-cookie-lwt
  500. shakuhachi
  501. sherlodoc
  502. sihl < "0.2.0"
  503. sihl-type
  504. slug
  505. smaws-clients
  506. smaws-lib
  507. smol
  508. smol-helpers
  509. sodium-fmt
  510. solidity-alcotest
  511. sowilo
  512. spdx_licenses
  513. spectrum >= "0.2.0"
  514. spin >= "0.7.0"
  515. spurs < "0.1.1"
  516. squirrel
  517. ssh-agent
  518. ssl >= "0.6.0"
  519. starred_ml
  520. stramon-lib
  521. stringx
  522. styled-ppx
  523. swapfs
  524. synchronizer >= "0.2"
  525. syslog-rfc5424 < "0.2"
  526. tabr
  527. talon
  528. tar-mirage
  529. tcpip
  530. tdigest < "2.1.0"
  531. term-indexing
  532. term-tools
  533. terminal
  534. terminal_size >= "0.1.1"
  535. terminus
  536. terminus-cohttp
  537. terminus-hlc
  538. terml
  539. testo
  540. testo-lwt
  541. textmate-language >= "0.3.0"
  542. textrazor
  543. thread-table
  544. timedesc
  545. timere
  546. timmy
  547. timmy-jsoo
  548. timmy-lwt
  549. timmy-unix
  550. tls >= "0.12.8"
  551. toc
  552. topojson
  553. topojsone
  554. trail
  555. traits
  556. transept
  557. tsort >= "2.2.0"
  558. twostep
  559. type_eq
  560. type_id
  561. typeid >= "1.0.1"
  562. tyre >= "0.4"
  563. tyxml >= "4.2.0"
  564. tyxml-jsx
  565. tyxml-ppx >= "4.3.0"
  566. tyxml-syntax
  567. uecc
  568. ulid
  569. universal-portal
  570. unix-dirent
  571. unix-errno
  572. unix-sys-resource
  573. unix-sys-stat
  574. unix-time
  575. unstrctrd
  576. uring < "0.4"
  577. user-agent-parser
  578. uspf
  579. uspf-lwt
  580. uspf-mirage
  581. uspf-unix
  582. utcp
  583. utop >= "2.13.0"
  584. validate
  585. validator
  586. vercel
  587. vhd-format-lwt >= "0.13.0"
  588. vpnkit
  589. wayland >= "2.0"
  590. wcwidth
  591. websocketaf
  592. x509 >= "0.7.0"
  593. xapi-rrd
  594. xapi-stdext-date
  595. xapi-stdext-encodings
  596. xapi-stdext-std >= "4.16.0"
  597. xdge
  598. yaml
  599. yaml-sexp
  600. yocaml
  601. yocaml_syndication >= "2.0.0"
  602. yocaml_yaml < "2.0.0"
  603. yojson >= "1.6.0"
  604. yojson-five
  605. yuscii >= "0.3.0"
  606. yuujinchou >= "1.0.0"
  607. zar
  608. zed >= "3.2.2"
  609. zlist < "0.4.0"

Conflicts (1)

  1. result < "1.5"