packages feed

morley-1.0.0: test/Test/Interpreter/Apply.hs

-- | Tests for the 'APPLY' instruction.

module Test.Interpreter.Apply
  ( unit_Basic
  , unit_Partially_applied_lambda_packed
  ) where

import Test.HUnit (Assertion)
import Text.Hex (decodeHex)

import Michelson.Test
import Michelson.Typed

unit_Basic :: Assertion
unit_Basic = do
  (_, applyContract) <- importContract "contracts/apply.tz"
  let
    lam :: Instr '[ ToT (Integer, Integer) ] '[ ToT Integer ]
    lam = DUP `Seq` CAR `Seq` DIP CDR `Seq` SUB

  contractPropVal
    applyContract (validateStorageIs @Integer 2)
    dummyContractEnv (VLam $ RfNormal lam) (VC $ CvInt 0)

unit_Partially_applied_lambda_packed :: Assertion
unit_Partially_applied_lambda_packed = do
  (_, partApplyContract) <-
    importContract "contracts/partially-applied-lambda-packed.tz"
  let expected = decodeHex "05020000000f0743035b0005034202000000020316"
              ?: error "Bad bytes"
  contractProp @() @ByteString
    partApplyContract (validateStorageIs @ByteString expected)
    dummyContractEnv () ""