module Morley.Test.Unit
( ContractReturn
, ContractPropValidator
, contractProp
, contractPropVal
) where
import Michelson.Interpret (ContractEnv, ContractReturn)
import Michelson.Typed (Contract, Instr, ToT, ToVal(..), Val(..))
import Morley.Ext (interpretMorley)
import Morley.Types (MorleyLogs)
type ContractPropValidator st prop = ContractReturn MorleyLogs st -> prop
contractProp
:: ( ToVal param, ToVal storage
, ToT param ~ cp, ToT storage ~ st
, Typeable cp, Typeable st
)
=> Contract cp st
-> ContractPropValidator st prop
-> ContractEnv
-> param
-> storage
-> prop
contractProp instr check env param initSt =
contractPropVal instr check env (toVal param) (toVal initSt)
contractPropVal
:: (Typeable cp, Typeable st)
=> Contract cp st
-> ContractPropValidator st prop
-> ContractEnv
-> Val Instr cp
-> Val Instr st
-> prop
contractPropVal instr check env param initSt =
check $ interpretMorley instr param initSt env