GithubHelp home page GithubHelp logo

Improve showing functions about smallcheck HOT 4 CLOSED

bodigrim avatar bodigrim commented on May 23, 2024
Improve showing functions

from smallcheck.

Comments (4)

pepeiborra avatar pepeiborra commented on May 23, 2024

Perhaps the current instance for a->b should live in a separate module so that it can be optionally imported ?

from smallcheck.

UnkindPartition avatar UnkindPartition commented on May 23, 2024

It would be nice indeed, but this instance is needed to be able to test higher-order functions.

(Note the Show constraint in instance (Serial m a, Show a, Testable m b) => Testable m (a->b).)

from smallcheck.

UnkindPartition avatar UnkindPartition commented on May 23, 2024

This has now become a real problem.

Some of tasty's dependencies (I don't know which one) apparently imports Text.Show.Functions which contains a conflicting Show instance for function. So an attempt to use tasty and test functions using smallcheck results in an error:

Overlapping instances for Show (Bool -> JT Bool Maybe Bool)
  arising from a use of `testProperty'
Matching instances:
  instance [safe] Show (a -> b) -- Defined in `Text.Show.Functions'
  instance [overlap ok] (Serial Identity a, Show a, Show b) =>
                        Show (a -> b)
    -- Defined in `Test.SmallCheck.Series'

So, I'm going to remove the Show (a -> b) instance and replace it with a Show Fun instance.

from smallcheck.

UnkindPartition avatar UnkindPartition commented on May 23, 2024

Here are two approaches that I can think of:

  • When generating a function, store the additional information (such as the inspected size of the argument and the default value) so that we know what/how to show
  • Use the LogicT continuations to "refine" the function akin to lazy smallcheck. First try with the a never defined function, then catch exceptions and add cases to the table. This will work only with first-order functions, but OTOH it will produce much better results

I'm tempted to implement both approaches, like QuickCheck does (CoArbitrary vs Argument).

from smallcheck.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.