HMock-0.1.0.1: A flexible mock framework for testing effectful code.
Safe HaskellSafe-Inferred
LanguageHaskell2010

Test.HMock.Internal.Multiplicity

Synopsis

Documentation

data Multiplicity Source #

An acceptable range of number of times for something to happen.

A multiplicity can have a lower and an upper bound.

Constructors

Multiplicity Int (Maybe Int) 

Instances

Instances details
Eq Multiplicity Source # 
Instance details

Defined in Test.HMock.Internal.Multiplicity

Num Multiplicity Source #

This is an incomplete instance, provided for convenience.

>>> meetsMultiplicity 5 4
False
>>> meetsMultiplicity 5 5
True
>>> between 4 6 - between 1 2
2 to 5 times
Instance details

Defined in Test.HMock.Internal.Multiplicity

Show Multiplicity Source # 
Instance details

Defined in Test.HMock.Internal.Multiplicity

infeasible :: Multiplicity Source #

A Multiplicity value representing inconsistent expectations.

meetsMultiplicity :: Multiplicity -> Int -> Bool Source #

Checks whether a certain number satisfies the Multiplicity.

once :: Multiplicity Source #

A Multiplicity that means exactly once.

>>> meetsMultiplicity once 0
False
>>> meetsMultiplicity once 1
True
>>> meetsMultiplicity once 2
False

anyMultiplicity :: Multiplicity Source #

A Multiplicity that means any number of times. >>> meetsMultiplicity anyMultiplicity 0 True >>> meetsMultiplicity anyMultiplicity 1 True >>> meetsMultiplicity anyMultiplicity 10 True

atLeast :: Multiplicity -> Multiplicity Source #

A Multiplicity that means at least this many times.

>>> meetsMultiplicity (atLeast 2) 1
False
>>> meetsMultiplicity (atLeast 2) 2
True
>>> meetsMultiplicity (atLeast 2) 3
True

atMost :: Multiplicity -> Multiplicity Source #

A Multiplicity that means at most this many times.

>>> meetsMultiplicity (atMost 2) 1
True
>>> meetsMultiplicity (atMost 2) 2
True
>>> meetsMultiplicity (atMost 2) 3
False

between :: Multiplicity -> Multiplicity -> Multiplicity Source #

A Multiplicity that means any number in this interval, endpoints included. For example, between 2 3 means 2 or 3 times, while between n n is equivalent to n.

>>> meetsMultiplicity (between 2 3) 1
False
>>> meetsMultiplicity (between 2 3) 2
True
>>> meetsMultiplicity (between 2 3) 3
True
>>> meetsMultiplicity (between 2 3) 4
False

exhaustable :: Multiplicity -> Bool Source #

Checks whether a Multiplicity includes zero in its range.

>>> exhaustable anyMultiplicity
True
>>> exhaustable (atLeast 2)
False
>>> exhaustable (atMost 3)
True
>>> exhaustable (between 0 2)
True

feasible :: Multiplicity -> Bool Source #

Checks whether a Multiplicity is capable of matching any number at all.

>>> feasible once
True
>>> feasible 0
True
>>> feasible (once - 2)
False