Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
PlutusTx.Test.Util.Compiled
Synopsis
- type Program = Program NamedDeBruijn DefaultUni DefaultFun ()
- type Term = Term NamedDeBruijn DefaultUni DefaultFun ()
- countFlatBytes ∷ CompiledCode ann → Integer
- toAnonDeBruijnTerm ∷ Term → Term DeBruijn DefaultUni DefaultFun ()
- toAnonDeBruijnProg ∷ Program NamedDeBruijn DefaultUni DefaultFun () → Program DeBruijn DefaultUni DefaultFun ()
- toNamedDeBruijnTerm ∷ Term DeBruijn DefaultUni DefaultFun () → Term NamedDeBruijn DefaultUni DefaultFun ()
- compiledCodeToTerm ∷ CompiledCodeIn DefaultUni DefaultFun a → Term
- cekResultMatchesHaskellValue ∷ Lift DefaultUni hask ⇒ Term → (∀ r. (Eq r, Show r) ⇒ r → r → k) → hask → k
Documentation
type Program = Program NamedDeBruijn DefaultUni DefaultFun () Source #
type Term = Term NamedDeBruijn DefaultUni DefaultFun () Source #
countFlatBytes ∷ CompiledCode ann → Integer Source #
The size of a CompiledCodeIn
as measured in Flat bytes.
This function serialises the code to ByteString
and counts the number
of bytes. It uses the same serialisation format as used by the ledger:
CBOR(Flat(StripNames(Strip Annotations(UPLC))))
Caveat: the SerialisedCode
constructor of the CompiledCode
type
already contains a PLC program as ByteString
, but it isn't the same byte
representation as the one produced by serialiseCompiledCode
function:
in uses the NamedDeBruijn
representation, which also stores names.
On the mainnet we don't serialise names, only DeBruijn indices, so this function
re-serialises the code to get the size in bytes that we would actually
use on the mainnet.
toAnonDeBruijnTerm ∷ Term → Term DeBruijn DefaultUni DefaultFun () Source #
Remove the textual names from a NamedDeBruijn term
toAnonDeBruijnProg ∷ Program NamedDeBruijn DefaultUni DefaultFun () → Program DeBruijn DefaultUni DefaultFun () Source #
toNamedDeBruijnTerm ∷ Term DeBruijn DefaultUni DefaultFun () → Term NamedDeBruijn DefaultUni DefaultFun () Source #
Given a DeBruijn-named term, give every variable the name "v". If we later call unDeBruijn, that will rename the variables to things like "v123", where 123 is the relevant de Bruijn index.
compiledCodeToTerm ∷ CompiledCodeIn DefaultUni DefaultFun a → Term Source #
Just extract the body of a program wrapped in a CompiledCodeIn
.
We use this a lot.
cekResultMatchesHaskellValue ∷ Lift DefaultUni hask ⇒ Term → (∀ r. (Eq r, Show r) ⇒ r → r → k) → hask → k Source #
Evaluate a PLC term and check that the result matches a given Haskell value (perhaps obtained by running the Haskell code that the term was compiled from). We evaluate the lifted Haskell value as well, because lifting may produce reducible terms. The function is polymorphic in the comparison operator so that we can use it with both HUnit Assertions and QuickCheck Properties.