Description
Simple, expressive testing library.
Description
EasyTest is a simple testing toolkit for unit- and property-testing. It's based on the hedgehog property-testing system. Here's an example usage:
module Main where
import EasyTest
import qualified Hedgehog.Gen as Gen
import qualified Hedgehog.Range as Range
suite :: Test
suite = tests
[ scope "addition.ex1" $ unitTest $ 1 + 1 === 2
, scope "addition.ex2" $ unitTest $ 2 + 3 === 5
, scope "list.reversal" $ property $ do
ns <- forAll $
Gen.list (Range.singleton 10) (Gen.int Range.constantBounded)
reverse (reverse ns) === ns
-- equivalent to `scope "addition.ex3"`
, scope "addition" . scope "ex3" $ unitTest $ 3 + 3 === 6
, scope "always passes" $ unitTest success -- record a success result
, scope "failing test" $ crash "oh noes!!"
]
-- NB: `run suite` would run all tests, but we only run
-- tests whose scopes are prefixed by "addition"
main :: IO Summary
main = runOnly "addition" suite
This generates the output:
━━━ runOnly "addition" ━━━
✓ addition.ex1 passed 1 test.
✓ addition.ex2 passed 1 test.
⚐ list.reversal gave up after 1 discard, passed 0 tests.
✓ addition.ex3 passed 1 test.
⚐ always passes gave up after 1 discard, passed 0 tests.
⚐ failing test gave up after 1 discard, passed 0 tests.
⚐ 3 gave up, 3 succeeded.
We write tests with ordinary Haskell code, with control flow explicit and under programmer control.