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

No instances of class FsCheck.Testable+ITestable1[T] for type Microsoft.FSharp.Collections.FSharpList1[FsCheck.Property] #660

Closed
rynoV opened this issue Feb 23, 2024 · 3 comments

Comments

@rynoV
Copy link

rynoV commented Feb 23, 2024

I was expecting lists and tuples to be testable based on these docs, but it seems they're not implemented yet:

type Testables with

On a related note, these would be useful because auto formatting with fantomas can make the test labels less readable in some case by breaking the label onto a new line (and that is less likely when using an indentation based list):

        test1 |@ "label 1"
        .&. test2
        |@ "label 2"

Last, would it make sense to expose ITestable for custom implementations?

Thanks for your help!

@rynoV rynoV changed the title No instances of class FsCheck.Testable+ITestable1[T] for type Microsoft.FSharp.Collections.FSharpList1[FsCheck.Property] No instances of class FsCheck.Testable+ITestable\1[T] for type Microsoft.FSharp.Collections.FSharpList\1[FsCheck.Property] Feb 23, 2024
@rynoV rynoV changed the title No instances of class FsCheck.Testable+ITestable\1[T] for type Microsoft.FSharp.Collections.FSharpList\1[FsCheck.Property] No instances of class FsCheck.Testable+ITestable1[T] for type Microsoft.FSharp.Collections.FSharpList1[FsCheck.Property] Feb 23, 2024
@rynoV
Copy link
Author

rynoV commented Feb 23, 2024

Last, would it make sense to expose ITestable for custom implementations?

Another reason for this might be to facilitate helper functions, for example if I want to make a helper like:

    let testAll (tests: 'a seq) : FsCheck.Property = tests |> Seq.reduce (.&.)

F# constrains 'a to be a Property, when ideally it would be anything implementing ITestable, but I don't think there's any way to prevent this with the current API

@kurtschelfthout
Copy link
Member

This is an intentional removal in 3.0. I think I also wanted to remove the @| operators but probably forgot, so you got "lucky" there ;)

I'd advice using instead:

test1 |> Prop.label"label 1"
.&. test2 |> Prop.label "label 2"

Which may need some additional parens.

I also generally wanted to move away from having to maintain API for combining properties in this way. Using a test runner/assertion library like xunit or nunit is the suggested way forward here.

At the time, I felt like maintaining the additional, and bespoke API surface in FsCheck was not really worth it. People seem to like being able to return bools as assertions and combining them. I've found in practice that assertions while a bit more verbose often give better error indications.

@kurtschelfthout
Copy link
Member

In other words, as you can see from other issues, the docs are out of date on this...I've barely changed them from the 2.0 version.

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

No branches or pull requests

2 participants