Skip to content
This repository has been archived by the owner on May 27, 2020. It is now read-only.

Incorporate hedgehog-like property testing #5

Open
jdegoes opened this issue May 10, 2018 · 10 comments
Open

Incorporate hedgehog-like property testing #5

jdegoes opened this issue May 10, 2018 · 10 comments

Comments

@jdegoes
Copy link
Member

jdegoes commented May 10, 2018

Apparently there is already a Scala port.

@ysusuk
Copy link

ysusuk commented May 26, 2018

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

@jdegoes
Copy link
Member Author

jdegoes commented May 26, 2018

@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.

@edmundnoble
Copy link
Contributor

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.

@jdegoes
Copy link
Member Author

jdegoes commented May 27, 2018

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.

@edmundnoble
Copy link
Contributor

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.

@ktonga
Copy link
Member

ktonga commented Jul 3, 2018

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

@charleso
Copy link

charleso commented Jul 3, 2018

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
Copy link

charleso commented Jul 3, 2018

@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

@dwijnand
Copy link
Contributor

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.

@sideeffffect
Copy link

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

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants