-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/

-- | Tiny QuickCheck test library with minimal dependencies
--   
--   A tiny (1 module, <500 lines) property-based (and unit) testing
--   library with minimal dependencies.
--   
--   Instead of reinventing the wheel (https://xkcd.com/927), we use
--   a RSpec/HSpec-like DSL and run tests with QuickCheck.
--   
--   For many use-cases, microspec is a drop-in replacement for hspec.
--   
--   
--   import Test.Microspec
--   
--   main :: IO ()
--   main = microspec $ do
--      describe "replicate" $ do
--         it "doubles with 2" $
--            replicate 2 'x' === "xx"
--         it "creates a list of the right size" $
--            \(Positive n) -> length (replicate n 'x') === n
--   
--      describe "reverse" $ do
--         it "reverse . reverse === id" $ \l ->
--            reverse (reverse l) === (l :: [Int])
--   
--      describe "tail" $
--         it "length is -1" $ \(NonEmpty l) ->
--            length (tail l :: [Int]) === length l - 1
--   
--      describe "solve the halting problem" $
--         pending
--   
@package microspec
@version 0.2.1.3

-- | Tests can be structured as nested it / describe
--   statements
--   
--   E.g.
--   
--   
--   microspec $ do
--      describe "plus" $ do
--         it "adds positive numbers" $ do
--            it "does 1 + 1" $
--               1 + 1 === 2
--            it "does 2 + 2" $
--               2 + 2 === 4
--         it "is commutative" $
--            \x y -> x + y === y + (x :: Int)
--   
--   
--   ...which will return, nicely in green instead of bold:
--   
--   
--   plus
--     adds positive numbers
--       does 1 + 1
--       does 2 + 2
--     is commutative
--   
--     -----
--   Runtime: 0.00943336s
--   Successes: 3, Pending: 0, Failures: 0
--   
--   
module Test.Microspec

-- | Run your spec. Put this at the top level, e.g.:
--   
--   
--   main = microspec $ do
--      describe "plus 1" $
--         3 + 1 === 4
--   
microspec :: Microspec () -> IO ()

-- | microspec with MArgs
microspecWith :: MArgs -> Microspec () -> IO ()

-- | Describe a test, e.g.:
--   
--   
--   describe "reverse 'foo' is 'oof'" $
--      reverse "foo" === "oof"
--   
describe :: MTestable t => String -> t -> Microspec ()

-- | An alias for describe. Usually used inside a describe
--   block:
--   
--   
--   describe "replicate" $ do
--      it "doubles with 2" $
--         replicate 2 'x' === "xx"
--      it "creates a list of the right size" $
--         \(Positive n) -> length (replicate n 'x') === n
--   
it :: MTestable t => String -> t -> Microspec ()

-- | Describe a test as unwritten, e.g.:
--   
--   
--   describe "meaning of life" $ pending
--   
pending :: Pending

-- | Note that you don't need to use this to create a test, e.g.:
--   
--   
--   describe "reverse preserves length" $
--      \l -> length (reverse l) === length l
--   
prop :: MTestable prop => String -> prop -> Microspec ()

-- | A series of tests, to run with microspec
data Microspec a

-- | Something which can be tested
--   
--   Note both Bools and Properties can be tested, but only Properties show
--   the values that weren't equal
--   
--   For both unit tests and property tests, if you want to see the outputs
--   of failed tests use ===. If you just want to test for equality,
--   use ==.
--   
--   For example, the outputs of running:
--   
--   
--   microspec $ do
--      describe "baddies" $ do
--         it "isn't 1 =="  $ 0 == (1 :: Int)
--         it "isn't 1 ===" $ 0 === (1 :: Int)
--         it "isn't always 1 =="  $ x -> x == (1 :: Int)
--         it "isn't always 1 ===" $ x -> x === (1 :: Int)
--   
--   
--   
--   are:
--   
--   
--   isn't 1 == - *** Failed! Falsifiable (after 1 test)
--   isn't 1 === - *** Failed! Falsifiable (after 1 test):  | 0 /= 1
--   isn't always 1 == - *** Failed! Falsifiable (after 1 test):  | 0
--   isn't always 1 === - *** Failed! Falsifiable (after 1 test):  | 0 | 0 /= 1
--   
--   
class MTestable t

-- | Tweak how tests are run, with microspecWith.
data MArgs
MArgs :: Maybe Double -> Args -> MArgs

-- | Number of seconds before each test times out. If you want to do this
--   on a per-test basis, try within
[_mArgs_timeoutSecs] :: MArgs -> Maybe Double

-- | Arguments to use with QuickCheck tests
[_mArgs_qcArgs] :: MArgs -> Args

-- | Default arguments. Calling "microspec" is the same as calling
--   "microspecWith defaultMArgs".
defaultMArgs :: MArgs

-- | Hspec compatibility. Equivalent to using ===
shouldBe :: (Eq x, Show x) => x -> x -> Property

shouldSatisfy :: Show x => x -> (x -> Bool) -> Property
instance GHC.Internal.Base.Applicative Test.Microspec.Microspec
instance GHC.Internal.Base.Functor Test.Microspec.Microspec
instance Test.Microspec.MTestable GHC.Types.Bool
instance (Test.QuickCheck.Arbitrary.Arbitrary a, GHC.Internal.Show.Show a, Test.QuickCheck.Property.Testable prop) => Test.Microspec.MTestable (a -> prop)
instance Test.Microspec.MTestable (Test.Microspec.Microspec ())
instance Test.Microspec.MTestable Test.Microspec.Pending
instance Test.Microspec.MTestable Test.QuickCheck.Property.Property
instance Test.Microspec.MTestable (Test.Microspec.TestTree Test.QuickCheck.Property.Property)
instance GHC.Internal.Base.Monad Test.Microspec.Microspec
instance GHC.Internal.Read.Read Test.Microspec.MArgs
instance GHC.Internal.Show.Show Test.Microspec.MArgs
instance GHC.Internal.Show.Show Test.Microspec.ResultCounts
instance GHC.Internal.Show.Show (Test.Microspec.TestTree x)
