You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
For instance QCheck2.Genui64 that would be useful to have by default:
graft_corners ui64 [0L; 1L; 2L; Int64.max_int] ()
As we do not have a proper fuzzer, these cases are important and we can not trust the generation to cover theses. However, one answer can be: "they need to unit test the corner cases, then write pbt"
The text was updated successfully, but these errors were encountered:
I can certainly follow you.
In a sense, the folklore of "the tester needs to be mindful of testing corner cases" translates to
"the PBT tester needs to be mindful of generating corner cases".
A personal pet-peeve here is https://github.com/jmid/qc-ptrees where changing the int generator to the following made a difference between finding a bug and not finding it: https://github.com/jmid/qc-ptrees/blob/f3c01664e76bc3944f48e155cb410db8317baf06/qctest.ml#L84-L89
I admit this situation is not particularly satisfactory though.
That said, I'm very hesitant about making such a change as it makes generators stateful by default.
This means that simple generator transformations such as:
This will hurt QCheck/QCheck2's ability to reproduce pseudo-random runs, as behaviour now depends on both the random seed and the internal state of all involved generators.
A less invasive option is compose a non-stateful int-generator like above.
Here's an example of less trivial one - which I learned from @jlouis some years ago.
This has a greater chance of producing corner cases (and can be further composed with Gen.oneof):
(* sign * pow(2, k) + [-3;3] *)let int_gen =
(Gen.map3
(funsignexpoaddition ->
let n =1lsl expo inlet n =if sign then-n else n in
n+addition)
Gen.bool (Gen.int_range 063) (Gen.int_range (-3) 3));;
For instance
QCheck2.Genui64
that would be useful to have by default:As we do not have a proper fuzzer, these cases are important and we can not trust the generation to cover theses. However, one answer can be: "they need to unit test the corner cases, then write pbt"
The text was updated successfully, but these errors were encountered: