Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How exactly to rerun failed examples? #281

Open
Fryie opened this issue Oct 18, 2018 · 5 comments
Open

How exactly to rerun failed examples? #281

Fryie opened this issue Oct 18, 2018 · 5 comments

Comments

@Fryie
Copy link

Fryie commented Oct 18, 2018

Hi, I'm trying to figure out how exactly to reproduce a failure in my test so I can debug it. I receive output like "Replay with 1006624065 8850 and size 2". But I'm not exactly sure how I can generate the exact example that caused the failure.

I'm trying

let args = CheckerArguments(replay: (StdGen(1006624065, 8850), 2))
property("something", arguments: args) <- forAll ...

but it looks like that generates 100 test cases. How can I get only exactly the one that failed?

As a workaround I guess I can assign my condition in the forAll closure to a variable and work with if ... else, but maybe there's an easier way.

(Also, it would be nice if the output could be something like

Replay with "arguments: CheckerArguments(replay: (StdGen(1006624065, 8850), 2))"

or something, because currently it's not really intuitively clear where these values need to be inserted.)

@CodaFi
Copy link
Member

CodaFi commented Oct 18, 2018

You should have the shrunken version of the values that failed your property printed to the console by the failure handler.

@Fryie
Copy link
Author

Fryie commented Oct 19, 2018

Yes. But if you have quite complicated structures (even after shrinking) with very custom description strings, it can be very hard to take that output and translate it back to code that initializes said value. This is certainly true in my case.

@CodaFi
Copy link
Member

CodaFi commented Oct 19, 2018

Very true. This is a language-level problem I think, and requires a language-level solution. Being able to stringify arbitrary bits of the AST with a good macro system would make this trivial.

In the mean time, as a hack, you could write a modifier type that dumps a value declaration as its description

@CodaFi
Copy link
Member

CodaFi commented Oct 19, 2018

I do agree with your suggestion to improve the replay diagnostic. Especially now that Xcode lets you copy diagnostic banner text.

@Fryie Fryie closed this as completed Oct 19, 2018
@Fryie Fryie reopened this Oct 19, 2018
@Fryie
Copy link
Author

Fryie commented Oct 19, 2018

I do agree with your suggestion to improve the replay diagnostic. Especially now that Xcode lets you copy diagnostic banner text.

Maybe one could also add another property to CheckerArguments, like runOnlyExample: Int? Then the output could indicate the seed, the size and also this attribute so the exact test case can be easily reproduced.

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

No branches or pull requests

2 participants