testz
testz copied to clipboard
Incorporate hedgehog-like property testing
Apparently there is already a Scala port.
Hi guys, can you pls elaborate on this a bit? I am happy to help!
@ysusuk I think the main tasks are:
- Import over scalaprops into this library, since Kenji has donated it to Scalaz 8 (we should take care to preserve copyright notice and credit).
- Port features from Scala Hedgehog into the imported scalaprops, but remove dependency on Scalaz type classes.
In the end, the interface will be similar to scalaprops
, but with "free shrinking".
Then separate tickets can add other features like "free mutations", etc.
I don't exactly want to do what hedgehog does. I'd much prefer to generate data in order of increasing size, so that we never have to shrink at all.
Because there are infinitely many examples at any size, even if you generate examples with increasing size, if you find a failure, it’s still very likely you can minimize it. I.e. the fact you generated with increasing size does not lower the odds you can shrink failures.
Right, agreed up to a point. Shrinking is necessary, but I do think it will certainly lower the odds that we need to shrink a lot.
Hey guys, @charleso and I are thinking about resuming the work on the scala port and I thought we could use some input from you so all the work done can be shared with testz. The general idea would be to design it in a way that it exposes a few core building blocks to be combined as required instead of trying to solve the whole thing ala framework.
From a chat with Ed we have:
I do like shrinking, but I'd also like to have generators generate in a way which gradually increases data size
And I'd like all tests to begin with the same seed
Tweakable, but by default all the same seed
And I think @alexknvl might have something to say too
Just for context, I was the one who hacked together scala-hedgehog in a weekend, and it was an exact 1:1 with the current haskell-hedgehog API (which led to all sorts of fun type-inference problems with the monad transformers). Just in case you haven't seen it there is also sonic which was done around the same time, but I haven't spoken to the author at all.
EDIT: I haven't touched scala-hedgehog
since that first weekend
From my perspective I don't really see the value in having multiple versions of the same concept (in particular "free shrinking"). Or at least I won't personally be putting any more effort there if there is more effort/focus elsewhere. I would happily push to delete scala-hedgehog
(or perhaps redirect here) if it achieves the same goal.
Please let me know if there's anything I can do to help.
@edmundnoble Apologies if you already know all of the context for Hedgehog, but Jacob who started the library did an excellent talk last year about it.
https://www.youtube.com/watch?v=AIv_9T0xKEo
Why not more simply provide the necessary (if any) support to ergonomically use scala-hedgehog with testz?
With regards to tweaking the generation strategy perhaps that could be a feature request for scala-hedgehog.
there's also another approach: validity
this article compares it with QuickCheck and Hedgehog: QuickCheck, Hedgehog, Validity.