testz icon indicating copy to clipboard operation
testz copied to clipboard

Incorporate hedgehog-like property testing

Open jdegoes opened this issue 6 years ago • 10 comments

Apparently there is already a Scala port.

jdegoes avatar May 10 '18 21:05 jdegoes

Hi guys, can you pls elaborate on this a bit? I am happy to help!

ysusuk avatar May 26 '18 09:05 ysusuk

@ysusuk I think the main tasks are:

  1. Import over scalaprops into this library, since Kenji has donated it to Scalaz 8 (we should take care to preserve copyright notice and credit).
  2. 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.

jdegoes avatar May 26 '18 13:05 jdegoes

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.

edmundnoble avatar May 27 '18 08:05 edmundnoble

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.

jdegoes avatar May 27 '18 13:05 jdegoes

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.

edmundnoble avatar May 28 '18 20:05 edmundnoble

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

ktonga avatar Jul 03 '18 02:07 ktonga

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.

charleso avatar Jul 03 '18 02:07 charleso

@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

charleso avatar Jul 03 '18 02:07 charleso

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.

dwijnand avatar Dec 24 '18 09:12 dwijnand

there's also another approach: validity this article compares it with QuickCheck and Hedgehog: QuickCheck, Hedgehog, Validity.

sideeffffect avatar Mar 03 '19 20:03 sideeffffect