Popularity
9.4
Stable
Activity
5.7
Declining
165
7
31
Monthly Downloads: 33
Programming language: Haskell
License: MIT License
genvalidity alternatives and similar packages
Based on the "Testing" category.
Alternatively, view genvalidity alternatives based on common mentions on social networks and blogs.
-
curl-runnings
A declarative test framework for quickly and easily writing integration tests against JSON APIs. -
monad-mock
DISCONTINUED. A Haskell package that provides a monad transformer for mocking mtl-style typeclasses [GET https://api.github.com/repos/cjdev/monad-mock: 404 - Not Found // See: https://docs.github.com/rest/repos/repos#get-a-repository] -
quickcheck-arbitrary-adt
Typeclass for generating a list of each instance of a sum type's constructors -
test-fixture
DISCONTINUED. Testing with monadic side-effects [GET https://api.github.com/repos/cjdev/test-fixture: 404 - Not Found // See: https://docs.github.com/rest/repos/repos#get-a-repository] -
tasty-ant-xml
A tasty ingredient to output test results in XML, using the Ant schema. This XML can be consumed by the Jenkins continuous integration framework. -
test-framework-th
Automagically (using Template Haskell) generates the Haskell-code you need when using HUnit
Kargo - Stop Scripting Promotions. Start Shipping with Kargo
Kargo automates promotion across dev, staging, and prod with approval gates and verification. Open source, built by the team behind Argo CD. Download now.
Promo
akuity.io
Do you think we are missing an alternative of genvalidity or a related project?
README
Validity and validity-based testing
Why?
to make writing correct software cheaper.
- Free generators
- Free shrinking
- Cheap properties
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
- [Usage example](docs/USAGE_EXAMPLE.md)
- [Fully worked example](docs/FULLY_WORKED_EXAMPLE.md)
- [High-level package overview](docs/PACKAGE_OVERVIEW.md)
Cachix cache
There is a cachix cache for this project.
To use it, use cachix use validity or add the appropriate details to your nixos configuration.
Sponsor this project
Validity is free and open-source software. Building it takes time, energy and money. Please consider supporting the project at https://cs-syd.eu/support .