GithubHelp home page GithubHelp logo

dbaynard / validity Goto Github PK

View Code? Open in Web Editor NEW

This project forked from norfairking/validity

0.0 2.0 0.0 665 KB

Validity and validity-based testing

Home Page: https://hackage.haskell.org/package/genvalidity-hspec

Nix 0.65% Haskell 98.73% Shell 0.62%

validity's Introduction

Validity and validity-based testing

Build Status

Package Hackage Stackage
validity Hackage Stackage
validity-aeson Hackage Stackage
validity-bytestring Hackage Stackage
validity-containers Hackage Stackage
validity-path Hackage Stackage
validity-primitive Hackage Stackage
validity-scientific Hackage Stackage
validity-text Hackage Stackage
validity-time Hackage Stackage
validity-unordered-containers Hackage Stackage
validity-uuid Hackage Stackage
validity-vector Hackage Stackage
genvalidity Hackage Stackage
genvalidity-aeson Hackage Stackage
genvalidity-bytestring Hackage Stackage
genvalidity-containers Hackage Stackage
genvalidity-path Hackage Stackage
genvalidity-property Hackage Stackage
genvalidity-scientific Hackage Stackage
genvalidity-text Hackage Stackage
genvalidity-time Hackage Stackage
genvalidity-unordered-containers Hackage Stackage
genvalidity-uuid Hackage Stackage
genvalidity-vector Hackage Stackage
genvalidity-hspec Hackage Stackage
genvalidity-hspec-aeson Hackage Stackage
genvalidity-hspec-binary Hackage Stackage
genvalidity-hspec-cereal Hackage Stackage
genvalidity-hspec-hashable Hackage Stackage
genvalidity-hspec-optics Hackage Stackage

Why?

Make write correct software cheaper.

  • Cheap properties
  • Free generators
  • Free shrinking

Cheap properties

  • Property Combinators:
specify "inverse functions" $ inverseFunctions (+1) (-1)
specify "equivalent functions" $ equivalent ((+ 1) . (- 1)) id
specify "transitivity" $ transitivity ((>) :: Int -> Int -> Bool)
specify "symmetry" $ symmetry ((==) :: Int -> Int -> Bool)
  • Test suite combinators:
ordSpec @Int
  Ord Int
    (<=) :: Int -> Int -> Bool
      is reflexive for "even Int"'s
        +++ OK, passed 100 tests.
      is antisymmetric for "even Int"'s
        +++ OK, passed 100 tests.
      is transitive for "even Int"'s
        +++ OK, passed 100 tests.
      is equivalent to (\a b -> compare a b /= GT) for "even Int"'s
        +++ OK, passed 100 tests.
    (>=) :: Int -> Int -> Bool
      is reflexive for "even Int"'s
        +++ OK, passed 100 tests.
      is antisymmetric for "even Int"'s
        +++ OK, passed 100 tests.
      is transitive for "even Int"'s
        +++ OK, passed 100 tests.
      is equivalent to (\a b -> compare a b /= LT) for "even Int"'s
        +++ OK, passed 100 tests.
    (<) :: Int -> Int -> Bool
      is antireflexive for "even Int"'s
        +++ OK, passed 100 tests.
      is transitive for "even Int"'s
        +++ OK, passed 100 tests.
      is equivalent to (\a b -> compare a b == LT) for "even Int"'s
        +++ OK, passed 100 tests.
    (>) :: Int -> Int -> Bool
      is antireflexive for "even Int"'s
        +++ OK, passed 100 tests.
      is transitive for "even Int"'s
        +++ OK, passed 100 tests.
      is equivalent to (\a b -> compare a b == GT) for "even Int"'s
        +++ OK, passed 100 tests.

Free generators

data MyType = MyType
  { myRational :: Rational
  , myBool :: Bool
  } deriving (Show, Eq, Generic)

instance Validity MyType -- Implementation is derived via Generic
instance GenUnchecked MyType -- Implementation is derived via Generic
instance GenValid MyType -- Default implementation via GenUnchecked and Validity
genValid :: Gen MyType -- Free access to a generator

Free shrinking

shrinkValid :: MyType -> [MyType] -- Free access to a _valid_ shrinking function

Further Documentation

validity's People

Contributors

norfairking avatar eschnett avatar sjakobi avatar pactuser avatar hvr avatar danburton avatar nh2 avatar amigalemming avatar

Watchers

James Cloos avatar  avatar

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.