packages feed

either-n-0.1.0.0: test/Gens.hs

{-# OPTIONS_GHC -Wall #-}

-- | Generators shared by the property tests.
module Gens (
  genUnit,
  genInt,
  genString,
  genList,
  genMaybeInt,
  genEither3,
  genFnInt,
) where

import Data.Either3 (Either3 (..))
import Hedgehog (Gen)
import Hedgehog.Function (Fn, fn)
import qualified Hedgehog.Gen as Gen
import qualified Hedgehog.Range as Range

genUnit :: Gen ()
genUnit = pure ()

genInt :: Gen Int
genInt = Gen.int (Range.linear (-100) 100)

genString :: Gen String
genString = Gen.string (Range.linear 0 50) Gen.unicode

genList :: Gen [Int]
genList = Gen.list (Range.linear 0 10) genInt

genMaybeInt :: Gen (Maybe Int)
genMaybeInt = Gen.maybe genInt

genEither3 :: Gen a -> Gen b -> Gen c -> Gen (Either3 a b c)
genEither3 a b c = Gen.choice [fmap First3 a, fmap Second3 b, fmap Third3 c]

genFnInt :: Gen (Fn Int Int)
genFnInt = fn genInt