QCheck2.TestA test is a pair of a generator and a property that all generated values must satisfy.
The main features of this module are:
make to create a testmake_neg to create a negative test that is expected not to satisfy the tested propertycheck_exn to run a single test with a simple runner.A test fails if the property does not hold for a given input. The simple form or the rich form) offer more elaborate forms to fail a test.
Note that while check_exn is provided for convenience to discover QCheck or to run a single test in utop, to run QCheck tests in your project you probably want to opt for a more advanced runner, or convert QCheck tests to your favorite test framework:
QCheck_base_runner for a QCheck-only runner (useful if you don't have or don't need another test framework)QCheck_alcotest to convert to Alcotest frameworkQCheck_ounit to convert to OUnit frameworkA single property test on a value of type 'a. A Test.t wraps a cell and hides its type parameter.
val make_cell :
?if_assumptions_fail:([ `Fatal | `Warning ] * float) ->
?count:int ->
?long_factor:int ->
?negative:bool ->
?max_gen:int ->
?max_fail:int ->
?retries:int ->
?name:string ->
?print:'a Print.t ->
?collect:('a -> string) ->
?stats:'a stat list ->
'a Gen.t ->
('a -> bool) ->
'a cellmake_cell gen prop builds a test that checks property prop on instances of the generator gen.
val make_cell_from_QCheck1 :
?if_assumptions_fail:([ `Fatal | `Warning ] * float) ->
?count:int ->
?long_factor:int ->
?negative:bool ->
?max_gen:int ->
?max_fail:int ->
?retries:int ->
?name:string ->
gen:(Stdlib.Random.State.t -> 'a) ->
?shrink:('a -> ('a -> unit) -> unit) ->
?print:('a -> string) ->
?collect:('a -> string) ->
stats:'a stat list ->
('a -> bool) ->
'a cell⚠️ Do not use, this is exposed for internal reasons only. ⚠️
val get_law : 'a cell -> 'a -> boolval get_name : _ cell -> stringval get_collect_opt : 'a cell -> ('a -> string) optionval set_name : _ cell -> string -> unitval get_count : _ cell -> intGet the count of a cell.
val get_long_factor : _ cell -> intGet the long factor of a cell.
val get_positive : _ cell -> boolGet the expected mode of a cell: positive indicates expected to satisfy the tested property, negative indicates expected not to satisfy the tested property.
val make :
?if_assumptions_fail:([ `Fatal | `Warning ] * float) ->
?count:int ->
?long_factor:int ->
?max_gen:int ->
?max_fail:int ->
?retries:int ->
?name:string ->
?print:'a Print.t ->
?collect:('a -> string) ->
?stats:'a stat list ->
'a Gen.t ->
('a -> bool) ->
tmake gen prop builds a test that checks property prop on instances of the generator gen. See make_cell for a description of the parameters.
val make_neg :
?if_assumptions_fail:([ `Fatal | `Warning ] * float) ->
?count:int ->
?long_factor:int ->
?max_gen:int ->
?max_fail:int ->
?retries:int ->
?name:string ->
?print:'a Print.t ->
?collect:('a -> string) ->
?stats:'a stat list ->
'a Gen.t ->
('a -> bool) ->
tmake_neg gen prop builds a test that checks property prop on instances of the generator gen. The test is considered negative, meaning that it is expected not to satisfy the tested property. This information is recorded in an underlying test cell entry and interpreted suitably by test runners. See make_cell for a description of the parameters.
val test_get_count : t -> intval test_get_long_factor : t -> intFormat version of fail_report.
Example:
Test.fail_reportf
"Value N = %i should be greater than M = %i for Foo = %a" n m pp_foo fooinclude module type of Test_exceptionsException raised when a test failed, with the list of counter-examples. Test_fail (name, l) means test name failed on elements of l.
Exception raised when a test raised an exception e, with the sample that triggered the exception. Test_error (name, i, e, st) means name failed on i with exception e, and st is the stacktrace (if enabled) or an empty string.
val print_instance : 'a cell -> 'a -> stringval print_c_ex : 'a cell -> 'a TestResult.counter_ex -> stringval print_fail : 'a cell -> string -> 'a TestResult.counter_ex list -> stringval print_expected_failure : 'a cell -> 'a TestResult.counter_ex list -> stringval print_error :
?st:string ->
'a cell ->
string ->
('a TestResult.counter_ex * exn) ->
stringval print_stat : ('a stat * (int, int) Stdlib.Hashtbl.t) -> stringPrint statistics.
val check_result : 'a cell -> 'a TestResult.t -> unitFor a positive test check_result cell res checks that res is Ok _, and returns unit. For a negative test check_result cell res checks that res is Failed _, and returns unit. Otherwise, it raises some exception.
Handler executed after each event during testing of an instance.
Callback executed after each instance of a test has been run. The callback is given the instance tested, and the current results of the test.
type 'a callback = string -> 'a cell -> 'a TestResult.t -> unitCallback executed after each test has been run. f name cell res means test cell, named name, gave res.
val check_cell :
?long:bool ->
?call:'a callback ->
?step:'a step ->
?handler:'a handler ->
?rand:Stdlib.Random.State.t ->
'a cell ->
'a TestResult.tcheck_cell ~long ~rand test generates up to count random values of type 'a using Gen.t and the random state st. The predicate law is called on them and if it returns false or raises an exception then we have a counter-example for the law.
Note: check_cell ignores a test's polarity, acting as described above regardless of whether the tested cell is a positive or negative test.
val check_cell_exn :
?long:bool ->
?call:'a callback ->
?step:'a step ->
?handler:'a handler ->
?rand:Stdlib.Random.State.t ->
'a cell ->
unitSame as check_cell but calls check_result on the result. check_cell test honors test polarity and thus expects positive tests to succeed without finding a counterexample and expects negative tests to fail by finding one.
val check_exn : ?long:bool -> ?rand:Stdlib.Random.State.t -> t -> unitChecks the property against some test cases, and calls check_result, which might raise an exception in case of failure. check_exn test honors test polarity and thus expects positive tests to succeed without finding a counterexample and expects negative tests to fail by finding one.