Mavryk_test_helpers.Qcheck2_helpers
val qcheck_wrap :
?verbose:bool ->
?long:bool ->
?rand:Stdlib.Random.State.t ->
QCheck2.Test.t list ->
unit Alcotest.test_case list
Wrap QCheck tests into Alcotest.
val qcheck_wrap_lwt :
?verbose:bool ->
?long:bool ->
?rand:Stdlib.Random.State.t ->
QCheck2.Test.t list ->
(string * [ `Quick | `Slow ] * (unit -> unit Lwt.t)) list
Wrap QCheck tests into Alcotest_lwt.
val qcheck_make_result :
?count:int ->
?print:'a QCheck2.Print.t ->
?pp_error:(Stdlib.Format.formatter -> 'b -> unit) ->
?check:((bool, 'b) Stdlib.result -> bool) ->
name:string ->
gen:'a QCheck2.Gen.t ->
('a -> (bool, 'b) Stdlib.result) ->
QCheck2.Test.t
qcheck_make_result ?print ?pp_error ?count ?check ~name ~gen f
is a wrapper around QCheck2
.Test.make where f
returns a result type. If check
is not provided and if the result of f
is an error, Qcheck2
.Test.fail_reportf is called and the error is shown if pp_error
is provided.
val qcheck_make_lwt :
?count:int ->
?print:'a QCheck2.Print.t ->
extract:(bool Lwt.t -> bool) ->
name:string ->
gen:'a QCheck2.Gen.t ->
('a -> bool Lwt.t) ->
QCheck2.Test.t
qcheck_make_lwt ?print ?count ~extract ~name ~gen f
is a wrapper around QCheck2
.Test.make where f
returns a bool Lwt.t
. extract
needs to be provided to extract the bool
from Lwt
, e.g. Lwt_main.run
.
val qcheck_make_result_lwt :
?count:int ->
?print:'a QCheck2.Print.t ->
?pp_error:(Stdlib.Format.formatter -> 'b -> unit) ->
?check:((bool, 'b) Stdlib.result -> bool) ->
extract:((bool, 'b) Stdlib.result Lwt.t -> (bool, 'b) Stdlib.result) ->
name:string ->
gen:'a QCheck2.Gen.t ->
('a -> (bool, 'b) Stdlib.result Lwt.t) ->
QCheck2.Test.t
qcheck_make_result_lwt ?print ?count ~extract ~name ~gen f
is the combination of qcheck_make_result
and qcheck_make_lwt
.
val qcheck_eq_tests :
eq:('a -> 'a -> bool) ->
gen:'a QCheck2.Gen.t ->
eq_name:string ->
QCheck2.Test.t list
qcheck_eq_tests ~eq ~gen ~eq_name
returns three tests of eq
: reflexivity, symmetry, and transitivity.
eq_name
should be the name of the function defining eq
. For example, given an equality function defined as let mytype_eq = ...
, call qcheck_eq_tests mytype_eq gen "mytype_eq"
. eq_name
is only used for logging.
val qcheck_eq :
?pp:(Stdlib.Format.formatter -> 'a -> unit) ->
?cmp:('a -> 'a -> int) ->
?eq:('a -> 'a -> bool) ->
?__LOC__:string ->
'a ->
'a ->
bool
qcheck_eq pp cmp eq a b
evaluates whether a
and b
are equal, and if they are not, raises a failure and prints an error message. Equality is evaluated as follows:
eq
eq
is provided, use a provided cmp
eq
nor cmp
is provided, use Stdlib
.compareIf pp
is provided, use this to print x
and y
if they are not equal.
If __LOC__
is provided, print it at the beginning of the error message when applicable.
val qcheck_neq :
?pp:(Stdlib.Format.formatter -> 'a -> unit) ->
?cmp:('a -> 'a -> int) ->
?eq:('a -> 'a -> bool) ->
'a ->
'a ->
bool
Similar to qcheck_eq
but tests that two values are not equal.
val qcheck_eq' :
?pp:(Stdlib.Format.formatter -> 'a -> unit) ->
?cmp:('a -> 'a -> int) ->
?eq:('a -> 'a -> bool) ->
expected:'a ->
actual:'a ->
unit ->
bool
Labeled variant of qcheck_eq
. The unit
argument is necessary as OCaml requires at least one positional (non-labeled) argument in case of optional arguments.
val qcheck_cond :
?pp:(Stdlib.Format.formatter -> 'a -> unit) ->
cond:('a -> bool) ->
'a ->
unit ->
bool
qcheck_cond pp cond a
evaluate cond a
, if this condition is false, raises a failure and prints an error message.
If pp
is provided, use this to print a
if cond a
is false.
int64_range_gen a b
generates an int64
between a
inclusive and b
inclusive.
Poorman's implementation until https://github.com/c-cube/qcheck/issues/105 is done.
int32_range_gen a b
generates an int32
between a
inclusive and b
inclusive.
Poorman's implementation until https://github.com/c-cube/qcheck/issues/105 is done.
int64_strictly_positive_gen x
generates an int64
between 1
inclusive and x
inclusive.
This will fail if x
is not strictly positive.
int_strictly_positive_gen x
generates an int
between 1
inclusive and x
inclusive.
This will fail if x
is not strictly positive.
small_bytes_gen
is a QCheck2.Gen.t
for bytes
of small size.
bytes_fixed_gen n
is a QCheck2.Gen.t
for bytes
of length n
.
endpoint_gen
is a QCheck2.Gen.t
for endpoints (such as mavkit-client
's --endpoint
flag). It returns URLs of the form: (http|https)://(string\.)+(:port)?
. It is by no means the most general Uri.t
generator. Generalize it if needed.
A generator that returns a sublist of the given list. Lists returned by this generator are not in the same order as the given list (they are shuffled). This generator can return a list equal to the input list (this generator does not guarantee to return strict sublists of the input list).
A generator that returns lists whose elements are from the given list, preserving the order. For example, given the input list 0, 1, 2
, this generator can produce , 0
, 0, 2
, 1, 2
, 1
, etc.
of_option_gen gen
converts a generator gen
of optional values into a generator of values by rerunning the generator if the generated value was a None
until a Some
is generated.
Be careful: if None
is always returned, this hangs forever!
module MakeMapGen (Map : sig ... end) : sig ... end
Map-related generators.