packages feed

primitive-extras-0.4: test/Main/Gens.hs

module Main.Gens where

import Prelude hiding (choose, index)
import Test.QuickCheck.Gen
import Focus (Focus(..))
import Main.Transaction (Transaction)
import qualified Main.Transaction as Transaction
import qualified PrimitiveExtras.SparseSmallArray as SparseSmallArray


element :: Gen Int
element = choose (0, 999)

index :: Gen Int
index = choose (0, 9)

lookupTransaction :: (Show element, Eq element) => Gen (Transaction element)
lookupTransaction = Transaction.lookup <$> index

setTransaction :: Gen (Transaction Int)
setTransaction = Transaction.set <$> index <*> element

unsetTransaction :: Gen (Transaction element)
unsetTransaction = Transaction.unset <$> index

unfoldTransaction :: (Show element, Eq element) => Gen (Transaction element)
unfoldTransaction = pure Transaction.elementsUnfold

transaction :: Gen (Transaction Int)
transaction =
  frequency
    [
      (9, lookupTransaction),
      (9, setTransaction),
      (9, unsetTransaction)
    ]

maybeList :: Gen [Maybe Int]
maybeList =
  replicateM (finiteBitSize (undefined :: Int)) $ frequency $
  [
    (4, fmap Just element),
    (1, pure Nothing)
  ]

sparseSmallArray :: Gen (SparseSmallArray.SparseSmallArray Int)
sparseSmallArray =
  SparseSmallArray.maybeList <$> maybeList