From 2f21b7683dc8287fbb01a7e7537e4371b46e9638 Mon Sep 17 00:00:00 2001 From: Ana Pantilie Date: Thu, 10 Apr 2025 21:56:21 +0300 Subject: [PATCH 01/26] Fix bug in builtin decidable equality --- plutus-executables/src/AgdaUnparse.hs | 2 +- .../test/certifier/Golden/AA2-CSE.golden | 23 +++++++++++++++++++ plutus-executables/test/certifier/Spec.hs | 5 ++-- plutus-metatheory/src/Utils.lagda.md | 1 + .../src/VerifiedCompilation/Equality.lagda.md | 6 +++-- 5 files changed, 31 insertions(+), 6 deletions(-) create mode 100644 plutus-executables/test/certifier/Golden/AA2-CSE.golden diff --git a/plutus-executables/src/AgdaUnparse.hs b/plutus-executables/src/AgdaUnparse.hs index d36843045f8..a811847282e 100644 --- a/plutus-executables/src/AgdaUnparse.hs +++ b/plutus-executables/src/AgdaUnparse.hs @@ -68,7 +68,7 @@ instance AgdaUnparse Text where agdaUnparse = T.unpack instance AgdaUnparse ByteString where - agdaUnparse = show -- TODO: maybe this should be encoded some other way + agdaUnparse bs = "(mkByteString " <> show bs <> ")" instance AgdaUnparse () where agdaUnparse _ = "tt" diff --git a/plutus-executables/test/certifier/Golden/AA2-CSE.golden b/plutus-executables/test/certifier/Golden/AA2-CSE.golden new file mode 100644 index 00000000000..bfde5891aa1 --- /dev/null +++ b/plutus-executables/test/certifier/Golden/AA2-CSE.golden @@ -0,0 +1,23 @@ +(program + 1.1.0 + [ + (lam + cse-42 + [ + [ + (builtin addInteger) + [ + (lam x2-43 [ [ (builtin multiplyInteger) cse-42 ] (con integer 0) ]) + [ + [ (builtin lessThanEqualsInteger) (con integer 0) ] + (con integer 0) + ] + ] + ] + [ [ (builtin multiplyInteger) (con integer 0) ] cse-42 ] + ] + ) + [ [ (builtin divideInteger) (con integer 1) ] (con integer 0) ] + ] +) +The compilation was successfully certified. diff --git a/plutus-executables/test/certifier/Spec.hs b/plutus-executables/test/certifier/Spec.hs index 63c9fe86b8f..e40b5df5e72 100644 --- a/plutus-executables/test/certifier/Spec.hs +++ b/plutus-executables/test/certifier/Spec.hs @@ -123,9 +123,8 @@ srcTests = -- TODO: This is currently failing to certify. This will be fixed -- after the PR that covers counter example tracing. -- , "len" - -- TODO: uncomment when "Haskell ByteString != Agda String" issue is fixed - -- , "MinBS" - , "AA2-CSE" + , "MinBS" + , "AA2-CSE" ] makeExampleTests :: [ String ] -> [ TestTree ] diff --git a/plutus-metatheory/src/Utils.lagda.md b/plutus-metatheory/src/Utils.lagda.md index 566e165cfcf..588a271db89 100644 --- a/plutus-metatheory/src/Utils.lagda.md +++ b/plutus-metatheory/src/Utils.lagda.md @@ -177,6 +177,7 @@ postulate ByteString : Set postulate eqByteString : ByteString → ByteString → Bool + mkByteString : String → ByteString {-# COMPILE GHC eqByteString = (==) #-} ``` diff --git a/plutus-metatheory/src/VerifiedCompilation/Equality.lagda.md b/plutus-metatheory/src/VerifiedCompilation/Equality.lagda.md index 2d3435ecb9a..5db1a1b20da 100644 --- a/plutus-metatheory/src/VerifiedCompilation/Equality.lagda.md +++ b/plutus-metatheory/src/VerifiedCompilation/Equality.lagda.md @@ -166,8 +166,9 @@ magicBoolDec : {A : Set} → {a b : A} → Agda.Builtin.Bool.Bool → Dec (a ≡ magicBoolDec true = yes primTrustMe magicBoolDec false = no magicNeg -builtinEq : {A : Set} {{_ : HsEq A}} → Binary.Decidable {A = A} _≡_ -builtinEq x y = magicBoolDec (hsEq x y) +builtinEq : {A : Set} → Binary.Decidable {A = A} _≡_ +builtinEq {A} x y with primTrustMe {Agda.Primitive.lzero} {A} {x} {y} +... | refl = yes refl instance HsEqBytestring : HsEq U.ByteString @@ -184,6 +185,7 @@ decEq-⟦ _⊢♯.atomic AtomicTyCon.aBytestring ⟧tag = builtinEq decEq-⟦ _⊢♯.atomic AtomicTyCon.aString ⟧tag = Data.String.Properties._≟_ decEq-⟦ _⊢♯.atomic AtomicTyCon.aUnit ⟧tag = Data.Unit.Properties._≟_ decEq-⟦ _⊢♯.atomic AtomicTyCon.aBool ⟧tag = Data.Bool.Properties._≟_ +-- TODO: why does this use magicBoolDec? surely it can be implemented correctly decEq-⟦ _⊢♯.atomic AtomicTyCon.aData ⟧tag v v₁ = magicBoolDec (U.eqDATA v v₁) decEq-⟦ _⊢♯.atomic AtomicTyCon.aBls12-381-g1-element ⟧tag = builtinEq decEq-⟦ _⊢♯.atomic AtomicTyCon.aBls12-381-g2-element ⟧tag = builtinEq From 26f88a28e6d5e8c29f63dc252ffa770ec15b76da Mon Sep 17 00:00:00 2001 From: Ana Pantilie Date: Fri, 11 Apr 2025 13:12:32 +0300 Subject: [PATCH 02/26] Add issue to TODO --- plutus-metatheory/src/VerifiedCompilation/Equality.lagda.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plutus-metatheory/src/VerifiedCompilation/Equality.lagda.md b/plutus-metatheory/src/VerifiedCompilation/Equality.lagda.md index 5db1a1b20da..fd93265791f 100644 --- a/plutus-metatheory/src/VerifiedCompilation/Equality.lagda.md +++ b/plutus-metatheory/src/VerifiedCompilation/Equality.lagda.md @@ -185,7 +185,7 @@ decEq-⟦ _⊢♯.atomic AtomicTyCon.aBytestring ⟧tag = builtinEq decEq-⟦ _⊢♯.atomic AtomicTyCon.aString ⟧tag = Data.String.Properties._≟_ decEq-⟦ _⊢♯.atomic AtomicTyCon.aUnit ⟧tag = Data.Unit.Properties._≟_ decEq-⟦ _⊢♯.atomic AtomicTyCon.aBool ⟧tag = Data.Bool.Properties._≟_ --- TODO: why does this use magicBoolDec? surely it can be implemented correctly +-- TODO(https://github.com/IntersectMBO/plutus-private/issues/1528): why does this use magicBoolDec? surely it can be implemented correctly decEq-⟦ _⊢♯.atomic AtomicTyCon.aData ⟧tag v v₁ = magicBoolDec (U.eqDATA v v₁) decEq-⟦ _⊢♯.atomic AtomicTyCon.aBls12-381-g1-element ⟧tag = builtinEq decEq-⟦ _⊢♯.atomic AtomicTyCon.aBls12-381-g2-element ⟧tag = builtinEq From 7d8c94a6eb460c826c7ca1e1391a6e4ad7ecf220 Mon Sep 17 00:00:00 2001 From: Ana Pantilie Date: Fri, 11 Apr 2025 13:15:47 +0300 Subject: [PATCH 03/26] Add changelog --- ...0411_131306_ana.pantilie95_fix_certifier_builtin_deceq.rst | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 plutus-metatheory/changelog.d/20250411_131306_ana.pantilie95_fix_certifier_builtin_deceq.rst diff --git a/plutus-metatheory/changelog.d/20250411_131306_ana.pantilie95_fix_certifier_builtin_deceq.rst b/plutus-metatheory/changelog.d/20250411_131306_ana.pantilie95_fix_certifier_builtin_deceq.rst new file mode 100644 index 00000000000..4a8ec8881be --- /dev/null +++ b/plutus-metatheory/changelog.d/20250411_131306_ana.pantilie95_fix_certifier_builtin_deceq.rst @@ -0,0 +1,4 @@ +Fixed +----- + +- Deciding equality between builtins no longer gets stuck. \ No newline at end of file From 7b240843fd24f3df953091be5a7475740fdf19d5 Mon Sep 17 00:00:00 2001 From: Ana Pantilie Date: Fri, 11 Apr 2025 15:20:37 +0300 Subject: [PATCH 04/26] Move printing to executable --- plutus-executables/executables/uplc/Main.hs | 13 ++++++++++++- plutus-metatheory/src/VerifiedCompilation.lagda.md | 11 ++++------- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/plutus-executables/executables/uplc/Main.hs b/plutus-executables/executables/uplc/Main.hs index 40daaaebf2e..7c1d0bbae02 100644 --- a/plutus-executables/executables/uplc/Main.hs +++ b/plutus-executables/executables/uplc/Main.hs @@ -299,7 +299,18 @@ runCertifier (Just certName) (SimplifierTrace simplTrace) = do (Left (err :: UPLC.FreeVariableError), _) -> error $ show err (_, Left (err :: UPLC.FreeVariableError)) -> error $ show err rawAgdaTrace = reverse $ processAgdaAST <$> simplTrace - runCertifierMain rawAgdaTrace + case runCertifierMain rawAgdaTrace of + Just True -> + putStrLn "The compilation was successfully certified." + Just False -> + putStrLn + "The compilation was not successfully certified. \ + \Please open a bug report at https://www.github.com/IntersectMBO/plutus \ + \and attach the faulty certificate." + Nothing -> + putStrLn + "The certifier was unable to check the compilation. \ + \Please open a bug report at https://www.github.com/IntersectMBO/plutus." writeFile (certName ++ ".agda") (rawCertificate certName rawAgdaTrace) runCertifier Nothing _ = pure () diff --git a/plutus-metatheory/src/VerifiedCompilation.lagda.md b/plutus-metatheory/src/VerifiedCompilation.lagda.md index ec2d699d14e..0e00b21263b 100644 --- a/plutus-metatheory/src/VerifiedCompilation.lagda.md +++ b/plutus-metatheory/src/VerifiedCompilation.lagda.md @@ -189,12 +189,9 @@ passed? (just (cert (ce _ _ _ _))) = false passed? (just (cert (proof _))) = true passed? nothing = false -runCertifierMain : List (SimplifierTag × Untyped × Untyped) → IO ⊤ +runCertifierMain : List (SimplifierTag × Untyped × Untyped) → Maybe Bool runCertifierMain asts with runCertifier asts -... | just (cert (proof a)) = - putStrLn "The compilation was successfully certified." -... | just (cert (ce ¬p t b a)) = - putStrLn "The compilation was not successfully certified. Please open a bug report at https://www.github.com/IntersectMBO/plutus and attach the faulty certificate." -... | nothing = - putStrLn "The certifier was unable to check the compilation. Please open a bug report at https://www.github.com/IntersectMBO/plutus." +... | just (cert (proof a)) = just true +... | just (cert (ce ¬p t b a)) = just false +... | nothing = nothing {-# COMPILE GHC runCertifierMain as runCertifierMain #-} From da167c1cd0fff1025e0f68346a5fab2a052d2021 Mon Sep 17 00:00:00 2001 From: Ana Pantilie Date: Fri, 11 Apr 2025 16:56:53 +0300 Subject: [PATCH 05/26] Move UPLC test functions to library --- plutus-core/plutus-core.cabal | 18 +++++- .../src/UntypedPlutusCore/Simplify.hs | 2 + .../{test => testlib}/Analysis/Lib.hs | 0 .../{test => testlib}/Analysis/Spec.hs | 0 .../Analysis/evalOrder/ifThenElse.golden | 0 .../Analysis/evalOrder/letFun.golden | 0 .../Analysis/evalOrder/letImpure.golden | 0 .../{test => testlib}/DeBruijn/FlatNatWord.hs | 0 .../Golden/Default/failApply01.uplc.golden | 0 .../Golden/Default/failBody0.uplc.golden | 0 .../Golden/Default/failBody99.uplc.golden | 0 .../Golden/Default/failConst.uplc.golden | 0 .../Golden/Default/failDeep.uplc.golden | 0 .../Golden/Default/failITE.uplc.golden | 0 .../Golden/Default/failMix.uplc.golden | 0 .../Golden/Default/failTop.uplc.golden | 0 .../Golden/Default/failTop0.uplc.golden | 0 .../Golden/Default/failTop1.uplc.golden | 0 .../Golden/Default/okConst.uplc.golden | 0 .../Golden/Default/okDeep0.uplc.golden | 0 .../Golden/Default/okDeep99.uplc.golden | 0 .../DeBruijn/Golden/Default/okId0.uplc.golden | 0 .../Golden/Default/okId99.uplc.golden | 0 .../Golden/Default/okMix1.uplc.golden | 0 .../Golden/Default/okMix2.uplc.golden | 0 .../Golden/Graceful/graceConst.uplc.golden | 0 .../Golden/Graceful/graceDeep.uplc.golden | 0 .../Graceful/graceElaborate.uplc.golden | 0 .../Golden/Graceful/graceTop.uplc.golden | 0 .../{test => testlib}/DeBruijn/Scope.hs | 0 .../{test => testlib}/DeBruijn/Spec.hs | 0 .../DeBruijn/UnDeBruijnify.hs | 0 .../{test => testlib}/Evaluation/Builtins.hs | 0 .../Evaluation/Builtins/BLS12_381.hs | 0 .../Builtins/BLS12_381/TestClasses.hs | 0 .../Evaluation/Builtins/BLS12_381/Utils.hs | 0 .../Evaluation/Builtins/Bitwise/CIP0122.hs | 0 .../Evaluation/Builtins/Bitwise/CIP0123.hs | 0 .../Evaluation/Builtins/Common.hs | 0 .../Evaluation/Builtins/Conversion.hs | 0 .../Evaluation/Builtins/Costing.hs | 0 .../Evaluation/Builtins/Definition.hs | 0 .../ExpMod/exp-neg-non-inverse1.err.golden | 0 .../ExpMod/exp-neg-non-inverse2.err.golden | 0 .../Golden/Integer/ExpMod/mod-neg.err.golden | 0 .../Golden/Integer/ExpMod/mod-zero.err.golden | 0 .../divideInteger-div-by-zero.err.golden | 0 .../Integer/modInteger-div-by-zero.err.golden | 0 .../quotientInteger-div-by-zero.err.golden | 0 .../remainderInteger-div-by-zero.err.golden | 0 .../Golden/List/headList-empty.err.golden | 0 .../Golden/List/tailList-empty.err.golden | 0 .../consByteString-out-of-range.err.golden | 0 ...xByteString-out-of-bounds-empty.err.golden | 0 ...eString-out-of-bounds-non-empty.err.golden | 0 .../Evaluation/Builtins/MakeRead.hs | 0 .../Builtins/SignatureVerification.hs | 0 .../{test => testlib}/Evaluation/Debug.hs | 0 .../Evaluation/Debug/ex1.golden | 0 .../Evaluation/Debug/ex2.golden | 0 .../Evaluation/Debug/ex3.golden | 0 .../Evaluation/Debug/ex4.golden | 0 .../{test => testlib}/Evaluation/FreeVars.hs | 0 .../{test => testlib}/Evaluation/Golden.hs | 0 .../Evaluation/Golden/case1.plc.golden | 0 .../Evaluation/Golden/case1.type.golden | 0 .../Evaluation/Golden/case1.uplc.golden | 0 .../Evaluation/Golden/case2.plc.golden | 0 .../Evaluation/Golden/case2.type.golden | 0 .../Evaluation/Golden/case2.uplc.golden | 0 .../Evaluation/Golden/case3.plc.golden | 0 .../Evaluation/Golden/case3.type.golden | 0 .../Evaluation/Golden/case3.uplc.golden | 0 .../Evaluation/Golden/case4.plc.golden | 0 .../Evaluation/Golden/case4.type.golden | 0 .../Evaluation/Golden/case4.uplc.golden | 0 .../Evaluation/Golden/caseNoBranch.plc.golden | 0 .../Golden/caseNoBranch.type.golden | 0 .../Golden/caseNoBranch.uplc.golden | 0 .../Evaluation/Golden/caseNonTag.plc.golden | 0 .../Evaluation/Golden/caseNonTag.type.golden | 0 .../Evaluation/Golden/caseNonTag.uplc.golden | 0 .../Evaluation/Golden/caseProd1.plc.golden | 0 .../Evaluation/Golden/caseProd1.type.golden | 0 .../Evaluation/Golden/caseProd1.uplc.golden | 0 .../Evaluation/Golden/closure.plc.golden | 0 .../Evaluation/Golden/closure.type.golden | 0 .../Evaluation/Golden/closure.uplc.golden | 0 .../Golden/diFullyApplied.plc.golden | 0 .../Golden/diFullyApplied.type.golden | 0 .../Golden/diFullyApplied.uplc.golden | 0 .../Evaluation/Golden/even2.plc.golden | 0 .../Evaluation/Golden/even2.type.golden | 0 .../Evaluation/Golden/even2.uplc.golden | 0 .../Evaluation/Golden/even3.plc.golden | 0 .../Evaluation/Golden/even3.type.golden | 0 .../Evaluation/Golden/even3.uplc.golden | 0 .../Evaluation/Golden/evenList.plc.golden | 0 .../Evaluation/Golden/evenList.type.golden | 0 .../Evaluation/Golden/evenList.uplc.golden | 0 .../Golden/headSingletonException.type.golden | 0 .../Golden/headSingletonException.uplc.golden | 0 .../Evaluation/Golden/ite.plc.golden | 0 .../Evaluation/Golden/ite.type.golden | 0 .../Evaluation/Golden/ite.uplc.golden | 0 .../Golden/iteAtHigherKind.plc.golden | 0 .../Golden/iteAtHigherKind.type.golden | 0 .../Golden/iteAtHigherKind.uplc.golden | 0 .../iteAtHigherKindFullyApplied.plc.golden | 0 .../iteAtHigherKindFullyApplied.type.golden | 0 .../iteAtHigherKindFullyApplied.uplc.golden | 0 .../Golden/iteAtHigherKindWithCond.plc.golden | 0 .../iteAtHigherKindWithCond.type.golden | 0 .../iteAtHigherKindWithCond.uplc.golden | 0 .../Evaluation/Golden/iteAtInteger.plc.golden | 0 .../Golden/iteAtInteger.type.golden | 0 .../Golden/iteAtInteger.uplc.golden | 0 .../iteAtIntegerArrowInteger.plc.golden | 0 .../iteAtIntegerArrowInteger.type.golden | 0 .../iteAtIntegerArrowInteger.uplc.golden | 0 ...teAtIntegerArrowIntegerApplied1.plc.golden | 0 ...eAtIntegerArrowIntegerApplied1.type.golden | 0 ...eAtIntegerArrowIntegerApplied1.uplc.golden | 0 ...teAtIntegerArrowIntegerApplied2.plc.golden | 0 ...eAtIntegerArrowIntegerApplied2.type.golden | 0 ...eAtIntegerArrowIntegerApplied2.uplc.golden | 0 ...tegerArrowIntegerAppliedApplied.plc.golden | 0 ...egerArrowIntegerAppliedApplied.type.golden | 0 ...egerArrowIntegerAppliedApplied.uplc.golden | 0 ...teAtIntegerArrowIntegerWithCond.plc.golden | 0 ...eAtIntegerArrowIntegerWithCond.type.golden | 0 ...eAtIntegerArrowIntegerWithCond.uplc.golden | 0 .../Golden/iteAtIntegerAtInteger.plc.golden | 0 .../Golden/iteAtIntegerAtInteger.type.golden | 0 .../Golden/iteAtIntegerAtInteger.uplc.golden | 0 .../iteAtIntegerFullyApplied.plc.golden | 0 .../iteAtIntegerFullyApplied.type.golden | 0 .../iteAtIntegerFullyApplied.uplc.golden | 0 .../Golden/iteAtIntegerWithCond.plc.golden | 0 .../Golden/iteAtIntegerWithCond.type.golden | 0 .../Golden/iteAtIntegerWithCond.uplc.golden | 0 .../iteAtIntegerWrongCondTypeSat.plc.golden | 0 .../iteAtIntegerWrongCondTypeSat.type.golden | 0 .../iteAtIntegerWrongCondTypeSat.uplc.golden | 0 .../iteAtIntegerWrongCondTypeUnSat.plc.golden | 0 ...iteAtIntegerWrongCondTypeUnSat.type.golden | 0 ...iteAtIntegerWrongCondTypeUnSat.uplc.golden | 0 .../Evaluation/Golden/iteAtString.plc.golden | 0 .../Evaluation/Golden/iteAtString.type.golden | 0 .../Evaluation/Golden/iteAtString.uplc.golden | 0 .../Golden/iteAtStringFullyApplied.plc.golden | 0 .../iteAtStringFullyApplied.type.golden | 0 .../iteAtStringFullyApplied.uplc.golden | 0 .../Golden/iteAtStringWithCond.plc.golden | 0 .../Golden/iteAtStringWithCond.type.golden | 0 .../Golden/iteAtStringWithCond.uplc.golden | 0 ...ngWithCondWithIntegerWithString.plc.golden | 0 ...gWithCondWithIntegerWithString.type.golden | 0 ...gWithCondWithIntegerWithString.uplc.golden | 0 .../Golden/iteTypeTermType.plc.golden | 0 .../Golden/iteTypeTermType.type.golden | 0 .../Golden/iteTypeTermType.uplc.golden | 0 .../iteUninstantiatedFullyApplied.plc.golden | 0 .../iteUninstantiatedFullyApplied.type.golden | 0 .../iteUninstantiatedFullyApplied.uplc.golden | 0 .../iteUninstantiatedWithCond.plc.golden | 0 .../iteUninstantiatedWithCond.type.golden | 0 .../iteUninstantiatedWithCond.uplc.golden | 0 .../Golden/mulInstError1.plc.golden | 0 .../Golden/mulInstError1.type.golden | 0 .../Golden/mulInstError1.uplc.golden | 0 .../Golden/mulInstError2.plc.golden | 0 .../Golden/mulInstError2.type.golden | 0 .../Golden/mulInstError2.uplc.golden | 0 .../Golden/mulInstError3.plc.golden | 0 .../Golden/mulInstError3.type.golden | 0 .../Golden/mulInstError3.uplc.golden | 0 .../Evaluation/Golden/mulOK.plc.golden | 0 .../Evaluation/Golden/mulOK.type.golden | 0 .../Evaluation/Golden/mulOK.uplc.golden | 0 .../Evaluation/Golden/polyError.plc.golden | 0 .../Evaluation/Golden/polyError.type.golden | 0 .../Evaluation/Golden/polyError.uplc.golden | 0 .../Golden/polyErrorInst.plc.golden | 0 .../Golden/polyErrorInst.type.golden | 0 .../Golden/polyErrorInst.uplc.golden | 0 .../Evaluation/Golden/tag1.plc.golden | 0 .../Evaluation/Golden/tag1.type.golden | 0 .../Evaluation/Golden/tag1.uplc.golden | 0 .../Evaluation/Golden/tag2.plc.golden | 0 .../Evaluation/Golden/tag2.type.golden | 0 .../Evaluation/Golden/tag2.uplc.golden | 0 .../Evaluation/Golden/tagProd1.plc.golden | 0 .../Evaluation/Golden/tagProd1.type.golden | 0 .../Evaluation/Golden/tagProd1.uplc.golden | 0 .../{test => testlib}/Evaluation/Helpers.hs | 0 .../{test => testlib}/Evaluation/Machines.hs | 0 .../Machines/Budget/Fib/1.uplc.golden | 0 .../Machines/Budget/Fib/2.uplc.golden | 0 .../Machines/Budget/Fib/3.uplc.golden | 0 .../Machines/Budget/IdNat/0.uplc.golden | 0 .../Machines/Budget/IdNat/3.uplc.golden | 0 .../Machines/Budget/IdNat/6.uplc.golden | 0 .../Machines/Budget/IdNat/9.uplc.golden | 0 .../Machines/Budget/IfThenElse/0.uplc.golden | 0 .../Machines/Budget/IfThenElse/1.uplc.golden | 0 .../Machines/Budget/IfThenElse/2.uplc.golden | 0 .../Machines/Budget/IfThenElse/3.uplc.golden | 0 .../Machines/Budget/IfThenElse/4.uplc.golden | 0 .../Machines/Budget/IfThenElse/5.uplc.golden | 0 .../Machines/NumberOfStepCounters.golden | 0 .../Machines/Tallying/Fib/1.uplc.golden | 0 .../Machines/Tallying/Fib/2.uplc.golden | 0 .../Machines/Tallying/Fib/3.uplc.golden | 0 .../Evaluation/Regressions.hs | 0 .../{test => testlib}/Flat/Spec.hs | 0 .../{test => testlib}/Generators.hs | 0 .../{test => testlib}/Scoping/Spec.hs | 0 .../Transform/CaseOfCase/1.uplc.golden | 0 .../Transform/CaseOfCase/2.uplc.golden | 0 .../Transform/CaseOfCase/3.uplc.golden | 0 .../Transform/CaseOfCase/Test.hs | 0 .../CaseOfCase/withError.uplc.golden | 0 .../{test => testlib}/Transform/Simplify.hs | 64 ++++++++++--------- .../Transform/Simplify/Lib.hs | 18 +++++- .../Transform/basic.uplc.golden | 0 .../Transform/basicInline.uplc.golden | 0 .../Transform/callsiteInline.uplc.golden | 0 .../Transform/cse1.uplc.golden | 0 .../Transform/cse2.uplc.golden | 0 .../Transform/cse3.uplc.golden | 0 .../Transform/cseExpensive.uplc.golden | 0 .../Transform/extraDelays.uplc.golden | 0 .../Transform/floatDelay1.uplc.golden | 0 .../Transform/floatDelay2.uplc.golden | 0 .../Transform/floatDelay3.uplc.golden | 0 .../Transform/forceDelayComplex.uplc.golden | 0 .../forceDelayMultiApply.uplc.golden | 0 .../forceDelayMultiForce.uplc.golden | 0 .../Transform/forceDelayNoApps.uplc.golden | 0 .../forceDelayNoAppsLayered.uplc.golden | 0 .../Transform/forceDelaySimple.uplc.golden | 0 .../Transform/inlineImpure1.uplc.golden | 0 .../Transform/inlineImpure2.uplc.golden | 0 .../Transform/inlineImpure3.uplc.golden | 0 .../Transform/inlineImpure4.uplc.golden | 0 .../Transform/inlinePure1.uplc.golden | 0 .../Transform/inlinePure2.uplc.golden | 0 .../Transform/inlinePure3.uplc.golden | 0 .../Transform/inlinePure4.uplc.golden | 0 .../Transform/interveningLambda.uplc.golden | 0 .../Transform/multiApp.uplc.golden | 0 .../Transform/nested.uplc.golden | 0 253 files changed, 69 insertions(+), 33 deletions(-) rename plutus-core/untyped-plutus-core/{test => testlib}/Analysis/Lib.hs (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Analysis/Spec.hs (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Analysis/evalOrder/ifThenElse.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Analysis/evalOrder/letFun.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Analysis/evalOrder/letImpure.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/DeBruijn/FlatNatWord.hs (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/DeBruijn/Golden/Default/failApply01.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/DeBruijn/Golden/Default/failBody0.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/DeBruijn/Golden/Default/failBody99.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/DeBruijn/Golden/Default/failConst.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/DeBruijn/Golden/Default/failDeep.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/DeBruijn/Golden/Default/failITE.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/DeBruijn/Golden/Default/failMix.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/DeBruijn/Golden/Default/failTop.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/DeBruijn/Golden/Default/failTop0.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/DeBruijn/Golden/Default/failTop1.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/DeBruijn/Golden/Default/okConst.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/DeBruijn/Golden/Default/okDeep0.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/DeBruijn/Golden/Default/okDeep99.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/DeBruijn/Golden/Default/okId0.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/DeBruijn/Golden/Default/okId99.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/DeBruijn/Golden/Default/okMix1.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/DeBruijn/Golden/Default/okMix2.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/DeBruijn/Golden/Graceful/graceConst.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/DeBruijn/Golden/Graceful/graceDeep.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/DeBruijn/Golden/Graceful/graceElaborate.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/DeBruijn/Golden/Graceful/graceTop.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/DeBruijn/Scope.hs (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/DeBruijn/Spec.hs (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/DeBruijn/UnDeBruijnify.hs (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Builtins.hs (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Builtins/BLS12_381.hs (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Builtins/BLS12_381/TestClasses.hs (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Builtins/BLS12_381/Utils.hs (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Builtins/Bitwise/CIP0122.hs (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Builtins/Bitwise/CIP0123.hs (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Builtins/Common.hs (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Builtins/Conversion.hs (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Builtins/Costing.hs (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Builtins/Definition.hs (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Builtins/Golden/Integer/ExpMod/exp-neg-non-inverse1.err.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Builtins/Golden/Integer/ExpMod/exp-neg-non-inverse2.err.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Builtins/Golden/Integer/ExpMod/mod-neg.err.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Builtins/Golden/Integer/ExpMod/mod-zero.err.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Builtins/Golden/Integer/divideInteger-div-by-zero.err.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Builtins/Golden/Integer/modInteger-div-by-zero.err.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Builtins/Golden/Integer/quotientInteger-div-by-zero.err.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Builtins/Golden/Integer/remainderInteger-div-by-zero.err.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Builtins/Golden/List/headList-empty.err.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Builtins/Golden/List/tailList-empty.err.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Builtins/Golden/String/consByteString-out-of-range.err.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Builtins/Golden/String/indexByteString-out-of-bounds-empty.err.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Builtins/Golden/String/indexByteString-out-of-bounds-non-empty.err.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Builtins/MakeRead.hs (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Builtins/SignatureVerification.hs (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Debug.hs (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Debug/ex1.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Debug/ex2.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Debug/ex3.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Debug/ex4.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/FreeVars.hs (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden.hs (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/case1.plc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/case1.type.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/case1.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/case2.plc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/case2.type.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/case2.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/case3.plc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/case3.type.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/case3.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/case4.plc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/case4.type.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/case4.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/caseNoBranch.plc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/caseNoBranch.type.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/caseNoBranch.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/caseNonTag.plc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/caseNonTag.type.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/caseNonTag.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/caseProd1.plc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/caseProd1.type.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/caseProd1.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/closure.plc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/closure.type.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/closure.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/diFullyApplied.plc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/diFullyApplied.type.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/diFullyApplied.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/even2.plc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/even2.type.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/even2.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/even3.plc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/even3.type.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/even3.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/evenList.plc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/evenList.type.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/evenList.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/headSingletonException.type.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/headSingletonException.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/ite.plc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/ite.type.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/ite.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtHigherKind.plc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtHigherKind.type.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtHigherKind.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtHigherKindFullyApplied.plc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtHigherKindFullyApplied.type.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtHigherKindFullyApplied.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtHigherKindWithCond.plc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtHigherKindWithCond.type.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtHigherKindWithCond.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtInteger.plc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtInteger.type.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtInteger.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtIntegerArrowInteger.plc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtIntegerArrowInteger.type.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtIntegerArrowInteger.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtIntegerArrowIntegerApplied1.plc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtIntegerArrowIntegerApplied1.type.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtIntegerArrowIntegerApplied1.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtIntegerArrowIntegerApplied2.plc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtIntegerArrowIntegerApplied2.type.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtIntegerArrowIntegerApplied2.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtIntegerArrowIntegerAppliedApplied.plc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtIntegerArrowIntegerAppliedApplied.type.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtIntegerArrowIntegerAppliedApplied.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtIntegerArrowIntegerWithCond.plc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtIntegerArrowIntegerWithCond.type.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtIntegerArrowIntegerWithCond.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtIntegerAtInteger.plc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtIntegerAtInteger.type.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtIntegerAtInteger.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtIntegerFullyApplied.plc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtIntegerFullyApplied.type.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtIntegerFullyApplied.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtIntegerWithCond.plc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtIntegerWithCond.type.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtIntegerWithCond.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtIntegerWrongCondTypeSat.plc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtIntegerWrongCondTypeSat.type.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtIntegerWrongCondTypeSat.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtIntegerWrongCondTypeUnSat.plc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtIntegerWrongCondTypeUnSat.type.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtIntegerWrongCondTypeUnSat.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtString.plc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtString.type.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtString.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtStringFullyApplied.plc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtStringFullyApplied.type.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtStringFullyApplied.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtStringWithCond.plc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtStringWithCond.type.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtStringWithCond.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtStringWithCondWithIntegerWithString.plc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtStringWithCondWithIntegerWithString.type.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteAtStringWithCondWithIntegerWithString.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteTypeTermType.plc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteTypeTermType.type.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteTypeTermType.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteUninstantiatedFullyApplied.plc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteUninstantiatedFullyApplied.type.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteUninstantiatedFullyApplied.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteUninstantiatedWithCond.plc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteUninstantiatedWithCond.type.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/iteUninstantiatedWithCond.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/mulInstError1.plc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/mulInstError1.type.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/mulInstError1.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/mulInstError2.plc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/mulInstError2.type.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/mulInstError2.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/mulInstError3.plc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/mulInstError3.type.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/mulInstError3.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/mulOK.plc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/mulOK.type.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/mulOK.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/polyError.plc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/polyError.type.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/polyError.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/polyErrorInst.plc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/polyErrorInst.type.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/polyErrorInst.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/tag1.plc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/tag1.type.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/tag1.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/tag2.plc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/tag2.type.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/tag2.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/tagProd1.plc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/tagProd1.type.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Golden/tagProd1.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Helpers.hs (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Machines.hs (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Machines/Budget/Fib/1.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Machines/Budget/Fib/2.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Machines/Budget/Fib/3.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Machines/Budget/IdNat/0.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Machines/Budget/IdNat/3.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Machines/Budget/IdNat/6.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Machines/Budget/IdNat/9.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Machines/Budget/IfThenElse/0.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Machines/Budget/IfThenElse/1.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Machines/Budget/IfThenElse/2.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Machines/Budget/IfThenElse/3.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Machines/Budget/IfThenElse/4.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Machines/Budget/IfThenElse/5.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Machines/NumberOfStepCounters.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Machines/Tallying/Fib/1.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Machines/Tallying/Fib/2.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Machines/Tallying/Fib/3.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Evaluation/Regressions.hs (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Flat/Spec.hs (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Generators.hs (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Scoping/Spec.hs (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Transform/CaseOfCase/1.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Transform/CaseOfCase/2.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Transform/CaseOfCase/3.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Transform/CaseOfCase/Test.hs (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Transform/CaseOfCase/withError.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Transform/Simplify.hs (91%) rename plutus-core/untyped-plutus-core/{test => testlib}/Transform/Simplify/Lib.hs (75%) rename plutus-core/untyped-plutus-core/{test => testlib}/Transform/basic.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Transform/basicInline.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Transform/callsiteInline.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Transform/cse1.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Transform/cse2.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Transform/cse3.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Transform/cseExpensive.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Transform/extraDelays.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Transform/floatDelay1.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Transform/floatDelay2.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Transform/floatDelay3.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Transform/forceDelayComplex.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Transform/forceDelayMultiApply.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Transform/forceDelayMultiForce.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Transform/forceDelayNoApps.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Transform/forceDelayNoAppsLayered.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Transform/forceDelaySimple.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Transform/inlineImpure1.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Transform/inlineImpure2.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Transform/inlineImpure3.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Transform/inlineImpure4.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Transform/inlinePure1.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Transform/inlinePure2.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Transform/inlinePure3.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Transform/inlinePure4.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Transform/interveningLambda.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Transform/multiApp.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{test => testlib}/Transform/nested.uplc.golden (100%) diff --git a/plutus-core/plutus-core.cabal b/plutus-core/plutus-core.cabal index 16c4a42d9df..6241f82687b 100644 --- a/plutus-core/plutus-core.cabal +++ b/plutus-core/plutus-core.cabal @@ -415,7 +415,23 @@ test-suite untyped-plutus-core-test main-is: Spec.hs hs-source-dirs: untyped-plutus-core/test ghc-options: -O2 -threaded -rtsopts -with-rtsopts=-N - other-modules: + build-depends: + , base >=4.9 && <5 + , plutus-core:untyped-plutus-core-testlib + , tasty + +library untyped-plutus-core-testlib + import: lang + visibility: public + default-language: Haskell2010 + default-extensions: CPP + hs-source-dirs: untyped-plutus-core/testlib + + -- needs linux 'diff' available + if os(windows) + buildable: False + + exposed-modules: Analysis.Lib Analysis.Spec DeBruijn.FlatNatWord diff --git a/plutus-core/untyped-plutus-core/src/UntypedPlutusCore/Simplify.hs b/plutus-core/untyped-plutus-core/src/UntypedPlutusCore/Simplify.hs index a3661afed45..ec91c379c66 100644 --- a/plutus-core/untyped-plutus-core/src/UntypedPlutusCore/Simplify.hs +++ b/plutus-core/untyped-plutus-core/src/UntypedPlutusCore/Simplify.hs @@ -8,6 +8,8 @@ module UntypedPlutusCore.Simplify ( simplifyProgram, simplifyProgramWithTrace, InlineHints (..), + termSimplifier, + module UntypedPlutusCore.Transform.Simplifier, ) where import PlutusCore.Compiler.Types diff --git a/plutus-core/untyped-plutus-core/test/Analysis/Lib.hs b/plutus-core/untyped-plutus-core/testlib/Analysis/Lib.hs similarity index 100% rename from plutus-core/untyped-plutus-core/test/Analysis/Lib.hs rename to plutus-core/untyped-plutus-core/testlib/Analysis/Lib.hs diff --git a/plutus-core/untyped-plutus-core/test/Analysis/Spec.hs b/plutus-core/untyped-plutus-core/testlib/Analysis/Spec.hs similarity index 100% rename from plutus-core/untyped-plutus-core/test/Analysis/Spec.hs rename to plutus-core/untyped-plutus-core/testlib/Analysis/Spec.hs diff --git a/plutus-core/untyped-plutus-core/test/Analysis/evalOrder/ifThenElse.golden b/plutus-core/untyped-plutus-core/testlib/Analysis/evalOrder/ifThenElse.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Analysis/evalOrder/ifThenElse.golden rename to plutus-core/untyped-plutus-core/testlib/Analysis/evalOrder/ifThenElse.golden diff --git a/plutus-core/untyped-plutus-core/test/Analysis/evalOrder/letFun.golden b/plutus-core/untyped-plutus-core/testlib/Analysis/evalOrder/letFun.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Analysis/evalOrder/letFun.golden rename to plutus-core/untyped-plutus-core/testlib/Analysis/evalOrder/letFun.golden diff --git a/plutus-core/untyped-plutus-core/test/Analysis/evalOrder/letImpure.golden b/plutus-core/untyped-plutus-core/testlib/Analysis/evalOrder/letImpure.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Analysis/evalOrder/letImpure.golden rename to plutus-core/untyped-plutus-core/testlib/Analysis/evalOrder/letImpure.golden diff --git a/plutus-core/untyped-plutus-core/test/DeBruijn/FlatNatWord.hs b/plutus-core/untyped-plutus-core/testlib/DeBruijn/FlatNatWord.hs similarity index 100% rename from plutus-core/untyped-plutus-core/test/DeBruijn/FlatNatWord.hs rename to plutus-core/untyped-plutus-core/testlib/DeBruijn/FlatNatWord.hs diff --git a/plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/failApply01.uplc.golden b/plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/failApply01.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/failApply01.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/failApply01.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/failBody0.uplc.golden b/plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/failBody0.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/failBody0.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/failBody0.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/failBody99.uplc.golden b/plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/failBody99.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/failBody99.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/failBody99.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/failConst.uplc.golden b/plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/failConst.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/failConst.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/failConst.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/failDeep.uplc.golden b/plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/failDeep.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/failDeep.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/failDeep.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/failITE.uplc.golden b/plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/failITE.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/failITE.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/failITE.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/failMix.uplc.golden b/plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/failMix.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/failMix.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/failMix.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/failTop.uplc.golden b/plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/failTop.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/failTop.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/failTop.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/failTop0.uplc.golden b/plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/failTop0.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/failTop0.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/failTop0.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/failTop1.uplc.golden b/plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/failTop1.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/failTop1.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/failTop1.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/okConst.uplc.golden b/plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/okConst.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/okConst.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/okConst.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/okDeep0.uplc.golden b/plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/okDeep0.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/okDeep0.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/okDeep0.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/okDeep99.uplc.golden b/plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/okDeep99.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/okDeep99.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/okDeep99.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/okId0.uplc.golden b/plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/okId0.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/okId0.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/okId0.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/okId99.uplc.golden b/plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/okId99.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/okId99.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/okId99.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/okMix1.uplc.golden b/plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/okMix1.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/okMix1.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/okMix1.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/okMix2.uplc.golden b/plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/okMix2.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/okMix2.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/okMix2.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Graceful/graceConst.uplc.golden b/plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Graceful/graceConst.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Graceful/graceConst.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Graceful/graceConst.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Graceful/graceDeep.uplc.golden b/plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Graceful/graceDeep.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Graceful/graceDeep.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Graceful/graceDeep.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Graceful/graceElaborate.uplc.golden b/plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Graceful/graceElaborate.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Graceful/graceElaborate.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Graceful/graceElaborate.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Graceful/graceTop.uplc.golden b/plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Graceful/graceTop.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Graceful/graceTop.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Graceful/graceTop.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/DeBruijn/Scope.hs b/plutus-core/untyped-plutus-core/testlib/DeBruijn/Scope.hs similarity index 100% rename from plutus-core/untyped-plutus-core/test/DeBruijn/Scope.hs rename to plutus-core/untyped-plutus-core/testlib/DeBruijn/Scope.hs diff --git a/plutus-core/untyped-plutus-core/test/DeBruijn/Spec.hs b/plutus-core/untyped-plutus-core/testlib/DeBruijn/Spec.hs similarity index 100% rename from plutus-core/untyped-plutus-core/test/DeBruijn/Spec.hs rename to plutus-core/untyped-plutus-core/testlib/DeBruijn/Spec.hs diff --git a/plutus-core/untyped-plutus-core/test/DeBruijn/UnDeBruijnify.hs b/plutus-core/untyped-plutus-core/testlib/DeBruijn/UnDeBruijnify.hs similarity index 100% rename from plutus-core/untyped-plutus-core/test/DeBruijn/UnDeBruijnify.hs rename to plutus-core/untyped-plutus-core/testlib/DeBruijn/UnDeBruijnify.hs diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Builtins.hs b/plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins.hs similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Builtins.hs rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins.hs diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Builtins/BLS12_381.hs b/plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/BLS12_381.hs similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Builtins/BLS12_381.hs rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/BLS12_381.hs diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Builtins/BLS12_381/TestClasses.hs b/plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/BLS12_381/TestClasses.hs similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Builtins/BLS12_381/TestClasses.hs rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/BLS12_381/TestClasses.hs diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Builtins/BLS12_381/Utils.hs b/plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/BLS12_381/Utils.hs similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Builtins/BLS12_381/Utils.hs rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/BLS12_381/Utils.hs diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Bitwise/CIP0122.hs b/plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Bitwise/CIP0122.hs similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Bitwise/CIP0122.hs rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Bitwise/CIP0122.hs diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Bitwise/CIP0123.hs b/plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Bitwise/CIP0123.hs similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Bitwise/CIP0123.hs rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Bitwise/CIP0123.hs diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Common.hs b/plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Common.hs similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Common.hs rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Common.hs diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Conversion.hs b/plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Conversion.hs similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Conversion.hs rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Conversion.hs diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Costing.hs b/plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Costing.hs similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Costing.hs rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Costing.hs diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Definition.hs b/plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Definition.hs similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Definition.hs rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Definition.hs diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/Integer/ExpMod/exp-neg-non-inverse1.err.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/Integer/ExpMod/exp-neg-non-inverse1.err.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/Integer/ExpMod/exp-neg-non-inverse1.err.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/Integer/ExpMod/exp-neg-non-inverse1.err.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/Integer/ExpMod/exp-neg-non-inverse2.err.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/Integer/ExpMod/exp-neg-non-inverse2.err.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/Integer/ExpMod/exp-neg-non-inverse2.err.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/Integer/ExpMod/exp-neg-non-inverse2.err.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/Integer/ExpMod/mod-neg.err.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/Integer/ExpMod/mod-neg.err.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/Integer/ExpMod/mod-neg.err.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/Integer/ExpMod/mod-neg.err.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/Integer/ExpMod/mod-zero.err.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/Integer/ExpMod/mod-zero.err.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/Integer/ExpMod/mod-zero.err.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/Integer/ExpMod/mod-zero.err.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/Integer/divideInteger-div-by-zero.err.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/Integer/divideInteger-div-by-zero.err.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/Integer/divideInteger-div-by-zero.err.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/Integer/divideInteger-div-by-zero.err.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/Integer/modInteger-div-by-zero.err.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/Integer/modInteger-div-by-zero.err.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/Integer/modInteger-div-by-zero.err.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/Integer/modInteger-div-by-zero.err.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/Integer/quotientInteger-div-by-zero.err.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/Integer/quotientInteger-div-by-zero.err.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/Integer/quotientInteger-div-by-zero.err.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/Integer/quotientInteger-div-by-zero.err.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/Integer/remainderInteger-div-by-zero.err.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/Integer/remainderInteger-div-by-zero.err.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/Integer/remainderInteger-div-by-zero.err.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/Integer/remainderInteger-div-by-zero.err.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/List/headList-empty.err.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/List/headList-empty.err.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/List/headList-empty.err.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/List/headList-empty.err.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/List/tailList-empty.err.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/List/tailList-empty.err.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/List/tailList-empty.err.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/List/tailList-empty.err.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/String/consByteString-out-of-range.err.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/String/consByteString-out-of-range.err.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/String/consByteString-out-of-range.err.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/String/consByteString-out-of-range.err.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/String/indexByteString-out-of-bounds-empty.err.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/String/indexByteString-out-of-bounds-empty.err.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/String/indexByteString-out-of-bounds-empty.err.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/String/indexByteString-out-of-bounds-empty.err.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/String/indexByteString-out-of-bounds-non-empty.err.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/String/indexByteString-out-of-bounds-non-empty.err.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/String/indexByteString-out-of-bounds-non-empty.err.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/String/indexByteString-out-of-bounds-non-empty.err.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Builtins/MakeRead.hs b/plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/MakeRead.hs similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Builtins/MakeRead.hs rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/MakeRead.hs diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Builtins/SignatureVerification.hs b/plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/SignatureVerification.hs similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Builtins/SignatureVerification.hs rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/SignatureVerification.hs diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Debug.hs b/plutus-core/untyped-plutus-core/testlib/Evaluation/Debug.hs similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Debug.hs rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Debug.hs diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Debug/ex1.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Debug/ex1.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Debug/ex1.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Debug/ex1.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Debug/ex2.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Debug/ex2.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Debug/ex2.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Debug/ex2.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Debug/ex3.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Debug/ex3.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Debug/ex3.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Debug/ex3.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Debug/ex4.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Debug/ex4.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Debug/ex4.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Debug/ex4.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/FreeVars.hs b/plutus-core/untyped-plutus-core/testlib/Evaluation/FreeVars.hs similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/FreeVars.hs rename to plutus-core/untyped-plutus-core/testlib/Evaluation/FreeVars.hs diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden.hs b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden.hs similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden.hs rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden.hs diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/case1.plc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/case1.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/case1.plc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/case1.plc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/case1.type.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/case1.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/case1.type.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/case1.type.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/case1.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/case1.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/case1.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/case1.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/case2.plc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/case2.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/case2.plc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/case2.plc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/case2.type.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/case2.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/case2.type.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/case2.type.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/case2.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/case2.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/case2.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/case2.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/case3.plc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/case3.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/case3.plc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/case3.plc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/case3.type.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/case3.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/case3.type.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/case3.type.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/case3.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/case3.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/case3.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/case3.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/case4.plc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/case4.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/case4.plc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/case4.plc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/case4.type.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/case4.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/case4.type.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/case4.type.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/case4.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/case4.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/case4.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/case4.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/caseNoBranch.plc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/caseNoBranch.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/caseNoBranch.plc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/caseNoBranch.plc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/caseNoBranch.type.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/caseNoBranch.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/caseNoBranch.type.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/caseNoBranch.type.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/caseNoBranch.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/caseNoBranch.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/caseNoBranch.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/caseNoBranch.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/caseNonTag.plc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/caseNonTag.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/caseNonTag.plc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/caseNonTag.plc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/caseNonTag.type.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/caseNonTag.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/caseNonTag.type.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/caseNonTag.type.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/caseNonTag.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/caseNonTag.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/caseNonTag.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/caseNonTag.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/caseProd1.plc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/caseProd1.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/caseProd1.plc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/caseProd1.plc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/caseProd1.type.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/caseProd1.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/caseProd1.type.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/caseProd1.type.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/caseProd1.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/caseProd1.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/caseProd1.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/caseProd1.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/closure.plc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/closure.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/closure.plc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/closure.plc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/closure.type.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/closure.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/closure.type.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/closure.type.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/closure.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/closure.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/closure.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/closure.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/diFullyApplied.plc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/diFullyApplied.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/diFullyApplied.plc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/diFullyApplied.plc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/diFullyApplied.type.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/diFullyApplied.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/diFullyApplied.type.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/diFullyApplied.type.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/diFullyApplied.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/diFullyApplied.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/diFullyApplied.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/diFullyApplied.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/even2.plc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/even2.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/even2.plc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/even2.plc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/even2.type.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/even2.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/even2.type.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/even2.type.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/even2.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/even2.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/even2.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/even2.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/even3.plc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/even3.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/even3.plc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/even3.plc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/even3.type.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/even3.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/even3.type.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/even3.type.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/even3.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/even3.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/even3.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/even3.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/evenList.plc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/evenList.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/evenList.plc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/evenList.plc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/evenList.type.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/evenList.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/evenList.type.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/evenList.type.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/evenList.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/evenList.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/evenList.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/evenList.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/headSingletonException.type.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/headSingletonException.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/headSingletonException.type.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/headSingletonException.type.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/headSingletonException.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/headSingletonException.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/headSingletonException.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/headSingletonException.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/ite.plc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/ite.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/ite.plc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/ite.plc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/ite.type.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/ite.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/ite.type.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/ite.type.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/ite.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/ite.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/ite.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/ite.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtHigherKind.plc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtHigherKind.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtHigherKind.plc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtHigherKind.plc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtHigherKind.type.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtHigherKind.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtHigherKind.type.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtHigherKind.type.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtHigherKind.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtHigherKind.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtHigherKind.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtHigherKind.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtHigherKindFullyApplied.plc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtHigherKindFullyApplied.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtHigherKindFullyApplied.plc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtHigherKindFullyApplied.plc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtHigherKindFullyApplied.type.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtHigherKindFullyApplied.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtHigherKindFullyApplied.type.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtHigherKindFullyApplied.type.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtHigherKindFullyApplied.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtHigherKindFullyApplied.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtHigherKindFullyApplied.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtHigherKindFullyApplied.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtHigherKindWithCond.plc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtHigherKindWithCond.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtHigherKindWithCond.plc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtHigherKindWithCond.plc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtHigherKindWithCond.type.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtHigherKindWithCond.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtHigherKindWithCond.type.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtHigherKindWithCond.type.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtHigherKindWithCond.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtHigherKindWithCond.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtHigherKindWithCond.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtHigherKindWithCond.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtInteger.plc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtInteger.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtInteger.plc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtInteger.plc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtInteger.type.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtInteger.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtInteger.type.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtInteger.type.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtInteger.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtInteger.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtInteger.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtInteger.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowInteger.plc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowInteger.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowInteger.plc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowInteger.plc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowInteger.type.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowInteger.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowInteger.type.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowInteger.type.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowInteger.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowInteger.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowInteger.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowInteger.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowIntegerApplied1.plc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowIntegerApplied1.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowIntegerApplied1.plc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowIntegerApplied1.plc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowIntegerApplied1.type.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowIntegerApplied1.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowIntegerApplied1.type.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowIntegerApplied1.type.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowIntegerApplied1.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowIntegerApplied1.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowIntegerApplied1.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowIntegerApplied1.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowIntegerApplied2.plc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowIntegerApplied2.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowIntegerApplied2.plc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowIntegerApplied2.plc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowIntegerApplied2.type.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowIntegerApplied2.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowIntegerApplied2.type.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowIntegerApplied2.type.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowIntegerApplied2.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowIntegerApplied2.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowIntegerApplied2.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowIntegerApplied2.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowIntegerAppliedApplied.plc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowIntegerAppliedApplied.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowIntegerAppliedApplied.plc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowIntegerAppliedApplied.plc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowIntegerAppliedApplied.type.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowIntegerAppliedApplied.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowIntegerAppliedApplied.type.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowIntegerAppliedApplied.type.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowIntegerAppliedApplied.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowIntegerAppliedApplied.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowIntegerAppliedApplied.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowIntegerAppliedApplied.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowIntegerWithCond.plc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowIntegerWithCond.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowIntegerWithCond.plc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowIntegerWithCond.plc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowIntegerWithCond.type.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowIntegerWithCond.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowIntegerWithCond.type.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowIntegerWithCond.type.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowIntegerWithCond.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowIntegerWithCond.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowIntegerWithCond.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowIntegerWithCond.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerAtInteger.plc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerAtInteger.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerAtInteger.plc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerAtInteger.plc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerAtInteger.type.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerAtInteger.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerAtInteger.type.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerAtInteger.type.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerAtInteger.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerAtInteger.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerAtInteger.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerAtInteger.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerFullyApplied.plc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerFullyApplied.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerFullyApplied.plc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerFullyApplied.plc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerFullyApplied.type.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerFullyApplied.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerFullyApplied.type.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerFullyApplied.type.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerFullyApplied.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerFullyApplied.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerFullyApplied.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerFullyApplied.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerWithCond.plc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerWithCond.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerWithCond.plc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerWithCond.plc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerWithCond.type.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerWithCond.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerWithCond.type.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerWithCond.type.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerWithCond.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerWithCond.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerWithCond.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerWithCond.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerWrongCondTypeSat.plc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerWrongCondTypeSat.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerWrongCondTypeSat.plc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerWrongCondTypeSat.plc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerWrongCondTypeSat.type.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerWrongCondTypeSat.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerWrongCondTypeSat.type.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerWrongCondTypeSat.type.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerWrongCondTypeSat.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerWrongCondTypeSat.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerWrongCondTypeSat.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerWrongCondTypeSat.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerWrongCondTypeUnSat.plc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerWrongCondTypeUnSat.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerWrongCondTypeUnSat.plc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerWrongCondTypeUnSat.plc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerWrongCondTypeUnSat.type.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerWrongCondTypeUnSat.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerWrongCondTypeUnSat.type.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerWrongCondTypeUnSat.type.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerWrongCondTypeUnSat.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerWrongCondTypeUnSat.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerWrongCondTypeUnSat.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerWrongCondTypeUnSat.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtString.plc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtString.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtString.plc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtString.plc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtString.type.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtString.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtString.type.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtString.type.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtString.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtString.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtString.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtString.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtStringFullyApplied.plc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtStringFullyApplied.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtStringFullyApplied.plc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtStringFullyApplied.plc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtStringFullyApplied.type.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtStringFullyApplied.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtStringFullyApplied.type.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtStringFullyApplied.type.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtStringFullyApplied.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtStringFullyApplied.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtStringFullyApplied.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtStringFullyApplied.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtStringWithCond.plc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtStringWithCond.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtStringWithCond.plc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtStringWithCond.plc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtStringWithCond.type.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtStringWithCond.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtStringWithCond.type.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtStringWithCond.type.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtStringWithCond.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtStringWithCond.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtStringWithCond.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtStringWithCond.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtStringWithCondWithIntegerWithString.plc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtStringWithCondWithIntegerWithString.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtStringWithCondWithIntegerWithString.plc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtStringWithCondWithIntegerWithString.plc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtStringWithCondWithIntegerWithString.type.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtStringWithCondWithIntegerWithString.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtStringWithCondWithIntegerWithString.type.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtStringWithCondWithIntegerWithString.type.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtStringWithCondWithIntegerWithString.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtStringWithCondWithIntegerWithString.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtStringWithCondWithIntegerWithString.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtStringWithCondWithIntegerWithString.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteTypeTermType.plc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteTypeTermType.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteTypeTermType.plc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteTypeTermType.plc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteTypeTermType.type.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteTypeTermType.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteTypeTermType.type.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteTypeTermType.type.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteTypeTermType.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteTypeTermType.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteTypeTermType.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteTypeTermType.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteUninstantiatedFullyApplied.plc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteUninstantiatedFullyApplied.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteUninstantiatedFullyApplied.plc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteUninstantiatedFullyApplied.plc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteUninstantiatedFullyApplied.type.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteUninstantiatedFullyApplied.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteUninstantiatedFullyApplied.type.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteUninstantiatedFullyApplied.type.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteUninstantiatedFullyApplied.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteUninstantiatedFullyApplied.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteUninstantiatedFullyApplied.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteUninstantiatedFullyApplied.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteUninstantiatedWithCond.plc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteUninstantiatedWithCond.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteUninstantiatedWithCond.plc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteUninstantiatedWithCond.plc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteUninstantiatedWithCond.type.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteUninstantiatedWithCond.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteUninstantiatedWithCond.type.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteUninstantiatedWithCond.type.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteUninstantiatedWithCond.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteUninstantiatedWithCond.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteUninstantiatedWithCond.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteUninstantiatedWithCond.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/mulInstError1.plc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/mulInstError1.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/mulInstError1.plc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/mulInstError1.plc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/mulInstError1.type.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/mulInstError1.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/mulInstError1.type.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/mulInstError1.type.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/mulInstError1.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/mulInstError1.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/mulInstError1.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/mulInstError1.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/mulInstError2.plc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/mulInstError2.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/mulInstError2.plc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/mulInstError2.plc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/mulInstError2.type.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/mulInstError2.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/mulInstError2.type.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/mulInstError2.type.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/mulInstError2.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/mulInstError2.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/mulInstError2.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/mulInstError2.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/mulInstError3.plc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/mulInstError3.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/mulInstError3.plc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/mulInstError3.plc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/mulInstError3.type.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/mulInstError3.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/mulInstError3.type.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/mulInstError3.type.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/mulInstError3.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/mulInstError3.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/mulInstError3.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/mulInstError3.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/mulOK.plc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/mulOK.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/mulOK.plc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/mulOK.plc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/mulOK.type.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/mulOK.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/mulOK.type.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/mulOK.type.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/mulOK.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/mulOK.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/mulOK.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/mulOK.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/polyError.plc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/polyError.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/polyError.plc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/polyError.plc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/polyError.type.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/polyError.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/polyError.type.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/polyError.type.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/polyError.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/polyError.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/polyError.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/polyError.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/polyErrorInst.plc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/polyErrorInst.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/polyErrorInst.plc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/polyErrorInst.plc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/polyErrorInst.type.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/polyErrorInst.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/polyErrorInst.type.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/polyErrorInst.type.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/polyErrorInst.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/polyErrorInst.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/polyErrorInst.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/polyErrorInst.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/tag1.plc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/tag1.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/tag1.plc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/tag1.plc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/tag1.type.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/tag1.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/tag1.type.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/tag1.type.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/tag1.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/tag1.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/tag1.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/tag1.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/tag2.plc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/tag2.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/tag2.plc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/tag2.plc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/tag2.type.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/tag2.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/tag2.type.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/tag2.type.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/tag2.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/tag2.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/tag2.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/tag2.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/tagProd1.plc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/tagProd1.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/tagProd1.plc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/tagProd1.plc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/tagProd1.type.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/tagProd1.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/tagProd1.type.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/tagProd1.type.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Golden/tagProd1.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/tagProd1.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Golden/tagProd1.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/tagProd1.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Helpers.hs b/plutus-core/untyped-plutus-core/testlib/Evaluation/Helpers.hs similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Helpers.hs rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Helpers.hs diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Machines.hs b/plutus-core/untyped-plutus-core/testlib/Evaluation/Machines.hs similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Machines.hs rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Machines.hs diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/Fib/1.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/Fib/1.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/Fib/1.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/Fib/1.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/Fib/2.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/Fib/2.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/Fib/2.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/Fib/2.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/Fib/3.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/Fib/3.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/Fib/3.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/Fib/3.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/IdNat/0.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/IdNat/0.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/IdNat/0.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/IdNat/0.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/IdNat/3.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/IdNat/3.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/IdNat/3.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/IdNat/3.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/IdNat/6.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/IdNat/6.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/IdNat/6.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/IdNat/6.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/IdNat/9.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/IdNat/9.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/IdNat/9.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/IdNat/9.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/IfThenElse/0.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/IfThenElse/0.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/IfThenElse/0.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/IfThenElse/0.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/IfThenElse/1.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/IfThenElse/1.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/IfThenElse/1.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/IfThenElse/1.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/IfThenElse/2.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/IfThenElse/2.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/IfThenElse/2.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/IfThenElse/2.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/IfThenElse/3.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/IfThenElse/3.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/IfThenElse/3.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/IfThenElse/3.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/IfThenElse/4.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/IfThenElse/4.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/IfThenElse/4.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/IfThenElse/4.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/IfThenElse/5.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/IfThenElse/5.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/IfThenElse/5.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/IfThenElse/5.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Machines/NumberOfStepCounters.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/NumberOfStepCounters.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Machines/NumberOfStepCounters.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/NumberOfStepCounters.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Machines/Tallying/Fib/1.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Tallying/Fib/1.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Machines/Tallying/Fib/1.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Tallying/Fib/1.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Machines/Tallying/Fib/2.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Tallying/Fib/2.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Machines/Tallying/Fib/2.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Tallying/Fib/2.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Machines/Tallying/Fib/3.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Tallying/Fib/3.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Machines/Tallying/Fib/3.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Tallying/Fib/3.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Evaluation/Regressions.hs b/plutus-core/untyped-plutus-core/testlib/Evaluation/Regressions.hs similarity index 100% rename from plutus-core/untyped-plutus-core/test/Evaluation/Regressions.hs rename to plutus-core/untyped-plutus-core/testlib/Evaluation/Regressions.hs diff --git a/plutus-core/untyped-plutus-core/test/Flat/Spec.hs b/plutus-core/untyped-plutus-core/testlib/Flat/Spec.hs similarity index 100% rename from plutus-core/untyped-plutus-core/test/Flat/Spec.hs rename to plutus-core/untyped-plutus-core/testlib/Flat/Spec.hs diff --git a/plutus-core/untyped-plutus-core/test/Generators.hs b/plutus-core/untyped-plutus-core/testlib/Generators.hs similarity index 100% rename from plutus-core/untyped-plutus-core/test/Generators.hs rename to plutus-core/untyped-plutus-core/testlib/Generators.hs diff --git a/plutus-core/untyped-plutus-core/test/Scoping/Spec.hs b/plutus-core/untyped-plutus-core/testlib/Scoping/Spec.hs similarity index 100% rename from plutus-core/untyped-plutus-core/test/Scoping/Spec.hs rename to plutus-core/untyped-plutus-core/testlib/Scoping/Spec.hs diff --git a/plutus-core/untyped-plutus-core/test/Transform/CaseOfCase/1.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Transform/CaseOfCase/1.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Transform/CaseOfCase/1.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Transform/CaseOfCase/1.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Transform/CaseOfCase/2.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Transform/CaseOfCase/2.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Transform/CaseOfCase/2.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Transform/CaseOfCase/2.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Transform/CaseOfCase/3.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Transform/CaseOfCase/3.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Transform/CaseOfCase/3.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Transform/CaseOfCase/3.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Transform/CaseOfCase/Test.hs b/plutus-core/untyped-plutus-core/testlib/Transform/CaseOfCase/Test.hs similarity index 100% rename from plutus-core/untyped-plutus-core/test/Transform/CaseOfCase/Test.hs rename to plutus-core/untyped-plutus-core/testlib/Transform/CaseOfCase/Test.hs diff --git a/plutus-core/untyped-plutus-core/test/Transform/CaseOfCase/withError.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Transform/CaseOfCase/withError.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Transform/CaseOfCase/withError.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Transform/CaseOfCase/withError.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Transform/Simplify.hs b/plutus-core/untyped-plutus-core/testlib/Transform/Simplify.hs similarity index 91% rename from plutus-core/untyped-plutus-core/test/Transform/Simplify.hs rename to plutus-core/untyped-plutus-core/testlib/Transform/Simplify.hs index e5b2e770e10..d9b867e6ca4 100644 --- a/plutus-core/untyped-plutus-core/test/Transform/Simplify.hs +++ b/plutus-core/untyped-plutus-core/testlib/Transform/Simplify.hs @@ -453,36 +453,42 @@ cseExpensive = plus arg arg' arg = mkArg [0 .. 200] arg' = mkArg [0 .. 200] +testSimplifyInputs :: [(String, Term Name PLC.DefaultUni PLC.DefaultFun ())] +testSimplifyInputs = + [ ("basic", basic) + , ("nested", nested) + , ("extraDelays", extraDelays) + , ("floatDelay1", floatDelay1) + , ("floatDelay2", floatDelay2) + , ("floatDelay3", floatDelay3) + , ("interveningLambda", interveningLambda) + , ("basicInline", basicInline) + , ("callsiteInline", callsiteInline) + , ("inlinePure1", inlinePure1) + , ("inlinePure2", inlinePure2) + , ("inlinePure3", inlinePure3) + , ("inlinePure4", inlinePure4) + , ("inlineImpure1", inlineImpure1) + , ("inlineImpure2", inlineImpure2) + , ("inlineImpure3", inlineImpure3) + , ("inlineImpure4", inlineImpure4) + , ("multiApp", multiApp) + , ("forceDelayNoApps", forceDelayNoApps) + , ("forceDelayNoAppsLayered", forceDelayNoAppsLayered) + , ("forceDelaySimple", forceDelaySimple) + , ("forceDelayMultiApply", forceDelayMultiApply) + , ("forceDelayMultiForce", forceDelayMultiForce) + , ("forceDelayComplex", forceDelayComplex) + ] + test_simplify :: TestTree test_simplify = testGroup "simplify" - [ goldenVsSimplified "basic" basic - , goldenVsSimplified "nested" nested - , goldenVsSimplified "extraDelays" extraDelays - , goldenVsSimplified "floatDelay1" floatDelay1 - , goldenVsSimplified "floatDelay2" floatDelay2 - , goldenVsSimplified "floatDelay3" floatDelay3 - , goldenVsSimplified "interveningLambda" interveningLambda - , goldenVsSimplified "basicInline" basicInline - , goldenVsSimplified "callsiteInline" callsiteInline - , goldenVsSimplified "inlinePure1" inlinePure1 - , goldenVsSimplified "inlinePure2" inlinePure2 - , goldenVsSimplified "inlinePure3" inlinePure3 - , goldenVsSimplified "inlinePure4" inlinePure4 - , goldenVsSimplified "inlineImpure1" inlineImpure1 - , goldenVsSimplified "inlineImpure2" inlineImpure2 - , goldenVsSimplified "inlineImpure3" inlineImpure3 - , goldenVsSimplified "inlineImpure4" inlineImpure4 - , goldenVsSimplified "multiApp" multiApp - , goldenVsSimplified "forceDelayNoApps" forceDelayNoApps - , goldenVsSimplified "forceDelayNoAppsLayered" forceDelayNoAppsLayered - , goldenVsSimplified "forceDelaySimple" forceDelaySimple - , goldenVsSimplified "forceDelayMultiApply" forceDelayMultiApply - , goldenVsSimplified "forceDelayMultiForce" forceDelayMultiForce - , goldenVsSimplified "forceDelayComplex" forceDelayComplex - , goldenVsCse "cse1" cse1 - , goldenVsCse "cse2" cse2 - , goldenVsCse "cse3" cse3 - , goldenVsCse "cseExpensive" cseExpensive - ] + $ fmap (uncurry goldenVsSimplified) testSimplifyInputs + <> + [ goldenVsCse "cse1" cse1 + , goldenVsCse "cse2" cse2 + , goldenVsCse "cse3" cse3 + , goldenVsCse "cseExpensive" cseExpensive + ] diff --git a/plutus-core/untyped-plutus-core/test/Transform/Simplify/Lib.hs b/plutus-core/untyped-plutus-core/testlib/Transform/Simplify/Lib.hs similarity index 75% rename from plutus-core/untyped-plutus-core/test/Transform/Simplify/Lib.hs rename to plutus-core/untyped-plutus-core/testlib/Transform/Simplify/Lib.hs index 3864c693eff..38054363da9 100644 --- a/plutus-core/untyped-plutus-core/test/Transform/Simplify/Lib.hs +++ b/plutus-core/untyped-plutus-core/testlib/Transform/Simplify/Lib.hs @@ -11,8 +11,9 @@ import PlutusCore.Pretty (PrettyPlc, Render (render), prettyPlcReadableSimple) import PlutusPrelude (Default (def)) import Test.Tasty (TestTree) import Test.Tasty.Golden (goldenVsString) -import UntypedPlutusCore (Name, Term, defaultSimplifyOpts, simplifyTerm, soInlineCallsiteGrowth, - soMaxCseIterations, soMaxSimplifierIterations) +import UntypedPlutusCore (Name, SimplifierTrace, Term, defaultSimplifyOpts, runSimplifierT, + simplifyTerm, soInlineCallsiteGrowth, soMaxCseIterations, + soMaxSimplifierIterations, termSimplifier) -- TODO Fix duplication with other golden tests, quite annoying goldenVsPretty :: (PrettyPlc a) => String -> String -> a -> TestTree @@ -25,7 +26,18 @@ goldenVsSimplified :: String -> Term Name PLC.DefaultUni PLC.DefaultFun () -> Te goldenVsSimplified name = goldenVsPretty ".uplc.golden" name . PLC.runQuote - . simplifyTerm + . fmap fst + . testSimplify + +testSimplify + :: Term Name PLC.DefaultUni PLC.DefaultFun () + -> PLC.Quote + ( Term Name PLC.DefaultUni PLC.DefaultFun () + , SimplifierTrace Name PLC.DefaultUni PLC.DefaultFun () + ) +testSimplify = + runSimplifierT + . termSimplifier ( defaultSimplifyOpts -- Just run one iteration, to see what that does & soMaxSimplifierIterations .~ 1 diff --git a/plutus-core/untyped-plutus-core/test/Transform/basic.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Transform/basic.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Transform/basic.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Transform/basic.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Transform/basicInline.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Transform/basicInline.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Transform/basicInline.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Transform/basicInline.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Transform/callsiteInline.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Transform/callsiteInline.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Transform/callsiteInline.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Transform/callsiteInline.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Transform/cse1.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Transform/cse1.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Transform/cse1.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Transform/cse1.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Transform/cse2.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Transform/cse2.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Transform/cse2.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Transform/cse2.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Transform/cse3.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Transform/cse3.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Transform/cse3.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Transform/cse3.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Transform/cseExpensive.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Transform/cseExpensive.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Transform/cseExpensive.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Transform/cseExpensive.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Transform/extraDelays.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Transform/extraDelays.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Transform/extraDelays.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Transform/extraDelays.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Transform/floatDelay1.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Transform/floatDelay1.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Transform/floatDelay1.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Transform/floatDelay1.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Transform/floatDelay2.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Transform/floatDelay2.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Transform/floatDelay2.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Transform/floatDelay2.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Transform/floatDelay3.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Transform/floatDelay3.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Transform/floatDelay3.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Transform/floatDelay3.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Transform/forceDelayComplex.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Transform/forceDelayComplex.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Transform/forceDelayComplex.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Transform/forceDelayComplex.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Transform/forceDelayMultiApply.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Transform/forceDelayMultiApply.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Transform/forceDelayMultiApply.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Transform/forceDelayMultiApply.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Transform/forceDelayMultiForce.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Transform/forceDelayMultiForce.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Transform/forceDelayMultiForce.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Transform/forceDelayMultiForce.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Transform/forceDelayNoApps.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Transform/forceDelayNoApps.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Transform/forceDelayNoApps.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Transform/forceDelayNoApps.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Transform/forceDelayNoAppsLayered.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Transform/forceDelayNoAppsLayered.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Transform/forceDelayNoAppsLayered.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Transform/forceDelayNoAppsLayered.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Transform/forceDelaySimple.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Transform/forceDelaySimple.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Transform/forceDelaySimple.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Transform/forceDelaySimple.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Transform/inlineImpure1.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Transform/inlineImpure1.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Transform/inlineImpure1.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Transform/inlineImpure1.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Transform/inlineImpure2.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Transform/inlineImpure2.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Transform/inlineImpure2.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Transform/inlineImpure2.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Transform/inlineImpure3.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Transform/inlineImpure3.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Transform/inlineImpure3.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Transform/inlineImpure3.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Transform/inlineImpure4.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Transform/inlineImpure4.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Transform/inlineImpure4.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Transform/inlineImpure4.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Transform/inlinePure1.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Transform/inlinePure1.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Transform/inlinePure1.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Transform/inlinePure1.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Transform/inlinePure2.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Transform/inlinePure2.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Transform/inlinePure2.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Transform/inlinePure2.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Transform/inlinePure3.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Transform/inlinePure3.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Transform/inlinePure3.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Transform/inlinePure3.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Transform/inlinePure4.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Transform/inlinePure4.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Transform/inlinePure4.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Transform/inlinePure4.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Transform/interveningLambda.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Transform/interveningLambda.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Transform/interveningLambda.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Transform/interveningLambda.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Transform/multiApp.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Transform/multiApp.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Transform/multiApp.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Transform/multiApp.uplc.golden diff --git a/plutus-core/untyped-plutus-core/test/Transform/nested.uplc.golden b/plutus-core/untyped-plutus-core/testlib/Transform/nested.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/test/Transform/nested.uplc.golden rename to plutus-core/untyped-plutus-core/testlib/Transform/nested.uplc.golden From 0a0d7d1ce51f355e36652073cbc821bbe0ced046 Mon Sep 17 00:00:00 2001 From: Ana Pantilie Date: Fri, 11 Apr 2025 17:31:20 +0300 Subject: [PATCH 06/26] Add tests from UPLC simplifier --- plutus-executables/executables/uplc/Main.hs | 11 +++-------- plutus-executables/plutus-executables.cabal | 9 ++++++++- plutus-executables/src/AgdaTrace.hs | 19 +++++++++++++++++++ plutus-executables/test/certifier/Spec.hs | 19 +++++++++++++++++++ 4 files changed, 49 insertions(+), 9 deletions(-) create mode 100644 plutus-executables/src/AgdaTrace.hs diff --git a/plutus-executables/executables/uplc/Main.hs b/plutus-executables/executables/uplc/Main.hs index 7c1d0bbae02..aedb4764564 100644 --- a/plutus-executables/executables/uplc/Main.hs +++ b/plutus-executables/executables/uplc/Main.hs @@ -48,6 +48,7 @@ import Text.Read (readMaybe) import Control.Monad.ST (RealWorld) import System.Console.Haskeline qualified as Repl +import AgdaTrace (mkAgdaTrace) import AgdaUnparse (agdaUnparse) import Data.Version.Extras (gitAwareVersionInfo) import Paths_plutus_executables qualified as Paths @@ -291,14 +292,8 @@ runCertifier -> SimplifierTrace UPLC.Name UPLC.DefaultUni UPLC.DefaultFun a -- ^ The trace produced by the simplification process -> IO () -runCertifier (Just certName) (SimplifierTrace simplTrace) = do - let processAgdaAST Simplification {beforeAST, stage, afterAST} = - case (UPLC.deBruijnTerm beforeAST, UPLC.deBruijnTerm afterAST) of - (Right before', Right after') -> - (stage, (AgdaFFI.conv (void before'), AgdaFFI.conv (void after'))) - (Left (err :: UPLC.FreeVariableError), _) -> error $ show err - (_, Left (err :: UPLC.FreeVariableError)) -> error $ show err - rawAgdaTrace = reverse $ processAgdaAST <$> simplTrace +runCertifier (Just certName) simplTrace = do + let rawAgdaTrace = mkAgdaTrace simplTrace case runCertifierMain rawAgdaTrace of Just True -> putStrLn "The compilation was successfully certified." diff --git a/plutus-executables/plutus-executables.cabal b/plutus-executables/plutus-executables.cabal index 9af3e773326..659a6031e7a 100644 --- a/plutus-executables/plutus-executables.cabal +++ b/plutus-executables/plutus-executables.cabal @@ -65,7 +65,10 @@ common os-support library lib import: lang, os-support, ghc-version-support hs-source-dirs: src - exposed-modules: AgdaUnparse + exposed-modules: + AgdaTrace + AgdaUnparse + build-depends: , base >=4.9 && <5 , bytestring @@ -171,7 +174,11 @@ test-suite test-certifier build-depends: , base , filepath + , plutus-core , plutus-core:plutus-core-testlib + , plutus-core:untyped-plutus-core-testlib + , plutus-executables:lib + , plutus-metatheory , process , tasty , tasty-hunit diff --git a/plutus-executables/src/AgdaTrace.hs b/plutus-executables/src/AgdaTrace.hs new file mode 100644 index 00000000000..79841e084e6 --- /dev/null +++ b/plutus-executables/src/AgdaTrace.hs @@ -0,0 +1,19 @@ +module AgdaTrace ( + mkAgdaTrace, +) where + +import Untyped qualified as AgdaFFI + +import PlutusPrelude + +import UntypedPlutusCore qualified as UPLC +import UntypedPlutusCore.Transform.Simplifier + +mkAgdaTrace (SimplifierTrace simplTrace) = reverse $ processAgdaAST <$> simplTrace + where + processAgdaAST Simplification {beforeAST, stage, afterAST} = + case (UPLC.deBruijnTerm beforeAST, UPLC.deBruijnTerm afterAST) of + (Right before', Right after') -> + (stage, (AgdaFFI.conv (void before'), AgdaFFI.conv (void after'))) + (Left (err :: UPLC.FreeVariableError), _) -> error $ show err + (_, Left (err :: UPLC.FreeVariableError)) -> error $ show err diff --git a/plutus-executables/test/certifier/Spec.hs b/plutus-executables/test/certifier/Spec.hs index e40b5df5e72..03837834681 100644 --- a/plutus-executables/test/certifier/Spec.hs +++ b/plutus-executables/test/certifier/Spec.hs @@ -5,8 +5,11 @@ module Main (main) where +import AgdaTrace (mkAgdaTrace) import Data.Text qualified as T (Text, dropEnd, pack, takeWhileEnd, unpack) import GHC.IO.Encoding (setLocaleEncoding) +import MAlonzo.Code.VerifiedCompilation (runCertifierMain) +import PlutusCore qualified as PLC import System.Exit import System.FilePath import System.IO @@ -14,6 +17,9 @@ import System.Process import Test.Tasty import Test.Tasty.Extras (goldenVsTextM) import Test.Tasty.HUnit +import Transform.Simplify +import Transform.Simplify.Lib +import UntypedPlutusCore {- | Run an external executable with some arguments. This is for use inside HUnit Assertions -} @@ -141,6 +147,18 @@ makeSerialisationExampleTests :: [ String ] -> [ TestTree] makeSerialisationExampleTests = map (\testname -> testCase testname (agdaExampleCert testname)) -} +mkUPLCSimplifierTest :: String -> Term Name DefaultUni DefaultFun () -> TestTree +mkUPLCSimplifierTest name input = testCase name $ + let rawAgdaTrace = PLC.runQuote $ do + simplifierTrace <- snd <$> testSimplify input + return $ mkAgdaTrace simplifierTrace + in + case runCertifierMain rawAgdaTrace of + Just result -> + assertBool "The certifier returned false." result + Nothing -> + assertFailure "The certifier exited with an error." + main :: IO () main = do setLocaleEncoding utf8 @@ -151,4 +169,5 @@ main = do , testGroup "serialisation certification" $ makeSerialisationTests srcTests --, testGroup "example serialisation certification" -- $ makeSerialisationExampleTests exampleNames + , testGroup "uplc simplifier tests" $ fmap (uncurry mkUPLCSimplifierTest) testSimplifyInputs ] From 0e852db3cecf27df3e20312d851cc345fd814e04 Mon Sep 17 00:00:00 2001 From: Ana Pantilie Date: Tue, 15 Apr 2025 13:36:47 +0300 Subject: [PATCH 07/26] Move golden files to test dir --- .../{testlib => test}/Analysis/evalOrder/ifThenElse.golden | 0 .../{testlib => test}/Analysis/evalOrder/letFun.golden | 0 .../{testlib => test}/Analysis/evalOrder/letImpure.golden | 0 .../DeBruijn/Golden/Default/failApply01.uplc.golden | 0 .../DeBruijn/Golden/Default/failBody0.uplc.golden | 0 .../DeBruijn/Golden/Default/failBody99.uplc.golden | 0 .../DeBruijn/Golden/Default/failConst.uplc.golden | 0 .../DeBruijn/Golden/Default/failDeep.uplc.golden | 0 .../{testlib => test}/DeBruijn/Golden/Default/failITE.uplc.golden | 0 .../{testlib => test}/DeBruijn/Golden/Default/failMix.uplc.golden | 0 .../{testlib => test}/DeBruijn/Golden/Default/failTop.uplc.golden | 0 .../DeBruijn/Golden/Default/failTop0.uplc.golden | 0 .../DeBruijn/Golden/Default/failTop1.uplc.golden | 0 .../{testlib => test}/DeBruijn/Golden/Default/okConst.uplc.golden | 0 .../{testlib => test}/DeBruijn/Golden/Default/okDeep0.uplc.golden | 0 .../DeBruijn/Golden/Default/okDeep99.uplc.golden | 0 .../{testlib => test}/DeBruijn/Golden/Default/okId0.uplc.golden | 0 .../{testlib => test}/DeBruijn/Golden/Default/okId99.uplc.golden | 0 .../{testlib => test}/DeBruijn/Golden/Default/okMix1.uplc.golden | 0 .../{testlib => test}/DeBruijn/Golden/Default/okMix2.uplc.golden | 0 .../DeBruijn/Golden/Graceful/graceConst.uplc.golden | 0 .../DeBruijn/Golden/Graceful/graceDeep.uplc.golden | 0 .../DeBruijn/Golden/Graceful/graceElaborate.uplc.golden | 0 .../DeBruijn/Golden/Graceful/graceTop.uplc.golden | 0 .../Golden/Integer/ExpMod/exp-neg-non-inverse1.err.golden | 0 .../Golden/Integer/ExpMod/exp-neg-non-inverse2.err.golden | 0 .../Evaluation/Builtins/Golden/Integer/ExpMod/mod-neg.err.golden | 0 .../Evaluation/Builtins/Golden/Integer/ExpMod/mod-zero.err.golden | 0 .../Builtins/Golden/Integer/divideInteger-div-by-zero.err.golden | 0 .../Builtins/Golden/Integer/modInteger-div-by-zero.err.golden | 0 .../Golden/Integer/quotientInteger-div-by-zero.err.golden | 0 .../Golden/Integer/remainderInteger-div-by-zero.err.golden | 0 .../Evaluation/Builtins/Golden/List/headList-empty.err.golden | 0 .../Evaluation/Builtins/Golden/List/tailList-empty.err.golden | 0 .../Builtins/Golden/String/consByteString-out-of-range.err.golden | 0 .../Golden/String/indexByteString-out-of-bounds-empty.err.golden | 0 .../String/indexByteString-out-of-bounds-non-empty.err.golden | 0 .../{testlib => test}/Evaluation/Debug/ex1.golden | 0 .../{testlib => test}/Evaluation/Debug/ex2.golden | 0 .../{testlib => test}/Evaluation/Debug/ex3.golden | 0 .../{testlib => test}/Evaluation/Debug/ex4.golden | 0 .../{testlib => test}/Evaluation/Golden/case1.plc.golden | 0 .../{testlib => test}/Evaluation/Golden/case1.type.golden | 0 .../{testlib => test}/Evaluation/Golden/case1.uplc.golden | 0 .../{testlib => test}/Evaluation/Golden/case2.plc.golden | 0 .../{testlib => test}/Evaluation/Golden/case2.type.golden | 0 .../{testlib => test}/Evaluation/Golden/case2.uplc.golden | 0 .../{testlib => test}/Evaluation/Golden/case3.plc.golden | 0 .../{testlib => test}/Evaluation/Golden/case3.type.golden | 0 .../{testlib => test}/Evaluation/Golden/case3.uplc.golden | 0 .../{testlib => test}/Evaluation/Golden/case4.plc.golden | 0 .../{testlib => test}/Evaluation/Golden/case4.type.golden | 0 .../{testlib => test}/Evaluation/Golden/case4.uplc.golden | 0 .../{testlib => test}/Evaluation/Golden/caseNoBranch.plc.golden | 0 .../{testlib => test}/Evaluation/Golden/caseNoBranch.type.golden | 0 .../{testlib => test}/Evaluation/Golden/caseNoBranch.uplc.golden | 0 .../{testlib => test}/Evaluation/Golden/caseNonTag.plc.golden | 0 .../{testlib => test}/Evaluation/Golden/caseNonTag.type.golden | 0 .../{testlib => test}/Evaluation/Golden/caseNonTag.uplc.golden | 0 .../{testlib => test}/Evaluation/Golden/caseProd1.plc.golden | 0 .../{testlib => test}/Evaluation/Golden/caseProd1.type.golden | 0 .../{testlib => test}/Evaluation/Golden/caseProd1.uplc.golden | 0 .../{testlib => test}/Evaluation/Golden/closure.plc.golden | 0 .../{testlib => test}/Evaluation/Golden/closure.type.golden | 0 .../{testlib => test}/Evaluation/Golden/closure.uplc.golden | 0 .../{testlib => test}/Evaluation/Golden/diFullyApplied.plc.golden | 0 .../Evaluation/Golden/diFullyApplied.type.golden | 0 .../Evaluation/Golden/diFullyApplied.uplc.golden | 0 .../{testlib => test}/Evaluation/Golden/even2.plc.golden | 0 .../{testlib => test}/Evaluation/Golden/even2.type.golden | 0 .../{testlib => test}/Evaluation/Golden/even2.uplc.golden | 0 .../{testlib => test}/Evaluation/Golden/even3.plc.golden | 0 .../{testlib => test}/Evaluation/Golden/even3.type.golden | 0 .../{testlib => test}/Evaluation/Golden/even3.uplc.golden | 0 .../{testlib => test}/Evaluation/Golden/evenList.plc.golden | 0 .../{testlib => test}/Evaluation/Golden/evenList.type.golden | 0 .../{testlib => test}/Evaluation/Golden/evenList.uplc.golden | 0 .../Evaluation/Golden/headSingletonException.type.golden | 0 .../Evaluation/Golden/headSingletonException.uplc.golden | 0 .../{testlib => test}/Evaluation/Golden/ite.plc.golden | 0 .../{testlib => test}/Evaluation/Golden/ite.type.golden | 0 .../{testlib => test}/Evaluation/Golden/ite.uplc.golden | 0 .../Evaluation/Golden/iteAtHigherKind.plc.golden | 0 .../Evaluation/Golden/iteAtHigherKind.type.golden | 0 .../Evaluation/Golden/iteAtHigherKind.uplc.golden | 0 .../Evaluation/Golden/iteAtHigherKindFullyApplied.plc.golden | 0 .../Evaluation/Golden/iteAtHigherKindFullyApplied.type.golden | 0 .../Evaluation/Golden/iteAtHigherKindFullyApplied.uplc.golden | 0 .../Evaluation/Golden/iteAtHigherKindWithCond.plc.golden | 0 .../Evaluation/Golden/iteAtHigherKindWithCond.type.golden | 0 .../Evaluation/Golden/iteAtHigherKindWithCond.uplc.golden | 0 .../{testlib => test}/Evaluation/Golden/iteAtInteger.plc.golden | 0 .../{testlib => test}/Evaluation/Golden/iteAtInteger.type.golden | 0 .../{testlib => test}/Evaluation/Golden/iteAtInteger.uplc.golden | 0 .../Evaluation/Golden/iteAtIntegerArrowInteger.plc.golden | 0 .../Evaluation/Golden/iteAtIntegerArrowInteger.type.golden | 0 .../Evaluation/Golden/iteAtIntegerArrowInteger.uplc.golden | 0 .../Evaluation/Golden/iteAtIntegerArrowIntegerApplied1.plc.golden | 0 .../Golden/iteAtIntegerArrowIntegerApplied1.type.golden | 0 .../Golden/iteAtIntegerArrowIntegerApplied1.uplc.golden | 0 .../Evaluation/Golden/iteAtIntegerArrowIntegerApplied2.plc.golden | 0 .../Golden/iteAtIntegerArrowIntegerApplied2.type.golden | 0 .../Golden/iteAtIntegerArrowIntegerApplied2.uplc.golden | 0 .../Golden/iteAtIntegerArrowIntegerAppliedApplied.plc.golden | 0 .../Golden/iteAtIntegerArrowIntegerAppliedApplied.type.golden | 0 .../Golden/iteAtIntegerArrowIntegerAppliedApplied.uplc.golden | 0 .../Evaluation/Golden/iteAtIntegerArrowIntegerWithCond.plc.golden | 0 .../Golden/iteAtIntegerArrowIntegerWithCond.type.golden | 0 .../Golden/iteAtIntegerArrowIntegerWithCond.uplc.golden | 0 .../Evaluation/Golden/iteAtIntegerAtInteger.plc.golden | 0 .../Evaluation/Golden/iteAtIntegerAtInteger.type.golden | 0 .../Evaluation/Golden/iteAtIntegerAtInteger.uplc.golden | 0 .../Evaluation/Golden/iteAtIntegerFullyApplied.plc.golden | 0 .../Evaluation/Golden/iteAtIntegerFullyApplied.type.golden | 0 .../Evaluation/Golden/iteAtIntegerFullyApplied.uplc.golden | 0 .../Evaluation/Golden/iteAtIntegerWithCond.plc.golden | 0 .../Evaluation/Golden/iteAtIntegerWithCond.type.golden | 0 .../Evaluation/Golden/iteAtIntegerWithCond.uplc.golden | 0 .../Evaluation/Golden/iteAtIntegerWrongCondTypeSat.plc.golden | 0 .../Evaluation/Golden/iteAtIntegerWrongCondTypeSat.type.golden | 0 .../Evaluation/Golden/iteAtIntegerWrongCondTypeSat.uplc.golden | 0 .../Evaluation/Golden/iteAtIntegerWrongCondTypeUnSat.plc.golden | 0 .../Evaluation/Golden/iteAtIntegerWrongCondTypeUnSat.type.golden | 0 .../Evaluation/Golden/iteAtIntegerWrongCondTypeUnSat.uplc.golden | 0 .../{testlib => test}/Evaluation/Golden/iteAtString.plc.golden | 0 .../{testlib => test}/Evaluation/Golden/iteAtString.type.golden | 0 .../{testlib => test}/Evaluation/Golden/iteAtString.uplc.golden | 0 .../Evaluation/Golden/iteAtStringFullyApplied.plc.golden | 0 .../Evaluation/Golden/iteAtStringFullyApplied.type.golden | 0 .../Evaluation/Golden/iteAtStringFullyApplied.uplc.golden | 0 .../Evaluation/Golden/iteAtStringWithCond.plc.golden | 0 .../Evaluation/Golden/iteAtStringWithCond.type.golden | 0 .../Evaluation/Golden/iteAtStringWithCond.uplc.golden | 0 .../Golden/iteAtStringWithCondWithIntegerWithString.plc.golden | 0 .../Golden/iteAtStringWithCondWithIntegerWithString.type.golden | 0 .../Golden/iteAtStringWithCondWithIntegerWithString.uplc.golden | 0 .../Evaluation/Golden/iteTypeTermType.plc.golden | 0 .../Evaluation/Golden/iteTypeTermType.type.golden | 0 .../Evaluation/Golden/iteTypeTermType.uplc.golden | 0 .../Evaluation/Golden/iteUninstantiatedFullyApplied.plc.golden | 0 .../Evaluation/Golden/iteUninstantiatedFullyApplied.type.golden | 0 .../Evaluation/Golden/iteUninstantiatedFullyApplied.uplc.golden | 0 .../Evaluation/Golden/iteUninstantiatedWithCond.plc.golden | 0 .../Evaluation/Golden/iteUninstantiatedWithCond.type.golden | 0 .../Evaluation/Golden/iteUninstantiatedWithCond.uplc.golden | 0 .../{testlib => test}/Evaluation/Golden/mulInstError1.plc.golden | 0 .../{testlib => test}/Evaluation/Golden/mulInstError1.type.golden | 0 .../{testlib => test}/Evaluation/Golden/mulInstError1.uplc.golden | 0 .../{testlib => test}/Evaluation/Golden/mulInstError2.plc.golden | 0 .../{testlib => test}/Evaluation/Golden/mulInstError2.type.golden | 0 .../{testlib => test}/Evaluation/Golden/mulInstError2.uplc.golden | 0 .../{testlib => test}/Evaluation/Golden/mulInstError3.plc.golden | 0 .../{testlib => test}/Evaluation/Golden/mulInstError3.type.golden | 0 .../{testlib => test}/Evaluation/Golden/mulInstError3.uplc.golden | 0 .../{testlib => test}/Evaluation/Golden/mulOK.plc.golden | 0 .../{testlib => test}/Evaluation/Golden/mulOK.type.golden | 0 .../{testlib => test}/Evaluation/Golden/mulOK.uplc.golden | 0 .../{testlib => test}/Evaluation/Golden/polyError.plc.golden | 0 .../{testlib => test}/Evaluation/Golden/polyError.type.golden | 0 .../{testlib => test}/Evaluation/Golden/polyError.uplc.golden | 0 .../{testlib => test}/Evaluation/Golden/polyErrorInst.plc.golden | 0 .../{testlib => test}/Evaluation/Golden/polyErrorInst.type.golden | 0 .../{testlib => test}/Evaluation/Golden/polyErrorInst.uplc.golden | 0 .../{testlib => test}/Evaluation/Golden/tag1.plc.golden | 0 .../{testlib => test}/Evaluation/Golden/tag1.type.golden | 0 .../{testlib => test}/Evaluation/Golden/tag1.uplc.golden | 0 .../{testlib => test}/Evaluation/Golden/tag2.plc.golden | 0 .../{testlib => test}/Evaluation/Golden/tag2.type.golden | 0 .../{testlib => test}/Evaluation/Golden/tag2.uplc.golden | 0 .../{testlib => test}/Evaluation/Golden/tagProd1.plc.golden | 0 .../{testlib => test}/Evaluation/Golden/tagProd1.type.golden | 0 .../{testlib => test}/Evaluation/Golden/tagProd1.uplc.golden | 0 .../Evaluation/Machines/Budget/Fib/1.uplc.golden | 0 .../Evaluation/Machines/Budget/Fib/2.uplc.golden | 0 .../Evaluation/Machines/Budget/Fib/3.uplc.golden | 0 .../Evaluation/Machines/Budget/IdNat/0.uplc.golden | 0 .../Evaluation/Machines/Budget/IdNat/3.uplc.golden | 0 .../Evaluation/Machines/Budget/IdNat/6.uplc.golden | 0 .../Evaluation/Machines/Budget/IdNat/9.uplc.golden | 0 .../Evaluation/Machines/Budget/IfThenElse/0.uplc.golden | 0 .../Evaluation/Machines/Budget/IfThenElse/1.uplc.golden | 0 .../Evaluation/Machines/Budget/IfThenElse/2.uplc.golden | 0 .../Evaluation/Machines/Budget/IfThenElse/3.uplc.golden | 0 .../Evaluation/Machines/Budget/IfThenElse/4.uplc.golden | 0 .../Evaluation/Machines/Budget/IfThenElse/5.uplc.golden | 0 .../Evaluation/Machines/NumberOfStepCounters.golden | 0 .../Evaluation/Machines/Tallying/Fib/1.uplc.golden | 0 .../Evaluation/Machines/Tallying/Fib/2.uplc.golden | 0 .../Evaluation/Machines/Tallying/Fib/3.uplc.golden | 0 .../{testlib => test}/Transform/CaseOfCase/1.uplc.golden | 0 .../{testlib => test}/Transform/CaseOfCase/2.uplc.golden | 0 .../{testlib => test}/Transform/CaseOfCase/3.uplc.golden | 0 .../{testlib => test}/Transform/CaseOfCase/withError.uplc.golden | 0 .../{testlib => test}/Transform/basic.uplc.golden | 0 .../{testlib => test}/Transform/basicInline.uplc.golden | 0 .../{testlib => test}/Transform/callsiteInline.uplc.golden | 0 .../{testlib => test}/Transform/cse1.uplc.golden | 0 .../{testlib => test}/Transform/cse2.uplc.golden | 0 .../{testlib => test}/Transform/cse3.uplc.golden | 0 .../{testlib => test}/Transform/cseExpensive.uplc.golden | 0 .../{testlib => test}/Transform/extraDelays.uplc.golden | 0 .../{testlib => test}/Transform/floatDelay1.uplc.golden | 0 .../{testlib => test}/Transform/floatDelay2.uplc.golden | 0 .../{testlib => test}/Transform/floatDelay3.uplc.golden | 0 .../{testlib => test}/Transform/forceDelayComplex.uplc.golden | 0 .../{testlib => test}/Transform/forceDelayMultiApply.uplc.golden | 0 .../{testlib => test}/Transform/forceDelayMultiForce.uplc.golden | 0 .../{testlib => test}/Transform/forceDelayNoApps.uplc.golden | 0 .../Transform/forceDelayNoAppsLayered.uplc.golden | 0 .../{testlib => test}/Transform/forceDelaySimple.uplc.golden | 0 .../{testlib => test}/Transform/inlineImpure1.uplc.golden | 0 .../{testlib => test}/Transform/inlineImpure2.uplc.golden | 0 .../{testlib => test}/Transform/inlineImpure3.uplc.golden | 0 .../{testlib => test}/Transform/inlineImpure4.uplc.golden | 0 .../{testlib => test}/Transform/inlinePure1.uplc.golden | 0 .../{testlib => test}/Transform/inlinePure2.uplc.golden | 0 .../{testlib => test}/Transform/inlinePure3.uplc.golden | 0 .../{testlib => test}/Transform/inlinePure4.uplc.golden | 0 .../{testlib => test}/Transform/interveningLambda.uplc.golden | 0 .../{testlib => test}/Transform/multiApp.uplc.golden | 0 .../{testlib => test}/Transform/nested.uplc.golden | 0 221 files changed, 0 insertions(+), 0 deletions(-) rename plutus-core/untyped-plutus-core/{testlib => test}/Analysis/evalOrder/ifThenElse.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Analysis/evalOrder/letFun.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Analysis/evalOrder/letImpure.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/DeBruijn/Golden/Default/failApply01.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/DeBruijn/Golden/Default/failBody0.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/DeBruijn/Golden/Default/failBody99.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/DeBruijn/Golden/Default/failConst.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/DeBruijn/Golden/Default/failDeep.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/DeBruijn/Golden/Default/failITE.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/DeBruijn/Golden/Default/failMix.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/DeBruijn/Golden/Default/failTop.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/DeBruijn/Golden/Default/failTop0.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/DeBruijn/Golden/Default/failTop1.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/DeBruijn/Golden/Default/okConst.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/DeBruijn/Golden/Default/okDeep0.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/DeBruijn/Golden/Default/okDeep99.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/DeBruijn/Golden/Default/okId0.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/DeBruijn/Golden/Default/okId99.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/DeBruijn/Golden/Default/okMix1.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/DeBruijn/Golden/Default/okMix2.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/DeBruijn/Golden/Graceful/graceConst.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/DeBruijn/Golden/Graceful/graceDeep.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/DeBruijn/Golden/Graceful/graceElaborate.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/DeBruijn/Golden/Graceful/graceTop.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Builtins/Golden/Integer/ExpMod/exp-neg-non-inverse1.err.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Builtins/Golden/Integer/ExpMod/exp-neg-non-inverse2.err.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Builtins/Golden/Integer/ExpMod/mod-neg.err.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Builtins/Golden/Integer/ExpMod/mod-zero.err.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Builtins/Golden/Integer/divideInteger-div-by-zero.err.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Builtins/Golden/Integer/modInteger-div-by-zero.err.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Builtins/Golden/Integer/quotientInteger-div-by-zero.err.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Builtins/Golden/Integer/remainderInteger-div-by-zero.err.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Builtins/Golden/List/headList-empty.err.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Builtins/Golden/List/tailList-empty.err.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Builtins/Golden/String/consByteString-out-of-range.err.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Builtins/Golden/String/indexByteString-out-of-bounds-empty.err.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Builtins/Golden/String/indexByteString-out-of-bounds-non-empty.err.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Debug/ex1.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Debug/ex2.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Debug/ex3.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Debug/ex4.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/case1.plc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/case1.type.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/case1.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/case2.plc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/case2.type.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/case2.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/case3.plc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/case3.type.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/case3.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/case4.plc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/case4.type.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/case4.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/caseNoBranch.plc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/caseNoBranch.type.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/caseNoBranch.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/caseNonTag.plc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/caseNonTag.type.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/caseNonTag.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/caseProd1.plc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/caseProd1.type.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/caseProd1.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/closure.plc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/closure.type.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/closure.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/diFullyApplied.plc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/diFullyApplied.type.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/diFullyApplied.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/even2.plc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/even2.type.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/even2.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/even3.plc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/even3.type.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/even3.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/evenList.plc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/evenList.type.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/evenList.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/headSingletonException.type.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/headSingletonException.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/ite.plc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/ite.type.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/ite.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtHigherKind.plc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtHigherKind.type.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtHigherKind.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtHigherKindFullyApplied.plc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtHigherKindFullyApplied.type.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtHigherKindFullyApplied.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtHigherKindWithCond.plc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtHigherKindWithCond.type.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtHigherKindWithCond.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtInteger.plc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtInteger.type.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtInteger.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtIntegerArrowInteger.plc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtIntegerArrowInteger.type.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtIntegerArrowInteger.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtIntegerArrowIntegerApplied1.plc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtIntegerArrowIntegerApplied1.type.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtIntegerArrowIntegerApplied1.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtIntegerArrowIntegerApplied2.plc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtIntegerArrowIntegerApplied2.type.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtIntegerArrowIntegerApplied2.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtIntegerArrowIntegerAppliedApplied.plc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtIntegerArrowIntegerAppliedApplied.type.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtIntegerArrowIntegerAppliedApplied.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtIntegerArrowIntegerWithCond.plc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtIntegerArrowIntegerWithCond.type.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtIntegerArrowIntegerWithCond.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtIntegerAtInteger.plc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtIntegerAtInteger.type.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtIntegerAtInteger.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtIntegerFullyApplied.plc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtIntegerFullyApplied.type.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtIntegerFullyApplied.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtIntegerWithCond.plc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtIntegerWithCond.type.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtIntegerWithCond.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtIntegerWrongCondTypeSat.plc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtIntegerWrongCondTypeSat.type.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtIntegerWrongCondTypeSat.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtIntegerWrongCondTypeUnSat.plc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtIntegerWrongCondTypeUnSat.type.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtIntegerWrongCondTypeUnSat.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtString.plc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtString.type.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtString.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtStringFullyApplied.plc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtStringFullyApplied.type.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtStringFullyApplied.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtStringWithCond.plc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtStringWithCond.type.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtStringWithCond.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtStringWithCondWithIntegerWithString.plc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtStringWithCondWithIntegerWithString.type.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteAtStringWithCondWithIntegerWithString.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteTypeTermType.plc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteTypeTermType.type.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteTypeTermType.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteUninstantiatedFullyApplied.plc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteUninstantiatedFullyApplied.type.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteUninstantiatedFullyApplied.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteUninstantiatedWithCond.plc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteUninstantiatedWithCond.type.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/iteUninstantiatedWithCond.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/mulInstError1.plc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/mulInstError1.type.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/mulInstError1.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/mulInstError2.plc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/mulInstError2.type.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/mulInstError2.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/mulInstError3.plc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/mulInstError3.type.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/mulInstError3.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/mulOK.plc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/mulOK.type.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/mulOK.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/polyError.plc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/polyError.type.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/polyError.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/polyErrorInst.plc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/polyErrorInst.type.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/polyErrorInst.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/tag1.plc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/tag1.type.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/tag1.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/tag2.plc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/tag2.type.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/tag2.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/tagProd1.plc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/tagProd1.type.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Golden/tagProd1.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Machines/Budget/Fib/1.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Machines/Budget/Fib/2.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Machines/Budget/Fib/3.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Machines/Budget/IdNat/0.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Machines/Budget/IdNat/3.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Machines/Budget/IdNat/6.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Machines/Budget/IdNat/9.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Machines/Budget/IfThenElse/0.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Machines/Budget/IfThenElse/1.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Machines/Budget/IfThenElse/2.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Machines/Budget/IfThenElse/3.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Machines/Budget/IfThenElse/4.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Machines/Budget/IfThenElse/5.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Machines/NumberOfStepCounters.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Machines/Tallying/Fib/1.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Machines/Tallying/Fib/2.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Evaluation/Machines/Tallying/Fib/3.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Transform/CaseOfCase/1.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Transform/CaseOfCase/2.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Transform/CaseOfCase/3.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Transform/CaseOfCase/withError.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Transform/basic.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Transform/basicInline.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Transform/callsiteInline.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Transform/cse1.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Transform/cse2.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Transform/cse3.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Transform/cseExpensive.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Transform/extraDelays.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Transform/floatDelay1.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Transform/floatDelay2.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Transform/floatDelay3.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Transform/forceDelayComplex.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Transform/forceDelayMultiApply.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Transform/forceDelayMultiForce.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Transform/forceDelayNoApps.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Transform/forceDelayNoAppsLayered.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Transform/forceDelaySimple.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Transform/inlineImpure1.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Transform/inlineImpure2.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Transform/inlineImpure3.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Transform/inlineImpure4.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Transform/inlinePure1.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Transform/inlinePure2.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Transform/inlinePure3.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Transform/inlinePure4.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Transform/interveningLambda.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Transform/multiApp.uplc.golden (100%) rename plutus-core/untyped-plutus-core/{testlib => test}/Transform/nested.uplc.golden (100%) diff --git a/plutus-core/untyped-plutus-core/testlib/Analysis/evalOrder/ifThenElse.golden b/plutus-core/untyped-plutus-core/test/Analysis/evalOrder/ifThenElse.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Analysis/evalOrder/ifThenElse.golden rename to plutus-core/untyped-plutus-core/test/Analysis/evalOrder/ifThenElse.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Analysis/evalOrder/letFun.golden b/plutus-core/untyped-plutus-core/test/Analysis/evalOrder/letFun.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Analysis/evalOrder/letFun.golden rename to plutus-core/untyped-plutus-core/test/Analysis/evalOrder/letFun.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Analysis/evalOrder/letImpure.golden b/plutus-core/untyped-plutus-core/test/Analysis/evalOrder/letImpure.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Analysis/evalOrder/letImpure.golden rename to plutus-core/untyped-plutus-core/test/Analysis/evalOrder/letImpure.golden diff --git a/plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/failApply01.uplc.golden b/plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/failApply01.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/failApply01.uplc.golden rename to plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/failApply01.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/failBody0.uplc.golden b/plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/failBody0.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/failBody0.uplc.golden rename to plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/failBody0.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/failBody99.uplc.golden b/plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/failBody99.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/failBody99.uplc.golden rename to plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/failBody99.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/failConst.uplc.golden b/plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/failConst.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/failConst.uplc.golden rename to plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/failConst.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/failDeep.uplc.golden b/plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/failDeep.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/failDeep.uplc.golden rename to plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/failDeep.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/failITE.uplc.golden b/plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/failITE.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/failITE.uplc.golden rename to plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/failITE.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/failMix.uplc.golden b/plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/failMix.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/failMix.uplc.golden rename to plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/failMix.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/failTop.uplc.golden b/plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/failTop.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/failTop.uplc.golden rename to plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/failTop.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/failTop0.uplc.golden b/plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/failTop0.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/failTop0.uplc.golden rename to plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/failTop0.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/failTop1.uplc.golden b/plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/failTop1.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/failTop1.uplc.golden rename to plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/failTop1.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/okConst.uplc.golden b/plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/okConst.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/okConst.uplc.golden rename to plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/okConst.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/okDeep0.uplc.golden b/plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/okDeep0.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/okDeep0.uplc.golden rename to plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/okDeep0.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/okDeep99.uplc.golden b/plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/okDeep99.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/okDeep99.uplc.golden rename to plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/okDeep99.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/okId0.uplc.golden b/plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/okId0.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/okId0.uplc.golden rename to plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/okId0.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/okId99.uplc.golden b/plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/okId99.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/okId99.uplc.golden rename to plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/okId99.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/okMix1.uplc.golden b/plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/okMix1.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/okMix1.uplc.golden rename to plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/okMix1.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/okMix2.uplc.golden b/plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/okMix2.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Default/okMix2.uplc.golden rename to plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Default/okMix2.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Graceful/graceConst.uplc.golden b/plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Graceful/graceConst.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Graceful/graceConst.uplc.golden rename to plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Graceful/graceConst.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Graceful/graceDeep.uplc.golden b/plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Graceful/graceDeep.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Graceful/graceDeep.uplc.golden rename to plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Graceful/graceDeep.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Graceful/graceElaborate.uplc.golden b/plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Graceful/graceElaborate.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Graceful/graceElaborate.uplc.golden rename to plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Graceful/graceElaborate.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Graceful/graceTop.uplc.golden b/plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Graceful/graceTop.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/DeBruijn/Golden/Graceful/graceTop.uplc.golden rename to plutus-core/untyped-plutus-core/test/DeBruijn/Golden/Graceful/graceTop.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/Integer/ExpMod/exp-neg-non-inverse1.err.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/Integer/ExpMod/exp-neg-non-inverse1.err.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/Integer/ExpMod/exp-neg-non-inverse1.err.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/Integer/ExpMod/exp-neg-non-inverse1.err.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/Integer/ExpMod/exp-neg-non-inverse2.err.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/Integer/ExpMod/exp-neg-non-inverse2.err.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/Integer/ExpMod/exp-neg-non-inverse2.err.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/Integer/ExpMod/exp-neg-non-inverse2.err.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/Integer/ExpMod/mod-neg.err.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/Integer/ExpMod/mod-neg.err.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/Integer/ExpMod/mod-neg.err.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/Integer/ExpMod/mod-neg.err.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/Integer/ExpMod/mod-zero.err.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/Integer/ExpMod/mod-zero.err.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/Integer/ExpMod/mod-zero.err.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/Integer/ExpMod/mod-zero.err.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/Integer/divideInteger-div-by-zero.err.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/Integer/divideInteger-div-by-zero.err.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/Integer/divideInteger-div-by-zero.err.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/Integer/divideInteger-div-by-zero.err.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/Integer/modInteger-div-by-zero.err.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/Integer/modInteger-div-by-zero.err.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/Integer/modInteger-div-by-zero.err.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/Integer/modInteger-div-by-zero.err.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/Integer/quotientInteger-div-by-zero.err.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/Integer/quotientInteger-div-by-zero.err.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/Integer/quotientInteger-div-by-zero.err.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/Integer/quotientInteger-div-by-zero.err.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/Integer/remainderInteger-div-by-zero.err.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/Integer/remainderInteger-div-by-zero.err.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/Integer/remainderInteger-div-by-zero.err.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/Integer/remainderInteger-div-by-zero.err.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/List/headList-empty.err.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/List/headList-empty.err.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/List/headList-empty.err.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/List/headList-empty.err.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/List/tailList-empty.err.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/List/tailList-empty.err.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/List/tailList-empty.err.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/List/tailList-empty.err.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/String/consByteString-out-of-range.err.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/String/consByteString-out-of-range.err.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/String/consByteString-out-of-range.err.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/String/consByteString-out-of-range.err.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/String/indexByteString-out-of-bounds-empty.err.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/String/indexByteString-out-of-bounds-empty.err.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/String/indexByteString-out-of-bounds-empty.err.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/String/indexByteString-out-of-bounds-empty.err.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/String/indexByteString-out-of-bounds-non-empty.err.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/String/indexByteString-out-of-bounds-non-empty.err.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Builtins/Golden/String/indexByteString-out-of-bounds-non-empty.err.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Builtins/Golden/String/indexByteString-out-of-bounds-non-empty.err.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Debug/ex1.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Debug/ex1.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Debug/ex1.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Debug/ex1.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Debug/ex2.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Debug/ex2.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Debug/ex2.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Debug/ex2.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Debug/ex3.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Debug/ex3.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Debug/ex3.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Debug/ex3.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Debug/ex4.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Debug/ex4.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Debug/ex4.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Debug/ex4.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/case1.plc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/case1.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/case1.plc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/case1.plc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/case1.type.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/case1.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/case1.type.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/case1.type.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/case1.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/case1.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/case1.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/case1.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/case2.plc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/case2.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/case2.plc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/case2.plc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/case2.type.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/case2.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/case2.type.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/case2.type.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/case2.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/case2.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/case2.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/case2.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/case3.plc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/case3.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/case3.plc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/case3.plc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/case3.type.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/case3.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/case3.type.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/case3.type.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/case3.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/case3.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/case3.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/case3.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/case4.plc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/case4.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/case4.plc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/case4.plc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/case4.type.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/case4.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/case4.type.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/case4.type.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/case4.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/case4.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/case4.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/case4.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/caseNoBranch.plc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/caseNoBranch.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/caseNoBranch.plc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/caseNoBranch.plc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/caseNoBranch.type.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/caseNoBranch.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/caseNoBranch.type.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/caseNoBranch.type.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/caseNoBranch.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/caseNoBranch.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/caseNoBranch.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/caseNoBranch.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/caseNonTag.plc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/caseNonTag.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/caseNonTag.plc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/caseNonTag.plc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/caseNonTag.type.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/caseNonTag.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/caseNonTag.type.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/caseNonTag.type.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/caseNonTag.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/caseNonTag.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/caseNonTag.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/caseNonTag.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/caseProd1.plc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/caseProd1.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/caseProd1.plc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/caseProd1.plc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/caseProd1.type.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/caseProd1.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/caseProd1.type.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/caseProd1.type.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/caseProd1.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/caseProd1.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/caseProd1.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/caseProd1.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/closure.plc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/closure.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/closure.plc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/closure.plc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/closure.type.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/closure.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/closure.type.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/closure.type.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/closure.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/closure.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/closure.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/closure.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/diFullyApplied.plc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/diFullyApplied.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/diFullyApplied.plc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/diFullyApplied.plc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/diFullyApplied.type.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/diFullyApplied.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/diFullyApplied.type.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/diFullyApplied.type.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/diFullyApplied.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/diFullyApplied.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/diFullyApplied.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/diFullyApplied.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/even2.plc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/even2.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/even2.plc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/even2.plc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/even2.type.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/even2.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/even2.type.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/even2.type.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/even2.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/even2.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/even2.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/even2.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/even3.plc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/even3.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/even3.plc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/even3.plc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/even3.type.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/even3.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/even3.type.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/even3.type.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/even3.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/even3.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/even3.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/even3.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/evenList.plc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/evenList.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/evenList.plc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/evenList.plc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/evenList.type.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/evenList.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/evenList.type.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/evenList.type.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/evenList.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/evenList.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/evenList.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/evenList.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/headSingletonException.type.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/headSingletonException.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/headSingletonException.type.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/headSingletonException.type.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/headSingletonException.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/headSingletonException.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/headSingletonException.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/headSingletonException.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/ite.plc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/ite.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/ite.plc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/ite.plc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/ite.type.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/ite.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/ite.type.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/ite.type.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/ite.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/ite.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/ite.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/ite.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtHigherKind.plc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtHigherKind.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtHigherKind.plc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtHigherKind.plc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtHigherKind.type.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtHigherKind.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtHigherKind.type.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtHigherKind.type.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtHigherKind.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtHigherKind.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtHigherKind.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtHigherKind.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtHigherKindFullyApplied.plc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtHigherKindFullyApplied.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtHigherKindFullyApplied.plc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtHigherKindFullyApplied.plc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtHigherKindFullyApplied.type.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtHigherKindFullyApplied.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtHigherKindFullyApplied.type.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtHigherKindFullyApplied.type.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtHigherKindFullyApplied.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtHigherKindFullyApplied.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtHigherKindFullyApplied.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtHigherKindFullyApplied.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtHigherKindWithCond.plc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtHigherKindWithCond.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtHigherKindWithCond.plc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtHigherKindWithCond.plc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtHigherKindWithCond.type.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtHigherKindWithCond.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtHigherKindWithCond.type.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtHigherKindWithCond.type.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtHigherKindWithCond.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtHigherKindWithCond.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtHigherKindWithCond.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtHigherKindWithCond.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtInteger.plc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtInteger.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtInteger.plc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtInteger.plc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtInteger.type.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtInteger.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtInteger.type.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtInteger.type.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtInteger.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtInteger.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtInteger.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtInteger.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowInteger.plc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowInteger.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowInteger.plc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowInteger.plc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowInteger.type.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowInteger.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowInteger.type.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowInteger.type.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowInteger.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowInteger.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowInteger.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowInteger.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowIntegerApplied1.plc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowIntegerApplied1.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowIntegerApplied1.plc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowIntegerApplied1.plc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowIntegerApplied1.type.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowIntegerApplied1.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowIntegerApplied1.type.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowIntegerApplied1.type.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowIntegerApplied1.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowIntegerApplied1.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowIntegerApplied1.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowIntegerApplied1.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowIntegerApplied2.plc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowIntegerApplied2.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowIntegerApplied2.plc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowIntegerApplied2.plc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowIntegerApplied2.type.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowIntegerApplied2.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowIntegerApplied2.type.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowIntegerApplied2.type.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowIntegerApplied2.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowIntegerApplied2.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowIntegerApplied2.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowIntegerApplied2.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowIntegerAppliedApplied.plc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowIntegerAppliedApplied.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowIntegerAppliedApplied.plc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowIntegerAppliedApplied.plc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowIntegerAppliedApplied.type.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowIntegerAppliedApplied.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowIntegerAppliedApplied.type.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowIntegerAppliedApplied.type.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowIntegerAppliedApplied.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowIntegerAppliedApplied.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowIntegerAppliedApplied.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowIntegerAppliedApplied.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowIntegerWithCond.plc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowIntegerWithCond.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowIntegerWithCond.plc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowIntegerWithCond.plc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowIntegerWithCond.type.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowIntegerWithCond.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowIntegerWithCond.type.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowIntegerWithCond.type.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowIntegerWithCond.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowIntegerWithCond.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerArrowIntegerWithCond.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerArrowIntegerWithCond.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerAtInteger.plc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerAtInteger.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerAtInteger.plc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerAtInteger.plc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerAtInteger.type.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerAtInteger.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerAtInteger.type.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerAtInteger.type.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerAtInteger.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerAtInteger.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerAtInteger.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerAtInteger.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerFullyApplied.plc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerFullyApplied.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerFullyApplied.plc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerFullyApplied.plc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerFullyApplied.type.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerFullyApplied.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerFullyApplied.type.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerFullyApplied.type.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerFullyApplied.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerFullyApplied.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerFullyApplied.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerFullyApplied.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerWithCond.plc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerWithCond.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerWithCond.plc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerWithCond.plc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerWithCond.type.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerWithCond.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerWithCond.type.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerWithCond.type.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerWithCond.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerWithCond.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerWithCond.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerWithCond.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerWrongCondTypeSat.plc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerWrongCondTypeSat.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerWrongCondTypeSat.plc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerWrongCondTypeSat.plc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerWrongCondTypeSat.type.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerWrongCondTypeSat.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerWrongCondTypeSat.type.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerWrongCondTypeSat.type.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerWrongCondTypeSat.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerWrongCondTypeSat.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerWrongCondTypeSat.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerWrongCondTypeSat.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerWrongCondTypeUnSat.plc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerWrongCondTypeUnSat.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerWrongCondTypeUnSat.plc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerWrongCondTypeUnSat.plc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerWrongCondTypeUnSat.type.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerWrongCondTypeUnSat.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerWrongCondTypeUnSat.type.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerWrongCondTypeUnSat.type.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerWrongCondTypeUnSat.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerWrongCondTypeUnSat.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtIntegerWrongCondTypeUnSat.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtIntegerWrongCondTypeUnSat.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtString.plc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtString.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtString.plc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtString.plc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtString.type.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtString.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtString.type.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtString.type.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtString.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtString.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtString.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtString.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtStringFullyApplied.plc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtStringFullyApplied.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtStringFullyApplied.plc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtStringFullyApplied.plc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtStringFullyApplied.type.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtStringFullyApplied.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtStringFullyApplied.type.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtStringFullyApplied.type.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtStringFullyApplied.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtStringFullyApplied.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtStringFullyApplied.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtStringFullyApplied.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtStringWithCond.plc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtStringWithCond.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtStringWithCond.plc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtStringWithCond.plc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtStringWithCond.type.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtStringWithCond.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtStringWithCond.type.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtStringWithCond.type.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtStringWithCond.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtStringWithCond.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtStringWithCond.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtStringWithCond.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtStringWithCondWithIntegerWithString.plc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtStringWithCondWithIntegerWithString.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtStringWithCondWithIntegerWithString.plc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtStringWithCondWithIntegerWithString.plc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtStringWithCondWithIntegerWithString.type.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtStringWithCondWithIntegerWithString.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtStringWithCondWithIntegerWithString.type.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtStringWithCondWithIntegerWithString.type.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtStringWithCondWithIntegerWithString.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtStringWithCondWithIntegerWithString.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteAtStringWithCondWithIntegerWithString.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteAtStringWithCondWithIntegerWithString.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteTypeTermType.plc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteTypeTermType.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteTypeTermType.plc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteTypeTermType.plc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteTypeTermType.type.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteTypeTermType.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteTypeTermType.type.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteTypeTermType.type.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteTypeTermType.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteTypeTermType.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteTypeTermType.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteTypeTermType.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteUninstantiatedFullyApplied.plc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteUninstantiatedFullyApplied.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteUninstantiatedFullyApplied.plc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteUninstantiatedFullyApplied.plc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteUninstantiatedFullyApplied.type.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteUninstantiatedFullyApplied.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteUninstantiatedFullyApplied.type.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteUninstantiatedFullyApplied.type.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteUninstantiatedFullyApplied.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteUninstantiatedFullyApplied.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteUninstantiatedFullyApplied.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteUninstantiatedFullyApplied.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteUninstantiatedWithCond.plc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteUninstantiatedWithCond.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteUninstantiatedWithCond.plc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteUninstantiatedWithCond.plc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteUninstantiatedWithCond.type.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteUninstantiatedWithCond.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteUninstantiatedWithCond.type.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteUninstantiatedWithCond.type.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteUninstantiatedWithCond.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteUninstantiatedWithCond.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/iteUninstantiatedWithCond.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/iteUninstantiatedWithCond.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/mulInstError1.plc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/mulInstError1.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/mulInstError1.plc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/mulInstError1.plc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/mulInstError1.type.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/mulInstError1.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/mulInstError1.type.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/mulInstError1.type.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/mulInstError1.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/mulInstError1.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/mulInstError1.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/mulInstError1.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/mulInstError2.plc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/mulInstError2.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/mulInstError2.plc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/mulInstError2.plc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/mulInstError2.type.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/mulInstError2.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/mulInstError2.type.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/mulInstError2.type.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/mulInstError2.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/mulInstError2.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/mulInstError2.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/mulInstError2.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/mulInstError3.plc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/mulInstError3.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/mulInstError3.plc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/mulInstError3.plc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/mulInstError3.type.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/mulInstError3.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/mulInstError3.type.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/mulInstError3.type.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/mulInstError3.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/mulInstError3.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/mulInstError3.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/mulInstError3.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/mulOK.plc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/mulOK.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/mulOK.plc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/mulOK.plc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/mulOK.type.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/mulOK.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/mulOK.type.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/mulOK.type.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/mulOK.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/mulOK.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/mulOK.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/mulOK.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/polyError.plc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/polyError.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/polyError.plc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/polyError.plc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/polyError.type.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/polyError.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/polyError.type.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/polyError.type.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/polyError.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/polyError.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/polyError.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/polyError.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/polyErrorInst.plc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/polyErrorInst.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/polyErrorInst.plc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/polyErrorInst.plc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/polyErrorInst.type.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/polyErrorInst.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/polyErrorInst.type.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/polyErrorInst.type.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/polyErrorInst.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/polyErrorInst.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/polyErrorInst.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/polyErrorInst.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/tag1.plc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/tag1.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/tag1.plc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/tag1.plc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/tag1.type.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/tag1.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/tag1.type.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/tag1.type.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/tag1.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/tag1.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/tag1.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/tag1.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/tag2.plc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/tag2.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/tag2.plc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/tag2.plc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/tag2.type.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/tag2.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/tag2.type.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/tag2.type.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/tag2.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/tag2.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/tag2.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/tag2.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/tagProd1.plc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/tagProd1.plc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/tagProd1.plc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/tagProd1.plc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/tagProd1.type.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/tagProd1.type.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/tagProd1.type.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/tagProd1.type.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/tagProd1.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Golden/tagProd1.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Golden/tagProd1.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Golden/tagProd1.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/Fib/1.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/Fib/1.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/Fib/1.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/Fib/1.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/Fib/2.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/Fib/2.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/Fib/2.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/Fib/2.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/Fib/3.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/Fib/3.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/Fib/3.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/Fib/3.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/IdNat/0.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/IdNat/0.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/IdNat/0.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/IdNat/0.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/IdNat/3.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/IdNat/3.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/IdNat/3.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/IdNat/3.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/IdNat/6.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/IdNat/6.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/IdNat/6.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/IdNat/6.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/IdNat/9.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/IdNat/9.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/IdNat/9.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/IdNat/9.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/IfThenElse/0.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/IfThenElse/0.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/IfThenElse/0.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/IfThenElse/0.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/IfThenElse/1.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/IfThenElse/1.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/IfThenElse/1.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/IfThenElse/1.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/IfThenElse/2.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/IfThenElse/2.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/IfThenElse/2.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/IfThenElse/2.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/IfThenElse/3.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/IfThenElse/3.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/IfThenElse/3.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/IfThenElse/3.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/IfThenElse/4.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/IfThenElse/4.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/IfThenElse/4.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/IfThenElse/4.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/IfThenElse/5.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/IfThenElse/5.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Budget/IfThenElse/5.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Machines/Budget/IfThenElse/5.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/NumberOfStepCounters.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Machines/NumberOfStepCounters.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/NumberOfStepCounters.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Machines/NumberOfStepCounters.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Tallying/Fib/1.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Machines/Tallying/Fib/1.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Tallying/Fib/1.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Machines/Tallying/Fib/1.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Tallying/Fib/2.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Machines/Tallying/Fib/2.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Tallying/Fib/2.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Machines/Tallying/Fib/2.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Tallying/Fib/3.uplc.golden b/plutus-core/untyped-plutus-core/test/Evaluation/Machines/Tallying/Fib/3.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Evaluation/Machines/Tallying/Fib/3.uplc.golden rename to plutus-core/untyped-plutus-core/test/Evaluation/Machines/Tallying/Fib/3.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Transform/CaseOfCase/1.uplc.golden b/plutus-core/untyped-plutus-core/test/Transform/CaseOfCase/1.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Transform/CaseOfCase/1.uplc.golden rename to plutus-core/untyped-plutus-core/test/Transform/CaseOfCase/1.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Transform/CaseOfCase/2.uplc.golden b/plutus-core/untyped-plutus-core/test/Transform/CaseOfCase/2.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Transform/CaseOfCase/2.uplc.golden rename to plutus-core/untyped-plutus-core/test/Transform/CaseOfCase/2.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Transform/CaseOfCase/3.uplc.golden b/plutus-core/untyped-plutus-core/test/Transform/CaseOfCase/3.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Transform/CaseOfCase/3.uplc.golden rename to plutus-core/untyped-plutus-core/test/Transform/CaseOfCase/3.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Transform/CaseOfCase/withError.uplc.golden b/plutus-core/untyped-plutus-core/test/Transform/CaseOfCase/withError.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Transform/CaseOfCase/withError.uplc.golden rename to plutus-core/untyped-plutus-core/test/Transform/CaseOfCase/withError.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Transform/basic.uplc.golden b/plutus-core/untyped-plutus-core/test/Transform/basic.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Transform/basic.uplc.golden rename to plutus-core/untyped-plutus-core/test/Transform/basic.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Transform/basicInline.uplc.golden b/plutus-core/untyped-plutus-core/test/Transform/basicInline.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Transform/basicInline.uplc.golden rename to plutus-core/untyped-plutus-core/test/Transform/basicInline.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Transform/callsiteInline.uplc.golden b/plutus-core/untyped-plutus-core/test/Transform/callsiteInline.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Transform/callsiteInline.uplc.golden rename to plutus-core/untyped-plutus-core/test/Transform/callsiteInline.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Transform/cse1.uplc.golden b/plutus-core/untyped-plutus-core/test/Transform/cse1.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Transform/cse1.uplc.golden rename to plutus-core/untyped-plutus-core/test/Transform/cse1.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Transform/cse2.uplc.golden b/plutus-core/untyped-plutus-core/test/Transform/cse2.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Transform/cse2.uplc.golden rename to plutus-core/untyped-plutus-core/test/Transform/cse2.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Transform/cse3.uplc.golden b/plutus-core/untyped-plutus-core/test/Transform/cse3.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Transform/cse3.uplc.golden rename to plutus-core/untyped-plutus-core/test/Transform/cse3.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Transform/cseExpensive.uplc.golden b/plutus-core/untyped-plutus-core/test/Transform/cseExpensive.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Transform/cseExpensive.uplc.golden rename to plutus-core/untyped-plutus-core/test/Transform/cseExpensive.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Transform/extraDelays.uplc.golden b/plutus-core/untyped-plutus-core/test/Transform/extraDelays.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Transform/extraDelays.uplc.golden rename to plutus-core/untyped-plutus-core/test/Transform/extraDelays.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Transform/floatDelay1.uplc.golden b/plutus-core/untyped-plutus-core/test/Transform/floatDelay1.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Transform/floatDelay1.uplc.golden rename to plutus-core/untyped-plutus-core/test/Transform/floatDelay1.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Transform/floatDelay2.uplc.golden b/plutus-core/untyped-plutus-core/test/Transform/floatDelay2.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Transform/floatDelay2.uplc.golden rename to plutus-core/untyped-plutus-core/test/Transform/floatDelay2.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Transform/floatDelay3.uplc.golden b/plutus-core/untyped-plutus-core/test/Transform/floatDelay3.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Transform/floatDelay3.uplc.golden rename to plutus-core/untyped-plutus-core/test/Transform/floatDelay3.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Transform/forceDelayComplex.uplc.golden b/plutus-core/untyped-plutus-core/test/Transform/forceDelayComplex.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Transform/forceDelayComplex.uplc.golden rename to plutus-core/untyped-plutus-core/test/Transform/forceDelayComplex.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Transform/forceDelayMultiApply.uplc.golden b/plutus-core/untyped-plutus-core/test/Transform/forceDelayMultiApply.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Transform/forceDelayMultiApply.uplc.golden rename to plutus-core/untyped-plutus-core/test/Transform/forceDelayMultiApply.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Transform/forceDelayMultiForce.uplc.golden b/plutus-core/untyped-plutus-core/test/Transform/forceDelayMultiForce.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Transform/forceDelayMultiForce.uplc.golden rename to plutus-core/untyped-plutus-core/test/Transform/forceDelayMultiForce.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Transform/forceDelayNoApps.uplc.golden b/plutus-core/untyped-plutus-core/test/Transform/forceDelayNoApps.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Transform/forceDelayNoApps.uplc.golden rename to plutus-core/untyped-plutus-core/test/Transform/forceDelayNoApps.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Transform/forceDelayNoAppsLayered.uplc.golden b/plutus-core/untyped-plutus-core/test/Transform/forceDelayNoAppsLayered.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Transform/forceDelayNoAppsLayered.uplc.golden rename to plutus-core/untyped-plutus-core/test/Transform/forceDelayNoAppsLayered.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Transform/forceDelaySimple.uplc.golden b/plutus-core/untyped-plutus-core/test/Transform/forceDelaySimple.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Transform/forceDelaySimple.uplc.golden rename to plutus-core/untyped-plutus-core/test/Transform/forceDelaySimple.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Transform/inlineImpure1.uplc.golden b/plutus-core/untyped-plutus-core/test/Transform/inlineImpure1.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Transform/inlineImpure1.uplc.golden rename to plutus-core/untyped-plutus-core/test/Transform/inlineImpure1.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Transform/inlineImpure2.uplc.golden b/plutus-core/untyped-plutus-core/test/Transform/inlineImpure2.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Transform/inlineImpure2.uplc.golden rename to plutus-core/untyped-plutus-core/test/Transform/inlineImpure2.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Transform/inlineImpure3.uplc.golden b/plutus-core/untyped-plutus-core/test/Transform/inlineImpure3.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Transform/inlineImpure3.uplc.golden rename to plutus-core/untyped-plutus-core/test/Transform/inlineImpure3.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Transform/inlineImpure4.uplc.golden b/plutus-core/untyped-plutus-core/test/Transform/inlineImpure4.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Transform/inlineImpure4.uplc.golden rename to plutus-core/untyped-plutus-core/test/Transform/inlineImpure4.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Transform/inlinePure1.uplc.golden b/plutus-core/untyped-plutus-core/test/Transform/inlinePure1.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Transform/inlinePure1.uplc.golden rename to plutus-core/untyped-plutus-core/test/Transform/inlinePure1.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Transform/inlinePure2.uplc.golden b/plutus-core/untyped-plutus-core/test/Transform/inlinePure2.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Transform/inlinePure2.uplc.golden rename to plutus-core/untyped-plutus-core/test/Transform/inlinePure2.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Transform/inlinePure3.uplc.golden b/plutus-core/untyped-plutus-core/test/Transform/inlinePure3.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Transform/inlinePure3.uplc.golden rename to plutus-core/untyped-plutus-core/test/Transform/inlinePure3.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Transform/inlinePure4.uplc.golden b/plutus-core/untyped-plutus-core/test/Transform/inlinePure4.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Transform/inlinePure4.uplc.golden rename to plutus-core/untyped-plutus-core/test/Transform/inlinePure4.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Transform/interveningLambda.uplc.golden b/plutus-core/untyped-plutus-core/test/Transform/interveningLambda.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Transform/interveningLambda.uplc.golden rename to plutus-core/untyped-plutus-core/test/Transform/interveningLambda.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Transform/multiApp.uplc.golden b/plutus-core/untyped-plutus-core/test/Transform/multiApp.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Transform/multiApp.uplc.golden rename to plutus-core/untyped-plutus-core/test/Transform/multiApp.uplc.golden diff --git a/plutus-core/untyped-plutus-core/testlib/Transform/nested.uplc.golden b/plutus-core/untyped-plutus-core/test/Transform/nested.uplc.golden similarity index 100% rename from plutus-core/untyped-plutus-core/testlib/Transform/nested.uplc.golden rename to plutus-core/untyped-plutus-core/test/Transform/nested.uplc.golden From 82d1c902d8629d27c7f16919b2d64f4e22077ea1 Mon Sep 17 00:00:00 2001 From: Ana Pantilie Date: Wed, 16 Apr 2025 13:58:06 +0300 Subject: [PATCH 08/26] Bind free variables in inliner tests --- .../test/Transform/callsiteInline.uplc.golden | 2 +- .../test/Transform/inlineImpure4.uplc.golden | 2 +- .../test/Transform/inlinePure1.uplc.golden | 2 +- .../test/Transform/inlinePure2.uplc.golden | 2 +- .../testlib/Transform/Simplify.hs | 77 +++++++++++++------ 5 files changed, 58 insertions(+), 27 deletions(-) diff --git a/plutus-core/untyped-plutus-core/test/Transform/callsiteInline.uplc.golden b/plutus-core/untyped-plutus-core/test/Transform/callsiteInline.uplc.golden index c762b72fa51..a79ca1d0953 100644 --- a/plutus-core/untyped-plutus-core/test/Transform/callsiteInline.uplc.golden +++ b/plutus-core/untyped-plutus-core/test/Transform/callsiteInline.uplc.golden @@ -1 +1 @@ -(\a -> f (g 1 0) (a 2)) (\x y -> g y x) \ No newline at end of file +\f g -> (\a -> f (g 1 0) (a 2)) (\x y -> g y x) \ No newline at end of file diff --git a/plutus-core/untyped-plutus-core/test/Transform/inlineImpure4.uplc.golden b/plutus-core/untyped-plutus-core/test/Transform/inlineImpure4.uplc.golden index 08f14ca99e7..4998517af1f 100644 --- a/plutus-core/untyped-plutus-core/test/Transform/inlineImpure4.uplc.golden +++ b/plutus-core/untyped-plutus-core/test/Transform/inlineImpure4.uplc.golden @@ -1 +1 @@ -(\a b -> a) (force a) \ No newline at end of file +\a -> (\a b -> a) (force a) \ No newline at end of file diff --git a/plutus-core/untyped-plutus-core/test/Transform/inlinePure1.uplc.golden b/plutus-core/untyped-plutus-core/test/Transform/inlinePure1.uplc.golden index a89db790d73..7bfc1de61c8 100644 --- a/plutus-core/untyped-plutus-core/test/Transform/inlinePure1.uplc.golden +++ b/plutus-core/untyped-plutus-core/test/Transform/inlinePure1.uplc.golden @@ -1 +1 @@ -\b -> a \ No newline at end of file +\a b -> a \ No newline at end of file diff --git a/plutus-core/untyped-plutus-core/test/Transform/inlinePure2.uplc.golden b/plutus-core/untyped-plutus-core/test/Transform/inlinePure2.uplc.golden index a89db790d73..7bfc1de61c8 100644 --- a/plutus-core/untyped-plutus-core/test/Transform/inlinePure2.uplc.golden +++ b/plutus-core/untyped-plutus-core/test/Transform/inlinePure2.uplc.golden @@ -1 +1 @@ -\b -> a \ No newline at end of file +\a b -> a \ No newline at end of file diff --git a/plutus-core/untyped-plutus-core/testlib/Transform/Simplify.hs b/plutus-core/untyped-plutus-core/testlib/Transform/Simplify.hs index d9b867e6ca4..2be68cff59f 100644 --- a/plutus-core/untyped-plutus-core/testlib/Transform/Simplify.hs +++ b/plutus-core/untyped-plutus-core/testlib/Transform/Simplify.hs @@ -10,7 +10,8 @@ import PlutusCore.MkPlc (mkConstant, mkIterApp, mkIterAppNoAnn) import PlutusCore.Quote (Quote, freshName, runQuote) import Test.Tasty (TestTree, testGroup) import Transform.Simplify.Lib (goldenVsCse, goldenVsSimplified) -import UntypedPlutusCore (DefaultFun, DefaultUni, Name, Term (..)) +import UntypedPlutusCore (DefaultFun, DefaultUni, Name, Term (..), UVarDecl (..)) +import UntypedPlutusCore.MkUPlc (mkIterLamAbs) basic :: Term Name PLC.DefaultUni PLC.DefaultFun () basic = Force () $ Delay () $ mkConstant @Integer () 1 @@ -117,19 +118,32 @@ basicInline = runQuote $ do n <- freshName "a" pure $ Apply () (LamAbs () n (Var () n)) (mkConstant @Integer () 1) +-- | A helper function to create a term which tests whether the inliner +-- behaves as expected for a given pure or impure term. It receives +-- a 'Quote' that produces a term together with a list of free variables. +-- The free variables are bound at the top level of the final term in order +-- to ensure that the produced final term is well-scoped. mkInlinePurityTest - :: Quote (Term Name PLC.DefaultUni PLC.DefaultFun ()) + :: Quote ([Name], Term Name PLC.DefaultUni PLC.DefaultFun ()) -> Term Name PLC.DefaultUni PLC.DefaultFun () mkInlinePurityTest termToInline = runQuote $ do a <- freshName "a" b <- freshName "b" -- In `[(\a . \b . a) termToInline]`, `termToInline` will be inlined -- if and only if it is pure. - Apply () (LamAbs () a $ LamAbs () b $ Var () a) <$> termToInline + (freeVars, term) <- termToInline + let withTopLevelBindings = + mkIterLamAbs + (UVarDecl () <$> freeVars) + pure + $ withTopLevelBindings + $ Apply () (LamAbs () a $ LamAbs () b $ Var () a) term -- | A single @Var@ is pure. inlinePure1 :: Term Name PLC.DefaultUni PLC.DefaultFun () -inlinePure1 = mkInlinePurityTest $ Var () <$> freshName "a" +inlinePure1 = mkInlinePurityTest $ do + a <- freshName "a" + pure ([a], Var () a) {- | @force (delay a)@ is pure. @@ -137,7 +151,9 @@ Note that this relies on @forceDelayCancel@ to cancel the @force@ and the @delay otherwise the inliner would treat the term as impure. -} inlinePure2 :: Term Name PLC.DefaultUni PLC.DefaultFun () -inlinePure2 = mkInlinePurityTest $ Force () . Delay () . Var () <$> freshName "a" +inlinePure2 = mkInlinePurityTest $ do + a <- freshName "a" + pure ([a], Force () $ Delay () $ Var () a) {- | @[(\x -> \y -> [x x]) (con integer 1)]@ is pure. @@ -149,11 +165,13 @@ inlinePure3 :: Term Name PLC.DefaultUni PLC.DefaultFun () inlinePure3 = mkInlinePurityTest $ do x <- freshName "x" y <- freshName "y" - pure $ - Apply - () - (LamAbs () x $ LamAbs () y $ Apply () (Var () x) (Var () x)) - (mkConstant @Integer () 1) + let t = + Apply + () + (LamAbs () x $ LamAbs () y $ Apply () (Var () x) (Var () x)) + (mkConstant @Integer () 1) + vars = [] + pure (vars, t) {- | @force ([(\x -> delay (\y -> [x x])) (delay ([error (con integer 1)]))])@ is pure, but it is very tricky to see so. It requires us to match up a force and a @@ -163,19 +181,21 @@ inlinePure4 :: Term Name PLC.DefaultUni PLC.DefaultFun () inlinePure4 = mkInlinePurityTest $ do x <- freshName "x" y <- freshName "y" - pure . Force () $ - Apply - () - (LamAbs () x $ Delay () $ LamAbs () y $ Apply () (Var () x) (Var () x)) - (Delay () $ Apply () (Error ()) $ mkConstant @Integer () 1) + let term = + Force () + $ Apply + () + (LamAbs () x $ Delay () $ LamAbs () y $ Apply () (Var () x) (Var () x)) + (Delay () $ Apply () (Error ()) $ mkConstant @Integer () 1) + pure ([], term) -- | @error@ is impure. inlineImpure1 :: Term Name PLC.DefaultUni PLC.DefaultFun () -inlineImpure1 = mkInlinePurityTest $ pure $ Error () +inlineImpure1 = mkInlinePurityTest $ pure ([], Error ()) -- | @force (delay error)@ is impure. inlineImpure2 :: Term Name PLC.DefaultUni PLC.DefaultFun () -inlineImpure2 = mkInlinePurityTest $ pure . Force () . Delay () $ Error () +inlineImpure2 = mkInlinePurityTest $ pure ([], Force () . Delay () $ Error ()) {- | @force (force (force (delay (delay (delay (error))))))@ is impure, since it is the same as @error@. @@ -184,21 +204,31 @@ inlineImpure3 :: Term Name PLC.DefaultUni PLC.DefaultFun () inlineImpure3 = mkInlinePurityTest $ pure - . Force () + ( [] + , Force () . Force () . Force () . Delay () . Delay () . Delay () - $ Error () + $ Error () + ) {- | @force (force (force (delay (delay a))))@ is impure, since @a@ may expand to an impure term such as @error@. -} inlineImpure4 :: Term Name PLC.DefaultUni PLC.DefaultFun () -inlineImpure4 = - mkInlinePurityTest $ - Force () . Force () . Force () . Delay () . Delay () . Var () <$> freshName "a" +inlineImpure4 = mkInlinePurityTest $ do + a <- freshName "a" + let term = + Force () + . Force () + . Force () + . Delay () + . Delay () + . Var () + $ a + pure ([a], term) {- | @(\a -> f (a 0 1) (a 2)) (\x y -> g x y)@ @@ -223,7 +253,8 @@ callsiteInline = runQuote $ do , mkIterAppNoAnn (Var () a) [mkConstant @Integer () 2] ] arg = LamAbs () x . LamAbs () y $ mkIterAppNoAnn (Var () g) [Var () y, Var () x] - pure $ Apply () fun arg + termWithBoundTopLevel = LamAbs () f $ LamAbs () g $ Apply () fun arg + pure termWithBoundTopLevel multiApp :: Term Name PLC.DefaultUni PLC.DefaultFun () multiApp = runQuote $ do From 538ef30d8afb7e03bf65934e1378f9e5fd1b2b8e Mon Sep 17 00:00:00 2001 From: Ana Pantilie Date: Wed, 16 Apr 2025 14:03:30 +0300 Subject: [PATCH 09/26] Bind free variables in forceDelay tests --- .../test/Transform/forceDelayComplex.uplc.golden | 2 +- .../test/Transform/forceDelayMultiApply.uplc.golden | 2 +- .../untyped-plutus-core/testlib/Transform/Simplify.hs | 8 +++++--- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/plutus-core/untyped-plutus-core/test/Transform/forceDelayComplex.uplc.golden b/plutus-core/untyped-plutus-core/test/Transform/forceDelayComplex.uplc.golden index 9f652a4d85c..2c8d62b6182 100644 --- a/plutus-core/untyped-plutus-core/test/Transform/forceDelayComplex.uplc.golden +++ b/plutus-core/untyped-plutus-core/test/Transform/forceDelayComplex.uplc.golden @@ -1 +1 @@ -funcVar 1 2 "foo" "bar" 3 3 \ No newline at end of file +\funcVar -> funcVar 1 2 "foo" "bar" 3 3 \ No newline at end of file diff --git a/plutus-core/untyped-plutus-core/test/Transform/forceDelayMultiApply.uplc.golden b/plutus-core/untyped-plutus-core/test/Transform/forceDelayMultiApply.uplc.golden index e3d9f788070..bdb05094045 100644 --- a/plutus-core/untyped-plutus-core/test/Transform/forceDelayMultiApply.uplc.golden +++ b/plutus-core/untyped-plutus-core/test/Transform/forceDelayMultiApply.uplc.golden @@ -1 +1 @@ -funcVar 1 2 3 \ No newline at end of file +\funcVar -> funcVar 1 2 3 \ No newline at end of file diff --git a/plutus-core/untyped-plutus-core/testlib/Transform/Simplify.hs b/plutus-core/untyped-plutus-core/testlib/Transform/Simplify.hs index 2be68cff59f..191f3c8718e 100644 --- a/plutus-core/untyped-plutus-core/testlib/Transform/Simplify.hs +++ b/plutus-core/untyped-plutus-core/testlib/Transform/Simplify.hs @@ -317,8 +317,9 @@ forceDelayMultiApply = runQuote $ do two = mkConstant @Integer () 2 three = mkConstant @Integer () 3 term = - Force () $ - mkIterAppNoAnn + LamAbs () funcVar + $ Force () + $ mkIterAppNoAnn ( LamAbs () x1 $ LamAbs () x2 $ LamAbs () x3 $ @@ -403,7 +404,8 @@ forceDelayComplex = runQuote $ do , Var () z2 ] app = - Apply + LamAbs () funcVar + $ Apply () ( Force () $ mkIterAppNoAnn From 880bd7779da37c27a0ad25e2acf42d040a14af64 Mon Sep 17 00:00:00 2001 From: Ana Pantilie Date: Wed, 16 Apr 2025 14:21:29 +0300 Subject: [PATCH 10/26] Add issue --- plutus-executables/test/certifier/Spec.hs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/plutus-executables/test/certifier/Spec.hs b/plutus-executables/test/certifier/Spec.hs index 03837834681..1a5659c2e7a 100644 --- a/plutus-executables/test/certifier/Spec.hs +++ b/plutus-executables/test/certifier/Spec.hs @@ -169,5 +169,16 @@ main = do , testGroup "serialisation certification" $ makeSerialisationTests srcTests --, testGroup "example serialisation certification" -- $ makeSerialisationExampleTests exampleNames - , testGroup "uplc simplifier tests" $ fmap (uncurry mkUPLCSimplifierTest) testSimplifyInputs + , testGroup "uplc simplifier tests" + $ fmap (uncurry mkUPLCSimplifierTest) testSimplifyInputs' ] + where + -- TODO(https://github.com/IntersectMBO/plutus-private/issues/1541): + -- this removes two tests which are currently failing; we should + -- fix the tests and add them back + testSimplifyInputs' = + filter + (\(name, _) -> + name /= "forceDelaySimple" && name /= "forceDelayComplex" + ) + testSimplifyInputs From d7974cba1a0bf5ef794873442eed68ac2dda0503 Mon Sep 17 00:00:00 2001 From: Ana Pantilie Date: Wed, 16 Apr 2025 14:29:59 +0300 Subject: [PATCH 11/26] Add type sig --- plutus-executables/src/AgdaTrace.hs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/plutus-executables/src/AgdaTrace.hs b/plutus-executables/src/AgdaTrace.hs index 79841e084e6..5af7724604f 100644 --- a/plutus-executables/src/AgdaTrace.hs +++ b/plutus-executables/src/AgdaTrace.hs @@ -9,6 +9,9 @@ import PlutusPrelude import UntypedPlutusCore qualified as UPLC import UntypedPlutusCore.Transform.Simplifier +mkAgdaTrace + :: SimplifierTrace UPLC.Name UPLC.DefaultUni UPLC.DefaultFun a + -> [(SimplifierStage, (AgdaFFI.UTerm, AgdaFFI.UTerm))] mkAgdaTrace (SimplifierTrace simplTrace) = reverse $ processAgdaAST <$> simplTrace where processAgdaAST Simplification {beforeAST, stage, afterAST} = From 051383fa1e5cf0f38110372ca1a74f805f5a2fe5 Mon Sep 17 00:00:00 2001 From: Ana Pantilie Date: Thu, 17 Apr 2025 14:55:22 +0300 Subject: [PATCH 12/26] Add UPLC CSE tests to certifier test suite --- .../test/Transform/cse3.uplc.golden | 2 +- .../testlib/Transform/Simplify.hs | 17 ++++++---- .../testlib/Transform/Simplify/Lib.hs | 17 ++++++++-- plutus-executables/test/certifier/Spec.hs | 32 +++++++++++++++++-- 4 files changed, 54 insertions(+), 14 deletions(-) diff --git a/plutus-core/untyped-plutus-core/test/Transform/cse3.uplc.golden b/plutus-core/untyped-plutus-core/test/Transform/cse3.uplc.golden index f85dabf4e25..0d8220dc2aa 100644 --- a/plutus-core/untyped-plutus-core/test/Transform/cse3.uplc.golden +++ b/plutus-core/untyped-plutus-core/test/Transform/cse3.uplc.golden @@ -1,4 +1,4 @@ -\x -> +\f x -> (\cse -> f (addInteger 1 (addInteger cse cse)) (addInteger 2 (addInteger cse cse))) (addInteger 0 x) \ No newline at end of file diff --git a/plutus-core/untyped-plutus-core/testlib/Transform/Simplify.hs b/plutus-core/untyped-plutus-core/testlib/Transform/Simplify.hs index 191f3c8718e..f6ba6377ea8 100644 --- a/plutus-core/untyped-plutus-core/testlib/Transform/Simplify.hs +++ b/plutus-core/untyped-plutus-core/testlib/Transform/Simplify.hs @@ -472,7 +472,7 @@ cse3 = runQuote $ do mkIterApp (LamAbs () z (plus (con 2) (plus (Var () z) (Var () z)))) [((), plus (con 0) (Var () x))] - pure $ LamAbs () x (mkIterApp (Var () f) [((), arg1), ((), arg2)]) + pure $ LamAbs () f $ LamAbs () x (mkIterApp (Var () f) [((), arg1), ((), arg2)]) -- ((1+2) + (3+4) + ...) -- + @@ -514,14 +514,17 @@ testSimplifyInputs = , ("forceDelayComplex", forceDelayComplex) ] +testCseInputs :: [(String, Term Name PLC.DefaultUni PLC.DefaultFun ())] +testCseInputs = + [ ("cse1", cse1) + , ("cse2", cse2) + , ("cse3", cse3) + , ("cseExpensive", cseExpensive) + ] + test_simplify :: TestTree test_simplify = testGroup "simplify" $ fmap (uncurry goldenVsSimplified) testSimplifyInputs - <> - [ goldenVsCse "cse1" cse1 - , goldenVsCse "cse2" cse2 - , goldenVsCse "cse3" cse3 - , goldenVsCse "cseExpensive" cseExpensive - ] + <> fmap (uncurry goldenVsCse) testCseInputs diff --git a/plutus-core/untyped-plutus-core/testlib/Transform/Simplify/Lib.hs b/plutus-core/untyped-plutus-core/testlib/Transform/Simplify/Lib.hs index 38054363da9..45fbc7b3c6a 100644 --- a/plutus-core/untyped-plutus-core/testlib/Transform/Simplify/Lib.hs +++ b/plutus-core/untyped-plutus-core/testlib/Transform/Simplify/Lib.hs @@ -12,8 +12,8 @@ import PlutusPrelude (Default (def)) import Test.Tasty (TestTree) import Test.Tasty.Golden (goldenVsString) import UntypedPlutusCore (Name, SimplifierTrace, Term, defaultSimplifyOpts, runSimplifierT, - simplifyTerm, soInlineCallsiteGrowth, soMaxCseIterations, - soMaxSimplifierIterations, termSimplifier) + soInlineCallsiteGrowth, soMaxCseIterations, soMaxSimplifierIterations, + termSimplifier) -- TODO Fix duplication with other golden tests, quite annoying goldenVsPretty :: (PrettyPlc a) => String -> String -> a -> TestTree @@ -50,7 +50,18 @@ goldenVsCse :: String -> Term Name PLC.DefaultUni PLC.DefaultFun () -> TestTree goldenVsCse name = goldenVsPretty ".uplc.golden" name . PLC.runQuote - . simplifyTerm + . fmap fst + . testCse + +testCse + :: Term Name PLC.DefaultUni PLC.DefaultFun () + -> PLC.Quote + ( Term Name PLC.DefaultUni PLC.DefaultFun () + , SimplifierTrace Name PLC.DefaultUni PLC.DefaultFun () + ) +testCse = + runSimplifierT + . termSimplifier ( defaultSimplifyOpts -- Just run one iteration, to see what that does & soMaxSimplifierIterations .~ 0 diff --git a/plutus-executables/test/certifier/Spec.hs b/plutus-executables/test/certifier/Spec.hs index 1a5659c2e7a..77fc00c387b 100644 --- a/plutus-executables/test/certifier/Spec.hs +++ b/plutus-executables/test/certifier/Spec.hs @@ -147,10 +147,22 @@ makeSerialisationExampleTests :: [ String ] -> [ TestTree] makeSerialisationExampleTests = map (\testname -> testCase testname (agdaExampleCert testname)) -} -mkUPLCSimplifierTest :: String -> Term Name DefaultUni DefaultFun () -> TestTree -mkUPLCSimplifierTest name input = testCase name $ + +type SimplifierFunc + = Term Name PLC.DefaultUni PLC.DefaultFun () + -> PLC.Quote + ( Term Name PLC.DefaultUni PLC.DefaultFun () + , SimplifierTrace Name PLC.DefaultUni PLC.DefaultFun () + ) + +mkUPLCTest + :: SimplifierFunc + -> String + -> Term Name DefaultUni DefaultFun () + -> TestTree +mkUPLCTest simplifierFunc name input = testCase name $ let rawAgdaTrace = PLC.runQuote $ do - simplifierTrace <- snd <$> testSimplify input + simplifierTrace <- snd <$> simplifierFunc input return $ mkAgdaTrace simplifierTrace in case runCertifierMain rawAgdaTrace of @@ -159,6 +171,18 @@ mkUPLCSimplifierTest name input = testCase name $ Nothing -> assertFailure "The certifier exited with an error." +mkUPLCSimplifierTest + :: String + -> Term Name DefaultUni DefaultFun () + -> TestTree +mkUPLCSimplifierTest = mkUPLCTest testSimplify + +mkUPLCCseTest + :: String + -> Term Name DefaultUni DefaultFun () + -> TestTree +mkUPLCCseTest = mkUPLCTest testCse + main :: IO () main = do setLocaleEncoding utf8 @@ -171,6 +195,8 @@ main = do -- $ makeSerialisationExampleTests exampleNames , testGroup "uplc simplifier tests" $ fmap (uncurry mkUPLCSimplifierTest) testSimplifyInputs' + , testGroup "uplc cse tests" + $ fmap (uncurry mkUPLCCseTest) testCseInputs ] where -- TODO(https://github.com/IntersectMBO/plutus-private/issues/1541): From d382fb554382f536e2ca2e872c62019410eac332 Mon Sep 17 00:00:00 2001 From: Ana Pantilie Date: Thu, 17 Apr 2025 15:19:03 +0300 Subject: [PATCH 13/26] Add functions for adding certifier mock trace tests --- plutus-executables/test/certifier/Spec.hs | 49 +++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/plutus-executables/test/certifier/Spec.hs b/plutus-executables/test/certifier/Spec.hs index 77fc00c387b..47f43bf6943 100644 --- a/plutus-executables/test/certifier/Spec.hs +++ b/plutus-executables/test/certifier/Spec.hs @@ -10,6 +10,7 @@ import Data.Text qualified as T (Text, dropEnd, pack, takeWhileEnd, unpack) import GHC.IO.Encoding (setLocaleEncoding) import MAlonzo.Code.VerifiedCompilation (runCertifierMain) import PlutusCore qualified as PLC +import PlutusCore.MkPlc (mkConstant) import System.Exit import System.FilePath import System.IO @@ -171,6 +172,50 @@ mkUPLCTest simplifierFunc name input = testCase name $ Nothing -> assertFailure "The certifier exited with an error." +mkMockTracePair + :: SimplifierStage + -> Term Name DefaultUni DefaultFun () + -> Term Name DefaultUni DefaultFun () + -> SimplifierTrace Name DefaultUni DefaultFun () +mkMockTracePair stage before' after' = + SimplifierTrace + { simplifierTrace = + [ Simplification + { beforeAST = before' + , stage = stage + , afterAST = after' + } + ] + } + +runCertifierWithMockTrace + :: SimplifierTrace Name DefaultUni DefaultFun () + -> IO Bool +runCertifierWithMockTrace trace = do + let rawAgdaTrace = mkAgdaTrace trace + case runCertifierMain rawAgdaTrace of + Just result -> pure result + Nothing -> + assertFailure "The certifier exited with an error." + +testTrivialSuccess1 :: TestTree +testTrivialSuccess1 = + testCase "testTrivialSuccess1" $ do + let before' = mkConstant () (1 :: Integer) + after' = mkConstant () (1 :: Integer) + trace = mkMockTracePair FloatDelay before' after' + result <- runCertifierWithMockTrace trace + assertBool "The certifier returned false." result + +testTrivialFailure1 :: TestTree +testTrivialFailure1 = + testCase "testTrivialFailure1" $ do + let before' = mkConstant () (1 :: Integer) + after' = mkConstant () (2 :: Integer) + trace = mkMockTracePair FloatDelay before' after' + result <- runCertifierWithMockTrace trace + assertBool "The certifier returned true when it shouldn't have." (not result) + mkUPLCSimplifierTest :: String -> Term Name DefaultUni DefaultFun () @@ -197,6 +242,10 @@ main = do $ fmap (uncurry mkUPLCSimplifierTest) testSimplifyInputs' , testGroup "uplc cse tests" $ fmap (uncurry mkUPLCCseTest) testCseInputs + , testGroup "certifier unit tests" + [ testTrivialSuccess1 + , testTrivialFailure1 + ] ] where -- TODO(https://github.com/IntersectMBO/plutus-private/issues/1541): From 86ea81fa1a09d79e697f055682ca2ebcea53cccd Mon Sep 17 00:00:00 2001 From: Ana Pantilie Date: Tue, 22 Apr 2025 14:42:29 +0300 Subject: [PATCH 14/26] Refactor certifier tests --- plutus-executables/plutus-executables.cabal | 5 + plutus-executables/test/certifier/Spec.hs | 249 +----------------- .../certifier/Test/Certifier/Integration.hs | 151 +++++++++++ .../certifier/Test/Certifier/Simplifier.hs | 64 +++++ .../test/certifier/Test/Certifier/Unit.hs | 88 +++++++ 5 files changed, 315 insertions(+), 242 deletions(-) create mode 100644 plutus-executables/test/certifier/Test/Certifier/Integration.hs create mode 100644 plutus-executables/test/certifier/Test/Certifier/Simplifier.hs create mode 100644 plutus-executables/test/certifier/Test/Certifier/Unit.hs diff --git a/plutus-executables/plutus-executables.cabal b/plutus-executables/plutus-executables.cabal index 894d95a1050..cd343c32ed6 100644 --- a/plutus-executables/plutus-executables.cabal +++ b/plutus-executables/plutus-executables.cabal @@ -171,6 +171,11 @@ test-suite test-certifier type: exitcode-stdio-1.0 main-is: Spec.hs hs-source-dirs: test/certifier + other-modules: + Test.Certifier.Integration + Test.Certifier.Simplifier + Test.Certifier.Unit + build-depends: , base , filepath diff --git a/plutus-executables/test/certifier/Spec.hs b/plutus-executables/test/certifier/Spec.hs index 0c79c9c0986..c388978fe50 100644 --- a/plutus-executables/test/certifier/Spec.hs +++ b/plutus-executables/test/certifier/Spec.hs @@ -5,254 +5,19 @@ module Main (main) where -import AgdaTrace (mkAgdaTrace) -import Data.Text qualified as T (Text, dropEnd, pack, takeWhileEnd, unpack) -import GHC.IO.Encoding (setLocaleEncoding) -import MAlonzo.Code.VerifiedCompilation (runCertifierMain) -import PlutusCore qualified as PLC -import PlutusCore.MkPlc (mkConstant) -import System.Exit -import System.FilePath -import System.IO -import System.Process +import GHC.IO.Encoding (setLocaleEncoding, utf8) import Test.Tasty -import Test.Tasty.Extras (goldenVsTextM) -import Test.Tasty.HUnit -import Transform.Simplify -import Transform.Simplify.Lib -import UntypedPlutusCore -{- | Run an external executable with some arguments. This is for use inside - HUnit Assertions -} -runProg :: String -> [String] -> String -> IO T.Text -runProg prog args stdin' = do - (exitCode, output, err) <- readProcessWithExitCode prog args stdin' - case exitCode of - ExitFailure _ -> assertFailure $ prog ++ " failed: " ++ err - ExitSuccess -> pure () - return $ T.pack output - -makeUplcCert :: [ String ] -> String -> IO T.Text -makeUplcCert path name = do - let inputfile = foldr () ("UPLC" name ++ ".uplc") path - let args = ["optimise", "--certify", "TestCert", - "--input", inputfile, - "--print-mode", "Classic"] - runProg "uplc" args [] - -makeGoldenUplcCert :: [ String ] -> String -> TestTree -makeGoldenUplcCert path name = do - let goldenfile = foldr () ("Golden" name ++ ".golden") path - let result = makeUplcCert path name - goldenVsTextM name goldenfile result - --- These come from `uplc example -a` -exampleNames :: [String] -exampleNames = - [ "succInteger" - , "unitval" - , "true" - , "false" - , "churchZero" - , "churchSucc" - , "overapplication" - , "factorial" - , "fibonacci" - , "NatRoundTrip" - , "ScottListSum" - , "IfIntegers" - , "ApplyAdd1" - , "ApplyAdd2" - , "DivideByZero" - , "DivideByZeroDrop" - ] - -makeExampleM :: String -> IO T.Text -makeExampleM testname = do - example <- runProg "uplc" ["example", "-s", testname] [] - let args = ["optimise", "--certify", "TestCert", - "--print-mode", "Classic"] - runProg "uplc" args (T.unpack example) - -makeExample :: String -> Assertion -makeExample testname = do - result <- makeExampleM testname - let lastLine = T.takeWhileEnd (/='\n') $ T.dropEnd 1 result - assertBool - (testname ++ " fails to certify: " ++ T.unpack lastLine) - $ "The compilation was successfully certified." == lastLine - --- Serialisation tests: run the certifier to make a certificate, --- then try to load it in Agda. -runAgda :: String -> IO (ExitCode, String) -runAgda file = do - (exitCode, result, _) <- readProcessWithExitCode "agda-with-stdlib-and-metatheory" [file] [] - return (exitCode, result) - - -agdaTestCert :: [ String ] -> String -> Assertion -agdaTestCert path name = do - _ <- makeUplcCert path name - makeAgdaLibFile - (resCode, resText) <- runAgda "TestCert.agda" - assertBool (name ++ " creates an invalid certificate:" ++ resText) (resCode == ExitSuccess) - -makeAgdaLibFile :: Assertion -makeAgdaLibFile = do - let name = "TestCert.agda-lib" - let contents = unlines - [ "depend:" - , " plutus-metatheory" - , " standard-library-2.1.1" - , "include: ." - , " name: test-cert" - ] - writeFile name contents - -{- -agdaExampleCert :: String -> Assertion -agdaExampleCert name = do - _ <- makeExampleM name - (resCode, resText) <- runAgda "TestCert.agda" - assertBool ("Example " ++ name - ++ " creates an invalid certificate: \\n" ++ resText) - (resCode == ExitSuccess) --} - --- We were just calling the nested stuff with this constant, so it --- might as well be constant for now. -fixedPath :: [ String ] -fixedPath = ["test", "certifier"] - -srcTests :: [ String ] -srcTests = - [ "inc" - -- TODO: This is currently failing to certify. This will be fixed - -- after the PR that covers counter example tracing. - -- , "len" - , "MinBS" - , "AA2-CSE" - ] - -makeExampleTests :: [ String ] -> [ TestTree ] -makeExampleTests = map (\testname -> testCase testname (makeExample testname)) - -makeTestTree :: [ String ] -> [ TestTree ] -makeTestTree = map $ makeGoldenUplcCert fixedPath - -makeSerialisationTests :: [ String ] -> [ TestTree] -makeSerialisationTests = map (\testname -> testCase testname (agdaTestCert fixedPath testname)) - -{- -makeSerialisationExampleTests :: [ String ] -> [ TestTree] -makeSerialisationExampleTests = map (\testname -> testCase testname (agdaExampleCert testname)) --} - -type SimplifierFunc - = Term Name PLC.DefaultUni PLC.DefaultFun () - -> PLC.Quote - ( Term Name PLC.DefaultUni PLC.DefaultFun () - , SimplifierTrace Name PLC.DefaultUni PLC.DefaultFun () - ) - -mkUPLCTest - :: SimplifierFunc - -> String - -> Term Name DefaultUni DefaultFun () - -> TestTree -mkUPLCTest simplifierFunc name input = testCase name $ - let rawAgdaTrace = PLC.runQuote $ do - simplifierTrace <- snd <$> simplifierFunc input - return $ mkAgdaTrace simplifierTrace - in - case runCertifierMain rawAgdaTrace of - Just result -> - assertBool "The certifier returned false." result - Nothing -> - assertFailure "The certifier exited with an error." - -mkMockTracePair - :: SimplifierStage - -> Term Name DefaultUni DefaultFun () - -> Term Name DefaultUni DefaultFun () - -> SimplifierTrace Name DefaultUni DefaultFun () -mkMockTracePair stage before' after' = - SimplifierTrace - { simplifierTrace = - [ Simplification - { beforeAST = before' - , stage = stage - , afterAST = after' - } - ] - } - -runCertifierWithMockTrace - :: SimplifierTrace Name DefaultUni DefaultFun () - -> IO Bool -runCertifierWithMockTrace trace = do - let rawAgdaTrace = mkAgdaTrace trace - case runCertifierMain rawAgdaTrace of - Just result -> pure result - Nothing -> - assertFailure "The certifier exited with an error." - -testTrivialSuccess1 :: TestTree -testTrivialSuccess1 = - testCase "testTrivialSuccess1" $ do - let before' = mkConstant () (1 :: Integer) - after' = mkConstant () (1 :: Integer) - trace = mkMockTracePair FloatDelay before' after' - result <- runCertifierWithMockTrace trace - assertBool "The certifier returned false." result - -testTrivialFailure1 :: TestTree -testTrivialFailure1 = - testCase "testTrivialFailure1" $ do - let before' = mkConstant () (1 :: Integer) - after' = mkConstant () (2 :: Integer) - trace = mkMockTracePair FloatDelay before' after' - result <- runCertifierWithMockTrace trace - assertBool "The certifier returned true when it shouldn't have." (not result) - -mkUPLCSimplifierTest - :: String - -> Term Name DefaultUni DefaultFun () - -> TestTree -mkUPLCSimplifierTest = mkUPLCTest testSimplify - -mkUPLCCseTest - :: String - -> Term Name DefaultUni DefaultFun () - -> TestTree -mkUPLCCseTest = mkUPLCTest testCse +import Test.Certifier.Integration (integrationTests) +import Test.Certifier.Simplifier (simplifierTests) +import Test.Certifier.Unit (unitTests) main :: IO () main = do setLocaleEncoding utf8 defaultMain $ testGroup "Certification" - [ testGroup "simple certification" $ makeTestTree srcTests - , testGroup "example certification" $ makeExampleTests exampleNames - , testGroup "serialisation certification" $ makeSerialisationTests srcTests - --, testGroup "example serialisation certification" - -- $ makeSerialisationExampleTests exampleNames - , testGroup "uplc simplifier tests" - $ fmap (uncurry mkUPLCSimplifierTest) testSimplifyInputs' - , testGroup "uplc cse tests" - $ fmap (uncurry mkUPLCCseTest) testCseInputs - , testGroup "certifier unit tests" - [ testTrivialSuccess1 - , testTrivialFailure1 - ] + [ integrationTests + , simplifierTests + , unitTests ] - where - -- TODO(https://github.com/IntersectMBO/plutus-private/issues/1541): - -- this removes two tests which are currently failing; we should - -- fix the tests and add them back - testSimplifyInputs' = - filter - (\(name, _) -> - name /= "forceDelaySimple" && name /= "forceDelayComplex" - ) - testSimplifyInputs diff --git a/plutus-executables/test/certifier/Test/Certifier/Integration.hs b/plutus-executables/test/certifier/Test/Certifier/Integration.hs new file mode 100644 index 00000000000..fe0de06b5b2 --- /dev/null +++ b/plutus-executables/test/certifier/Test/Certifier/Integration.hs @@ -0,0 +1,151 @@ +module Test.Certifier.Integration where + +import Data.Text qualified as T (Text, dropEnd, pack, takeWhileEnd, unpack) +import System.Exit +import System.FilePath +import System.Process +import Test.Tasty +import Test.Tasty.Extras (goldenVsTextM) +import Test.Tasty.HUnit + +{- | The tests in this file run tests of the uplc certifier. Various + unoptimised UPLC is fed to the optimiser with the certifier turned + on, which will then call the Agda decision procedures for each of + the phases. -} + +{- | Run an external executable with some arguments. This is for use inside + HUnit Assertions -} +runProg :: String -> [String] -> String -> IO T.Text +runProg prog args stdin' = do + (exitCode, output, err) <- readProcessWithExitCode prog args stdin' + case exitCode of + ExitFailure _ -> assertFailure $ prog ++ " failed: " ++ err + ExitSuccess -> pure () + return $ T.pack output + +makeUplcCert :: [ String ] -> String -> IO T.Text +makeUplcCert path name = do + let inputfile = foldr () ("UPLC" name ++ ".uplc") path + let args = ["optimise", "--certify", "TestCert", + "--input", inputfile, + "--print-mode", "Classic"] + runProg "uplc" args [] + +makeGoldenUplcCert :: [ String ] -> String -> TestTree +makeGoldenUplcCert path name = do + let goldenfile = foldr () ("Golden" name ++ ".golden") path + let result = makeUplcCert path name + goldenVsTextM name goldenfile result + +-- These come from `uplc example -a` +exampleNames :: [String] +exampleNames = + [ "succInteger" + , "unitval" + , "true" + , "false" + , "churchZero" + , "churchSucc" + , "overapplication" + , "factorial" + , "fibonacci" + , "NatRoundTrip" + , "ScottListSum" + , "IfIntegers" + , "ApplyAdd1" + , "ApplyAdd2" + , "DivideByZero" + , "DivideByZeroDrop" + ] + +makeExampleM :: String -> IO T.Text +makeExampleM testname = do + example <- runProg "uplc" ["example", "-s", testname] [] + let args = ["optimise", "--certify", "TestCert", + "--print-mode", "Classic"] + runProg "uplc" args (T.unpack example) + +makeExample :: String -> Assertion +makeExample testname = do + result <- makeExampleM testname + let lastLine = T.takeWhileEnd (/='\n') $ T.dropEnd 1 result + assertBool + (testname ++ " fails to certify: " ++ T.unpack lastLine) + $ "The compilation was successfully certified." == lastLine + +-- Serialisation tests: run the certifier to make a certificate, +-- then try to load it in Agda. +runAgda :: String -> IO (ExitCode, String) +runAgda file = do + (exitCode, result, _) <- readProcessWithExitCode "agda-with-stdlib-and-metatheory" [file] [] + return (exitCode, result) + + +agdaTestCert :: [ String ] -> String -> Assertion +agdaTestCert path name = do + _ <- makeUplcCert path name + makeAgdaLibFile + (resCode, resText) <- runAgda "TestCert.agda" + assertBool (name ++ " creates an invalid certificate:" ++ resText) (resCode == ExitSuccess) + +makeAgdaLibFile :: Assertion +makeAgdaLibFile = do + let name = "TestCert.agda-lib" + let contents = unlines + [ "depend:" + , " plutus-metatheory" + , " standard-library-2.1.1" + , "include: ." + , " name: test-cert" + ] + writeFile name contents + +{- +agdaExampleCert :: String -> Assertion +agdaExampleCert name = do + _ <- makeExampleM name + (resCode, resText) <- runAgda "TestCert.agda" + assertBool ("Example " ++ name + ++ " creates an invalid certificate: \\n" ++ resText) + (resCode == ExitSuccess) +-} + +-- We were just calling the nested stuff with this constant, so it +-- might as well be constant for now. +fixedPath :: [ String ] +fixedPath = ["test", "certifier"] + +srcTests :: [ String ] +srcTests = + [ "inc" + -- TODO: This is currently failing to certify. This will be fixed + -- after the PR that covers counter example tracing. + -- , "len" + , "MinBS" + , "AA2-CSE" + ] + +makeExampleTests :: [ String ] -> [ TestTree ] +makeExampleTests = map (\testname -> testCase testname (makeExample testname)) + +makeTestTree :: [ String ] -> [ TestTree ] +makeTestTree = map $ makeGoldenUplcCert fixedPath + +makeSerialisationTests :: [ String ] -> [ TestTree] +makeSerialisationTests = map (\testname -> testCase testname (agdaTestCert fixedPath testname)) + +{- +makeSerialisationExampleTests :: [ String ] -> [ TestTree] +makeSerialisationExampleTests = map (\testname -> testCase testname (agdaExampleCert testname)) +-} + +integrationTests :: TestTree +integrationTests = + testGroup "certifier integration tests" + [ + -- testGroup "example serialisation certification" + -- $ makeSerialisationExampleTests exampleNames + testGroup "simple certification" $ makeTestTree srcTests + , testGroup "example certification" $ makeExampleTests exampleNames + , testGroup "serialisation certification" $ makeSerialisationTests srcTests + ] diff --git a/plutus-executables/test/certifier/Test/Certifier/Simplifier.hs b/plutus-executables/test/certifier/Test/Certifier/Simplifier.hs new file mode 100644 index 00000000000..e6646185401 --- /dev/null +++ b/plutus-executables/test/certifier/Test/Certifier/Simplifier.hs @@ -0,0 +1,64 @@ +module Test.Certifier.Simplifier where + +import AgdaTrace (mkAgdaTrace) +import MAlonzo.Code.VerifiedCompilation (runCertifierMain) +import PlutusCore qualified as PLC +import Test.Tasty +import Test.Tasty.HUnit +import Transform.Simplify +import Transform.Simplify.Lib +import UntypedPlutusCore + +type SimplifierFunc + = Term Name PLC.DefaultUni PLC.DefaultFun () + -> PLC.Quote + ( Term Name PLC.DefaultUni PLC.DefaultFun () + , SimplifierTrace Name PLC.DefaultUni PLC.DefaultFun () + ) + +mkUPLCTest + :: SimplifierFunc + -> String + -> Term Name DefaultUni DefaultFun () + -> TestTree +mkUPLCTest simplifierFunc name input = testCase name $ + let rawAgdaTrace = PLC.runQuote $ do + simplifierTrace <- snd <$> simplifierFunc input + return $ mkAgdaTrace simplifierTrace + in + case runCertifierMain rawAgdaTrace of + Just result -> + assertBool "The certifier returned false." result + Nothing -> + assertFailure "The certifier exited with an error." + +mkUPLCSimplifierTest + :: String + -> Term Name DefaultUni DefaultFun () + -> TestTree +mkUPLCSimplifierTest = mkUPLCTest testSimplify + +mkUPLCCseTest + :: String + -> Term Name DefaultUni DefaultFun () + -> TestTree +mkUPLCCseTest = mkUPLCTest testCse + +simplifierTests :: TestTree +simplifierTests = + testGroup "uplc simplifier tests" + [ testGroup "cse tests" + $ fmap (uncurry mkUPLCCseTest) testCseInputs + , testGroup "other optimisation tests" + $ fmap (uncurry mkUPLCSimplifierTest) testSimplifyInputs' + ] + where + -- TODO(https://github.com/IntersectMBO/plutus-private/issues/1541): + -- this removes two tests which are currently failing; we should + -- fix the tests and add them back + testSimplifyInputs' = + filter + (\(name, _) -> + name /= "forceDelaySimple" && name /= "forceDelayComplex" + ) + testSimplifyInputs diff --git a/plutus-executables/test/certifier/Test/Certifier/Unit.hs b/plutus-executables/test/certifier/Test/Certifier/Unit.hs new file mode 100644 index 00000000000..85ab30f70b7 --- /dev/null +++ b/plutus-executables/test/certifier/Test/Certifier/Unit.hs @@ -0,0 +1,88 @@ +module Test.Certifier.Unit where + +import PlutusCore qualified as PLC +import PlutusCore.MkPlc (mkConstant) +import UntypedPlutusCore + +import AgdaTrace (mkAgdaTrace) +import MAlonzo.Code.VerifiedCompilation (runCertifierMain) + +import Test.Tasty +import Test.Tasty.HUnit + +mkMockTracePair + :: SimplifierStage + -> Term Name DefaultUni DefaultFun () + -> Term Name DefaultUni DefaultFun () + -> SimplifierTrace Name DefaultUni DefaultFun () +mkMockTracePair stage before' after' = + SimplifierTrace + { simplifierTrace = + [ Simplification + { beforeAST = before' + , stage = stage + , afterAST = after' + } + ] + } + +runCertifierWithMockTrace + :: SimplifierTrace Name DefaultUni DefaultFun () + -> IO Bool +runCertifierWithMockTrace trace = do + let rawAgdaTrace = mkAgdaTrace trace + case runCertifierMain rawAgdaTrace of + Just result -> pure result + Nothing -> + assertFailure "The certifier exited with an error." + +testSuccess + :: String + -> SimplifierStage + -> Term Name PLC.DefaultUni PLC.DefaultFun () + -> Term Name PLC.DefaultUni PLC.DefaultFun () + -> TestTree +testSuccess testName st bf af = + testCase testName $ do + let trace = mkMockTracePair st bf af + result <- runCertifierWithMockTrace trace + assertBool + "The certifier was expected to succeed." + result + +testFailure + :: String + -> SimplifierStage + -> Term Name PLC.DefaultUni PLC.DefaultFun () + -> Term Name PLC.DefaultUni PLC.DefaultFun () + -> TestTree +testFailure testName st bf af = + testCase testName $ do + let trace = mkMockTracePair st bf af + result <- runCertifierWithMockTrace trace + assertBool + "The certifier was expected to fail." + (not result) + +testTrivialSuccess1 :: TestTree +testTrivialSuccess1 = + testSuccess + "Trivial success" + FloatDelay + (mkConstant () (1 :: Integer)) + (mkConstant () (1 :: Integer)) + +testTrivialFailure1 :: TestTree +testTrivialFailure1 = + testFailure + "Trivial failure" + FloatDelay + (mkConstant () (1 :: Integer)) + (mkConstant () (2 :: Integer)) + +unitTests :: TestTree +unitTests = + testGroup "certifier unit tests" + [ testTrivialSuccess1 + , testTrivialFailure1 + ] From 18a45f1deb4dce4194c864592bfc5f7c67be932c Mon Sep 17 00:00:00 2001 From: Ana Pantilie Date: Fri, 25 Apr 2025 15:33:04 +0300 Subject: [PATCH 15/26] Address review comments --- plutus-executables/plutus-executables.cabal | 6 +++--- plutus-executables/test/certifier/Spec.hs | 6 +++--- .../test/certifier/Test/Certifier/{Unit.hs => AST.hs} | 2 +- .../Test/Certifier/{Integration.hs => Executable.hs} | 2 +- .../Test/Certifier/{Simplifier.hs => Optimizer.hs} | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) rename plutus-executables/test/certifier/Test/Certifier/{Unit.hs => AST.hs} (98%) rename plutus-executables/test/certifier/Test/Certifier/{Integration.hs => Executable.hs} (99%) rename plutus-executables/test/certifier/Test/Certifier/{Simplifier.hs => Optimizer.hs} (97%) diff --git a/plutus-executables/plutus-executables.cabal b/plutus-executables/plutus-executables.cabal index cd343c32ed6..4914b29c0e1 100644 --- a/plutus-executables/plutus-executables.cabal +++ b/plutus-executables/plutus-executables.cabal @@ -172,9 +172,9 @@ test-suite test-certifier main-is: Spec.hs hs-source-dirs: test/certifier other-modules: - Test.Certifier.Integration - Test.Certifier.Simplifier - Test.Certifier.Unit + Test.Certifier.AST + Test.Certifier.Executable + Test.Certifier.Optimizer build-depends: , base diff --git a/plutus-executables/test/certifier/Spec.hs b/plutus-executables/test/certifier/Spec.hs index c388978fe50..9d591a72c34 100644 --- a/plutus-executables/test/certifier/Spec.hs +++ b/plutus-executables/test/certifier/Spec.hs @@ -8,9 +8,9 @@ module Main (main) where import GHC.IO.Encoding (setLocaleEncoding, utf8) import Test.Tasty -import Test.Certifier.Integration (integrationTests) -import Test.Certifier.Simplifier (simplifierTests) -import Test.Certifier.Unit (unitTests) +import Test.Certifier.AST (unitTests) +import Test.Certifier.Executable (integrationTests) +import Test.Certifier.Optimizer (simplifierTests) main :: IO () main = do diff --git a/plutus-executables/test/certifier/Test/Certifier/Unit.hs b/plutus-executables/test/certifier/Test/Certifier/AST.hs similarity index 98% rename from plutus-executables/test/certifier/Test/Certifier/Unit.hs rename to plutus-executables/test/certifier/Test/Certifier/AST.hs index 85ab30f70b7..4f093ee0654 100644 --- a/plutus-executables/test/certifier/Test/Certifier/Unit.hs +++ b/plutus-executables/test/certifier/Test/Certifier/AST.hs @@ -1,4 +1,4 @@ -module Test.Certifier.Unit where +module Test.Certifier.AST where import PlutusCore qualified as PLC import PlutusCore.MkPlc (mkConstant) diff --git a/plutus-executables/test/certifier/Test/Certifier/Integration.hs b/plutus-executables/test/certifier/Test/Certifier/Executable.hs similarity index 99% rename from plutus-executables/test/certifier/Test/Certifier/Integration.hs rename to plutus-executables/test/certifier/Test/Certifier/Executable.hs index fe0de06b5b2..29a939504cc 100644 --- a/plutus-executables/test/certifier/Test/Certifier/Integration.hs +++ b/plutus-executables/test/certifier/Test/Certifier/Executable.hs @@ -1,4 +1,4 @@ -module Test.Certifier.Integration where +module Test.Certifier.Executable where import Data.Text qualified as T (Text, dropEnd, pack, takeWhileEnd, unpack) import System.Exit diff --git a/plutus-executables/test/certifier/Test/Certifier/Simplifier.hs b/plutus-executables/test/certifier/Test/Certifier/Optimizer.hs similarity index 97% rename from plutus-executables/test/certifier/Test/Certifier/Simplifier.hs rename to plutus-executables/test/certifier/Test/Certifier/Optimizer.hs index e6646185401..87caee0acb6 100644 --- a/plutus-executables/test/certifier/Test/Certifier/Simplifier.hs +++ b/plutus-executables/test/certifier/Test/Certifier/Optimizer.hs @@ -1,4 +1,4 @@ -module Test.Certifier.Simplifier where +module Test.Certifier.Optimizer where import AgdaTrace (mkAgdaTrace) import MAlonzo.Code.VerifiedCompilation (runCertifierMain) From e0ab4434c05674bc011d0a3c09ded93fcefffec5 Mon Sep 17 00:00:00 2001 From: Ana Pantilie Date: Fri, 25 Apr 2025 15:35:21 +0300 Subject: [PATCH 16/26] Fix --- plutus-executables/test/certifier/Spec.hs | 6 +++--- plutus-executables/test/certifier/Test/Certifier/AST.hs | 6 +++--- .../test/certifier/Test/Certifier/Executable.hs | 6 +++--- .../test/certifier/Test/Certifier/Optimizer.hs | 8 ++++---- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/plutus-executables/test/certifier/Spec.hs b/plutus-executables/test/certifier/Spec.hs index 9d591a72c34..13e05065524 100644 --- a/plutus-executables/test/certifier/Spec.hs +++ b/plutus-executables/test/certifier/Spec.hs @@ -8,9 +8,9 @@ module Main (main) where import GHC.IO.Encoding (setLocaleEncoding, utf8) import Test.Tasty -import Test.Certifier.AST (unitTests) -import Test.Certifier.Executable (integrationTests) -import Test.Certifier.Optimizer (simplifierTests) +import Test.Certifier.AST (astTests) +import Test.Certifier.Executable (executableTests) +import Test.Certifier.Optimizer (optimizerTests) main :: IO () main = do diff --git a/plutus-executables/test/certifier/Test/Certifier/AST.hs b/plutus-executables/test/certifier/Test/Certifier/AST.hs index 4f093ee0654..72f4469c74b 100644 --- a/plutus-executables/test/certifier/Test/Certifier/AST.hs +++ b/plutus-executables/test/certifier/Test/Certifier/AST.hs @@ -80,9 +80,9 @@ testTrivialFailure1 = (mkConstant () (1 :: Integer)) (mkConstant () (2 :: Integer)) -unitTests :: TestTree -unitTests = - testGroup "certifier unit tests" +astTests :: TestTree +astTests = + testGroup "certifier ast tests" [ testTrivialSuccess1 , testTrivialFailure1 ] diff --git a/plutus-executables/test/certifier/Test/Certifier/Executable.hs b/plutus-executables/test/certifier/Test/Certifier/Executable.hs index 29a939504cc..067df5a4b60 100644 --- a/plutus-executables/test/certifier/Test/Certifier/Executable.hs +++ b/plutus-executables/test/certifier/Test/Certifier/Executable.hs @@ -139,9 +139,9 @@ makeSerialisationExampleTests :: [ String ] -> [ TestTree] makeSerialisationExampleTests = map (\testname -> testCase testname (agdaExampleCert testname)) -} -integrationTests :: TestTree -integrationTests = - testGroup "certifier integration tests" +executableTests :: TestTree +executableTests = + testGroup "certifier executable tests" [ -- testGroup "example serialisation certification" -- $ makeSerialisationExampleTests exampleNames diff --git a/plutus-executables/test/certifier/Test/Certifier/Optimizer.hs b/plutus-executables/test/certifier/Test/Certifier/Optimizer.hs index 87caee0acb6..821d4b55cef 100644 --- a/plutus-executables/test/certifier/Test/Certifier/Optimizer.hs +++ b/plutus-executables/test/certifier/Test/Certifier/Optimizer.hs @@ -44,12 +44,12 @@ mkUPLCCseTest -> TestTree mkUPLCCseTest = mkUPLCTest testCse -simplifierTests :: TestTree -simplifierTests = - testGroup "uplc simplifier tests" +optimizerTests :: TestTree +optimizerTests = + testGroup "uplc optimizer tests" [ testGroup "cse tests" $ fmap (uncurry mkUPLCCseTest) testCseInputs - , testGroup "other optimisation tests" + , testGroup "simplification tests" $ fmap (uncurry mkUPLCSimplifierTest) testSimplifyInputs' ] where From 6a4effe078bb0aa19233d842a9afe9f34cbfebac Mon Sep 17 00:00:00 2001 From: Ana Pantilie Date: Fri, 25 Apr 2025 15:38:22 +0300 Subject: [PATCH 17/26] Fix --- plutus-executables/test/certifier/Spec.hs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plutus-executables/test/certifier/Spec.hs b/plutus-executables/test/certifier/Spec.hs index 13e05065524..daa35e56aa0 100644 --- a/plutus-executables/test/certifier/Spec.hs +++ b/plutus-executables/test/certifier/Spec.hs @@ -17,7 +17,7 @@ main = do setLocaleEncoding utf8 defaultMain $ testGroup "Certification" - [ integrationTests - , simplifierTests - , unitTests + [ executableTests + , optimizerTests + , astTests ] From 1d1d31a5b17fefd40743dfb959c91a45d397f2e6 Mon Sep 17 00:00:00 2001 From: Ana Pantilie Date: Fri, 25 Apr 2025 16:37:43 +0300 Subject: [PATCH 18/26] Add BS tests --- .../test/certifier/Test/Certifier/AST.hs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/plutus-executables/test/certifier/Test/Certifier/AST.hs b/plutus-executables/test/certifier/Test/Certifier/AST.hs index 72f4469c74b..204d1e2bd43 100644 --- a/plutus-executables/test/certifier/Test/Certifier/AST.hs +++ b/plutus-executables/test/certifier/Test/Certifier/AST.hs @@ -7,6 +7,7 @@ import UntypedPlutusCore import AgdaTrace (mkAgdaTrace) import MAlonzo.Code.VerifiedCompilation (runCertifierMain) +import Data.Text.Encoding qualified as Text import Test.Tasty import Test.Tasty.HUnit @@ -80,9 +81,27 @@ testTrivialFailure1 = (mkConstant () (1 :: Integer)) (mkConstant () (2 :: Integer)) +testByteStringEqSuccess :: TestTree +testByteStringEqSuccess = + testFailure + "bytestrings expected to not be equal" + FloatDelay + (mkConstant () (Text.encodeUtf8 "foo")) + (mkConstant () (Text.encodeUtf8 "bar")) + +testByteStringEqFailure :: TestTree +testByteStringEqFailure = + testSuccess + "bytestrings expected to be equal" + FloatDelay + (mkConstant () (Text.encodeUtf8 "foo")) + (mkConstant () (Text.encodeUtf8 "foo")) + astTests :: TestTree astTests = testGroup "certifier ast tests" [ testTrivialSuccess1 , testTrivialFailure1 + , testByteStringEqSuccess + , testByteStringEqFailure ] From 3e5b97a1be719129f8bd4e3286aed0804c36ef6a Mon Sep 17 00:00:00 2001 From: Ana Pantilie Date: Fri, 25 Apr 2025 18:21:34 +0300 Subject: [PATCH 19/26] WIP: Haskell version of builtinEq --- .../src/VerifiedCompilation/Equality.lagda.md | 62 ++++++++++++++++--- 1 file changed, 52 insertions(+), 10 deletions(-) diff --git a/plutus-metatheory/src/VerifiedCompilation/Equality.lagda.md b/plutus-metatheory/src/VerifiedCompilation/Equality.lagda.md index f3ca28b8fab..dde5fcc370a 100644 --- a/plutus-metatheory/src/VerifiedCompilation/Equality.lagda.md +++ b/plutus-metatheory/src/VerifiedCompilation/Equality.lagda.md @@ -156,15 +156,9 @@ procedures. record HsEq (A : Set) : Set where field hsEq : A → A → Agda.Builtin.Bool.Bool +{-# COMPILE GHC HsEq = data EqDict (EqDict) #-} open HsEq {{...}} public - -postulate - magicNeg : ∀ {A : Set} {a b : A} → ¬ a ≡ b - -magicBoolDec : {A : Set} → {a b : A} → Agda.Builtin.Bool.Bool → Dec (a ≡ b) -magicBoolDec true = yes primTrustMe -magicBoolDec false = no magicNeg ``` Our builtins types and functions are postulated. In order to decide equality @@ -179,9 +173,57 @@ are structurally equal so unification will succeed, and the function will return `yes refl`, while `builtinEq (mkByteString "foo") (mkByteString "bar")` will get stuck because unification does not succeed. ``` -builtinEq : {A : Set} → Binary.Decidable {A = A} _≡_ -builtinEq {A} x y with primTrustMe {Agda.Primitive.lzero} {A} {x} {y} -... | refl = yes refl +data HsBottom : Set where +{-# COMPILE GHC HsBottom = data HsBottom () #-} + +fromHsBottom : HsBottom → ⊥ +fromHsBottom () + +toHsBottom : ⊥ → HsBottom +toHsBottom () + +data HsEquiv {A : Set} (a : A) : A → Set where + hsRefl : HsEquiv a a +{-# COMPILE GHC HsEquiv = data HsEquiv (HsRefl) #-} + +fromHsEquiv : ∀ {A : Set} {x y : A} → HsEquiv x y → x ≡ y +fromHsEquiv hsRefl = refl + +toHsEquiv : ∀ {A : Set} {x y : A} → x ≡ y → HsEquiv x y +toHsEquiv refl = hsRefl + +data HsDec {A : Set} (a b : A) : Set where + hsYes : HsEquiv a b → HsDec a b + hsNo : (HsEquiv a b → HsBottom) → HsDec a b +{-# COMPILE GHC HsDec = data HsDec (HsYes | HsNo) #-} + +fromHsDec : ∀ {A : Set} {x y : A} → HsDec x y → Dec (x ≡ y) +fromHsDec (hsYes p) = yes (fromHsEquiv p) +fromHsDec (hsNo ¬p) = no λ x₁ → fromHsBottom (¬p (toHsEquiv x₁)) + +toHsDec : ∀ {A : Set} {x y : A} → Dec (x ≡ y) → HsDec x y +toHsDec (yes p) = hsYes (toHsEquiv p) +toHsDec (no ¬p) = hsNo λ x₁ → toHsBottom (¬p (fromHsEquiv x₁)) + +postulate + magicNeg : ∀ {A : Set} {a b : A} → ¬ a ≡ b + magicNeg' : ∀ {A : Set} {a b : A} → HsEquiv a b → HsBottom + +magicBoolDec : {A : Set} → {a b : A} → Agda.Builtin.Bool.Bool → Dec (a ≡ b) +magicBoolDec true = yes primTrustMe +magicBoolDec false = no magicNeg + +magicBoolDec' : {A : Set} → {a b : A} → Agda.Builtin.Bool.Bool → HsDec a b +magicBoolDec' true = hsYes (toHsEquiv primTrustMe) +magicBoolDec' false = hsNo magicNeg' + +builtinEq' : {A : Set} {{_ : HsEq A}} (x y : A) → HsDec x y +builtinEq' {A} x y with primTrustMe {Agda.Primitive.lzero} {A} {x} {y} +... | refl = hsYes hsRefl +{-# COMPILE GHC builtinEq' = (==) #-} + +builtinEq : {A : Set} {{_ : HsEq A}} → Binary.Decidable {A = A} _≡_ +builtinEq x y = fromHsDec (builtinEq' x y) instance HsEqBytestring : HsEq U.ByteString From 3cb9f2aadc76d53d6e8851700ac692bda3967c7c Mon Sep 17 00:00:00 2001 From: Ana Pantilie Date: Fri, 25 Apr 2025 18:55:39 +0300 Subject: [PATCH 20/26] Simplify solution --- plutus-metatheory/src/Utils.lagda.md | 4 +- .../src/VerifiedCompilation/Equality.lagda.md | 48 ++----------------- 2 files changed, 7 insertions(+), 45 deletions(-) diff --git a/plutus-metatheory/src/Utils.lagda.md b/plutus-metatheory/src/Utils.lagda.md index 588a271db89..a6a3dcaa654 100644 --- a/plutus-metatheory/src/Utils.lagda.md +++ b/plutus-metatheory/src/Utils.lagda.md @@ -176,8 +176,10 @@ postulate ByteString : Set {-# COMPILE GHC ByteString = type BS.ByteString #-} postulate - eqByteString : ByteString → ByteString → Bool mkByteString : String → ByteString + +eqByteString : ByteString → ByteString → Bool +eqByteString _ _ = Bool.true {-# COMPILE GHC eqByteString = (==) #-} ``` diff --git a/plutus-metatheory/src/VerifiedCompilation/Equality.lagda.md b/plutus-metatheory/src/VerifiedCompilation/Equality.lagda.md index dde5fcc370a..9a9dd6ef3a0 100644 --- a/plutus-metatheory/src/VerifiedCompilation/Equality.lagda.md +++ b/plutus-metatheory/src/VerifiedCompilation/Equality.lagda.md @@ -156,7 +156,6 @@ procedures. record HsEq (A : Set) : Set where field hsEq : A → A → Agda.Builtin.Bool.Bool -{-# COMPILE GHC HsEq = data EqDict (EqDict) #-} open HsEq {{...}} public ``` @@ -173,57 +172,18 @@ are structurally equal so unification will succeed, and the function will return `yes refl`, while `builtinEq (mkByteString "foo") (mkByteString "bar")` will get stuck because unification does not succeed. ``` -data HsBottom : Set where -{-# COMPILE GHC HsBottom = data HsBottom () #-} - -fromHsBottom : HsBottom → ⊥ -fromHsBottom () - -toHsBottom : ⊥ → HsBottom -toHsBottom () - -data HsEquiv {A : Set} (a : A) : A → Set where - hsRefl : HsEquiv a a -{-# COMPILE GHC HsEquiv = data HsEquiv (HsRefl) #-} - -fromHsEquiv : ∀ {A : Set} {x y : A} → HsEquiv x y → x ≡ y -fromHsEquiv hsRefl = refl - -toHsEquiv : ∀ {A : Set} {x y : A} → x ≡ y → HsEquiv x y -toHsEquiv refl = hsRefl - -data HsDec {A : Set} (a b : A) : Set where - hsYes : HsEquiv a b → HsDec a b - hsNo : (HsEquiv a b → HsBottom) → HsDec a b -{-# COMPILE GHC HsDec = data HsDec (HsYes | HsNo) #-} - -fromHsDec : ∀ {A : Set} {x y : A} → HsDec x y → Dec (x ≡ y) -fromHsDec (hsYes p) = yes (fromHsEquiv p) -fromHsDec (hsNo ¬p) = no λ x₁ → fromHsBottom (¬p (toHsEquiv x₁)) - -toHsDec : ∀ {A : Set} {x y : A} → Dec (x ≡ y) → HsDec x y -toHsDec (yes p) = hsYes (toHsEquiv p) -toHsDec (no ¬p) = hsNo λ x₁ → toHsBottom (¬p (fromHsEquiv x₁)) - postulate magicNeg : ∀ {A : Set} {a b : A} → ¬ a ≡ b - magicNeg' : ∀ {A : Set} {a b : A} → HsEquiv a b → HsBottom magicBoolDec : {A : Set} → {a b : A} → Agda.Builtin.Bool.Bool → Dec (a ≡ b) magicBoolDec true = yes primTrustMe magicBoolDec false = no magicNeg -magicBoolDec' : {A : Set} → {a b : A} → Agda.Builtin.Bool.Bool → HsDec a b -magicBoolDec' true = hsYes (toHsEquiv primTrustMe) -magicBoolDec' false = hsNo magicNeg' - -builtinEq' : {A : Set} {{_ : HsEq A}} (x y : A) → HsDec x y -builtinEq' {A} x y with primTrustMe {Agda.Primitive.lzero} {A} {x} {y} -... | refl = hsYes hsRefl -{-# COMPILE GHC builtinEq' = (==) #-} - builtinEq : {A : Set} {{_ : HsEq A}} → Binary.Decidable {A = A} _≡_ -builtinEq x y = fromHsDec (builtinEq' x y) +builtinEq {A} x y with hsEq x y +... | false = no magicNeg +... | true with primTrustMe {Agda.Primitive.lzero} {A} {x} {y} +... | refl = yes refl instance HsEqBytestring : HsEq U.ByteString From e4c85293be628f267a88ca3cb45fa4bcb575d7f6 Mon Sep 17 00:00:00 2001 From: Ana Pantilie Date: Fri, 25 Apr 2025 19:15:42 +0300 Subject: [PATCH 21/26] Fix other builtins as well --- plutus-metatheory/src/Utils.lagda.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/plutus-metatheory/src/Utils.lagda.md b/plutus-metatheory/src/Utils.lagda.md index a6a3dcaa654..8bf0f4a577c 100644 --- a/plutus-metatheory/src/Utils.lagda.md +++ b/plutus-metatheory/src/Utils.lagda.md @@ -262,24 +262,24 @@ postulate Bls12-381-G1-Element : Set {-# FOREIGN GHC import qualified PlutusCore.Crypto.BLS12_381.G1 as G1 #-} {-# COMPILE GHC Bls12-381-G1-Element = type G1.Element #-} -postulate - eqBls12-381-G1-Element : Bls12-381-G1-Element → Bls12-381-G1-Element → Bool +eqBls12-381-G1-Element : Bls12-381-G1-Element → Bls12-381-G1-Element → Bool +eqBls12-381-G1-Element _ _ = Bool.true {-# COMPILE GHC eqBls12-381-G1-Element = (==) #-} postulate Bls12-381-G2-Element : Set {-# FOREIGN GHC import qualified PlutusCore.Crypto.BLS12_381.G2 as G2 #-} {-# COMPILE GHC Bls12-381-G2-Element = type G2.Element #-} -postulate - eqBls12-381-G2-Element : Bls12-381-G2-Element → Bls12-381-G2-Element → Bool +eqBls12-381-G2-Element : Bls12-381-G2-Element → Bls12-381-G2-Element → Bool +eqBls12-381-G2-Element _ _ = Bool.true {-# COMPILE GHC eqBls12-381-G2-Element = (==) #-} postulate Bls12-381-MlResult : Set {-# FOREIGN GHC import qualified PlutusCore.Crypto.BLS12_381.Pairing as Pairing #-} {-# COMPILE GHC Bls12-381-MlResult = type Pairing.MlResult #-} -postulate - eqBls12-381-MlResult : Bls12-381-MlResult → Bls12-381-MlResult → Bool +eqBls12-381-MlResult : Bls12-381-MlResult → Bls12-381-MlResult → Bool +eqBls12-381-MlResult _ _ = Bool.true {-# COMPILE GHC eqBls12-381-MlResult = (==) #-} ``` From 4ca7ad606737215b3d65e0e9e124ba30754f6a59 Mon Sep 17 00:00:00 2001 From: Ana Pantilie Date: Fri, 25 Apr 2025 20:59:41 +0300 Subject: [PATCH 22/26] Document and finish --- plutus-metatheory/src/Utils.lagda.md | 13 ++- .../src/VerifiedCompilation/Equality.lagda.md | 94 +++++++++++++------ 2 files changed, 78 insertions(+), 29 deletions(-) diff --git a/plutus-metatheory/src/Utils.lagda.md b/plutus-metatheory/src/Utils.lagda.md index 8bf0f4a577c..0b7438ff0df 100644 --- a/plutus-metatheory/src/Utils.lagda.md +++ b/plutus-metatheory/src/Utils.lagda.md @@ -178,6 +178,8 @@ postulate ByteString : Set postulate mkByteString : String → ByteString +-- Should only be used as part of deciding builtin equality. +-- See "Decidable Equality of Builtins" in "VerifiedCompilation.Equality". eqByteString : ByteString → ByteString → Bool eqByteString _ _ = Bool.true {-# COMPILE GHC eqByteString = (==) #-} @@ -255,13 +257,18 @@ data DATA : Set where {-# FOREIGN GHC import PlutusCore.Data as D #-} {-# COMPILE GHC DATA = data Data (D.Constr | D.Map | D.List | D.I | D.B) #-} -postulate eqDATA : DATA → DATA → Bool +-- Agda implementation should only be used as part of deciding builtin equality. +-- See "Decidable Equality of Builtins" in "VerifiedCompilation.Equality". +eqDATA : DATA → DATA → Bool +eqDATA _ _ = Bool.true {-# COMPILE GHC eqDATA = (==) #-} postulate Bls12-381-G1-Element : Set {-# FOREIGN GHC import qualified PlutusCore.Crypto.BLS12_381.G1 as G1 #-} {-# COMPILE GHC Bls12-381-G1-Element = type G1.Element #-} +-- Agda implementation should only be used as part of deciding builtin equality. +-- See "Decidable Equality of Builtins" in "VerifiedCompilation.Equality". eqBls12-381-G1-Element : Bls12-381-G1-Element → Bls12-381-G1-Element → Bool eqBls12-381-G1-Element _ _ = Bool.true {-# COMPILE GHC eqBls12-381-G1-Element = (==) #-} @@ -270,6 +277,8 @@ postulate Bls12-381-G2-Element : Set {-# FOREIGN GHC import qualified PlutusCore.Crypto.BLS12_381.G2 as G2 #-} {-# COMPILE GHC Bls12-381-G2-Element = type G2.Element #-} +-- Agda implementation should only be used as part of deciding builtin equality. +-- See "Decidable Equality of Builtins" in "VerifiedCompilation.Equality". eqBls12-381-G2-Element : Bls12-381-G2-Element → Bls12-381-G2-Element → Bool eqBls12-381-G2-Element _ _ = Bool.true {-# COMPILE GHC eqBls12-381-G2-Element = (==) #-} @@ -278,6 +287,8 @@ postulate Bls12-381-MlResult : Set {-# FOREIGN GHC import qualified PlutusCore.Crypto.BLS12_381.Pairing as Pairing #-} {-# COMPILE GHC Bls12-381-MlResult = type Pairing.MlResult #-} +-- Agda implementation should only be used as part of deciding builtin equality. +-- See "Decidable Equality of Builtins" in "VerifiedCompilation.Equality". eqBls12-381-MlResult : Bls12-381-MlResult → Bls12-381-MlResult → Bool eqBls12-381-MlResult _ _ = Bool.true {-# COMPILE GHC eqBls12-381-MlResult = (==) #-} diff --git a/plutus-metatheory/src/VerifiedCompilation/Equality.lagda.md b/plutus-metatheory/src/VerifiedCompilation/Equality.lagda.md index 9a9dd6ef3a0..54608139057 100644 --- a/plutus-metatheory/src/VerifiedCompilation/Equality.lagda.md +++ b/plutus-metatheory/src/VerifiedCompilation/Equality.lagda.md @@ -148,9 +148,44 @@ decEq-TyTag (_⊢♯.pair t t₁) (_⊢♯.pair t' t'') with (t ≟ t') ×-dec ( ... | no ¬pq = no λ { refl → ¬pq (refl , refl) } ``` -The equality of the semantics of constants will depend on the equality of -the underlying types, so this can leverage the standard library decision -procedures. +# Decidable Equality of Builtins + +We need to decide equality between our builtin types. This is tricky because +this needs to be done at both the Agda type-checking time and at runtime, while +each stage has a completely different representation of the types. + +## Type-checking time vs runtime + +In Agda, the types are postulated, which means that at type-checking time we +may only rely on Agda's unification algorithm to decide equality. This can be +done by matching on `refl`, which checks whether the left hand side and the +right hand side of `≡` are definitionally equal. However, this does not translate +to the runtime stage, since at runtime the values which the `≡` type depends on +are erased. Therefore, we need to somehow "inject" a Haskell equality function which +triggers only at the runtime stage. + +## Why not just implement the builtin types in Agda? + +The problem is that Agda's FFI only allows non-postulated Agda types which are +representationally equivalent to the Haskell types they compile to. If we were to +implement the types in Agda, they would need to be equivalent to the highly optimized +and complicated Haskell types, and this is not feasible. + +We also cannot de-couple the Agda types from the Haskell types because the Agda +specification of UPLC is also used in conformance testing. + +## Using the quirks of the FFI to our advantage + +Agda's FFI machinery allows us to define functions with different runtime +and type-checking definitions (see the warning at https://agda.readthedocs.io/en/v2.7.0.1/language/foreign-function-interface.html#using-haskell-functions-from-agda). +We are still constrained by the type, which needs to agree between the two +stages, so we can't just define the two implementations arbitrarily. + +The simplest solution is to provide separate type-checking time and runtime definitions +for the instances of `HsEq`. During type-checking, the functions are essentially no-ops +by always returning `true`, while at runtime they defer to the Haskell implementation of +equality for each type. At type-checking time, we rely on matching on `refl` to defer to +Agda's unification algorithm, while at runtime, the matching on `refl` becomes a no-op. ``` record HsEq (A : Set) : Set where @@ -158,50 +193,53 @@ record HsEq (A : Set) : Set where hsEq : A → A → Agda.Builtin.Bool.Bool open HsEq {{...}} public + +instance + HsEqBytestring : HsEq U.ByteString + HsEqBytestring = record { hsEq = U.eqByteString } + HsEqBlsG1 : HsEq U.Bls12-381-G1-Element + HsEqBlsG1 = record { hsEq = U.eqBls12-381-G1-Element } + HsEqBlsG2 : HsEq U.Bls12-381-G2-Element + HsEqBlsG2 = record { hsEq = U.eqBls12-381-G2-Element } + HsEqBlsMlResult : HsEq U.Bls12-381-MlResult + HsEqBlsMlResult = record { hsEq = U.eqBls12-381-MlResult } + HsEqDATA : HsEq U.DATA + HsEqDATA = record { hsEq = U.eqDATA } + ``` -Our builtins types and functions are postulated. In order to decide equality -we rely on Agda's notion of definitional equality. +## An example + +Let's look at the behavior of `builtinEq (mkByteString "foo") (mkByteString "foo")` vs +`builtinEq (mkByteString "foo") (mkByteString "bar")`. -The definition of `builtinEq` might seem strange, but what happens is that -matching on `refl` triggers Agda's unification algorithm, which checks whether -the two terms are definitionally equal. +At type-checking time, if the two bytestrings are definitionally equal unification will succeed, +and the function will return `yes refl`. There is no way to return `no` because there is +no way to prove that the two terms are not equal without extra information about the +`ByteString` type. But this is enough to make Agda not succesfully type-check the program, +since it gets stuck while trying to normalize `primTrustMe`. + +At runtime, `hsEq` will defer to the Haskell implementation of bytestring equality, and return +the correct result based on that. In the `yes` case, matching on `refl` will be a no-op, +while in the `no` case, we return a phony negative proof. This is safe to do because we're +at runtime and the proof gets erased anyway. -For example: for `builtinEq (mkByteString "foo") (mkByteString "foo")` the two terms -are structurally equal so unification will succeed, and the function will return -`yes refl`, while `builtinEq (mkByteString "foo") (mkByteString "bar")` will get -stuck because unification does not succeed. ``` postulate magicNeg : ∀ {A : Set} {a b : A} → ¬ a ≡ b -magicBoolDec : {A : Set} → {a b : A} → Agda.Builtin.Bool.Bool → Dec (a ≡ b) -magicBoolDec true = yes primTrustMe -magicBoolDec false = no magicNeg - builtinEq : {A : Set} {{_ : HsEq A}} → Binary.Decidable {A = A} _≡_ builtinEq {A} x y with hsEq x y ... | false = no magicNeg ... | true with primTrustMe {Agda.Primitive.lzero} {A} {x} {y} ... | refl = yes refl -instance - HsEqBytestring : HsEq U.ByteString - HsEqBytestring = record { hsEq = U.eqByteString } - HsEqBlsG1 : HsEq U.Bls12-381-G1-Element - HsEqBlsG1 = record { hsEq = U.eqBls12-381-G1-Element } - HsEqBlsG2 : HsEq U.Bls12-381-G2-Element - HsEqBlsG2 = record { hsEq = U.eqBls12-381-G2-Element } - HsEqBlsMlResult : HsEq U.Bls12-381-MlResult - HsEqBlsMlResult = record { hsEq = U.eqBls12-381-MlResult } - decEq-⟦ _⊢♯.atomic AtomicTyCon.aInteger ⟧tag = Data.Integer.Properties._≟_ decEq-⟦ _⊢♯.atomic AtomicTyCon.aBytestring ⟧tag = builtinEq decEq-⟦ _⊢♯.atomic AtomicTyCon.aString ⟧tag = Data.String.Properties._≟_ decEq-⟦ _⊢♯.atomic AtomicTyCon.aUnit ⟧tag = Data.Unit.Properties._≟_ decEq-⟦ _⊢♯.atomic AtomicTyCon.aBool ⟧tag = Data.Bool.Properties._≟_ --- TODO(https://github.com/IntersectMBO/plutus-private/issues/1528): why does this use magicBoolDec? surely it can be implemented correctly -decEq-⟦ _⊢♯.atomic AtomicTyCon.aData ⟧tag v v₁ = magicBoolDec (U.eqDATA v v₁) +decEq-⟦ _⊢♯.atomic AtomicTyCon.aData ⟧tag = builtinEq decEq-⟦ _⊢♯.atomic AtomicTyCon.aBls12-381-g1-element ⟧tag = builtinEq decEq-⟦ _⊢♯.atomic AtomicTyCon.aBls12-381-g2-element ⟧tag = builtinEq decEq-⟦ _⊢♯.atomic AtomicTyCon.aBls12-381-mlresult ⟧tag = builtinEq From 94b94420e90105fc8012c5fa30acb55cfb793e26 Mon Sep 17 00:00:00 2001 From: Ana Pantilie Date: Mon, 28 Apr 2025 13:02:55 +0300 Subject: [PATCH 23/26] Fix --- plutus-metatheory/src/Utils.lagda.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plutus-metatheory/src/Utils.lagda.md b/plutus-metatheory/src/Utils.lagda.md index 0b7438ff0df..d629580b60b 100644 --- a/plutus-metatheory/src/Utils.lagda.md +++ b/plutus-metatheory/src/Utils.lagda.md @@ -178,7 +178,7 @@ postulate ByteString : Set postulate mkByteString : String → ByteString --- Should only be used as part of deciding builtin equality. +-- Agda implementation should only be used as part of deciding builtin equality. -- See "Decidable Equality of Builtins" in "VerifiedCompilation.Equality". eqByteString : ByteString → ByteString → Bool eqByteString _ _ = Bool.true From b38724844568ac9ba81844d0a6bc35f18f4d740d Mon Sep 17 00:00:00 2001 From: Ana Pantilie Date: Mon, 28 Apr 2025 13:08:28 +0300 Subject: [PATCH 24/26] Add changelog --- .../20250428_130712_ana.pantilie95_haskell_builtinEq.rst | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 plutus-metatheory/changelog.d/20250428_130712_ana.pantilie95_haskell_builtinEq.rst diff --git a/plutus-metatheory/changelog.d/20250428_130712_ana.pantilie95_haskell_builtinEq.rst b/plutus-metatheory/changelog.d/20250428_130712_ana.pantilie95_haskell_builtinEq.rst new file mode 100644 index 00000000000..955255053f7 --- /dev/null +++ b/plutus-metatheory/changelog.d/20250428_130712_ana.pantilie95_haskell_builtinEq.rst @@ -0,0 +1,5 @@ +Fixed +----- + +- Fixed the runtime representation of `VerifiedCompilation.Equality.builtinEq`. +- `DATA` equality now depends on `builtinEq` as well. From 7be56a5ac24e89412b006f11856e42531f137ecc Mon Sep 17 00:00:00 2001 From: Ana Pantilie Date: Wed, 30 Apr 2025 23:52:28 +0300 Subject: [PATCH 25/26] Workaround --- plutus-metatheory/src/Utils.lagda.md | 39 +++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/plutus-metatheory/src/Utils.lagda.md b/plutus-metatheory/src/Utils.lagda.md index d629580b60b..ab880e8630d 100644 --- a/plutus-metatheory/src/Utils.lagda.md +++ b/plutus-metatheory/src/Utils.lagda.md @@ -3,6 +3,7 @@ title: Utils layout: page --- ``` +{-# OPTIONS --allow-unsolved-metas #-} module Utils where ``` ## Imports @@ -259,8 +260,44 @@ data DATA : Set where -- Agda implementation should only be used as part of deciding builtin equality. -- See "Decidable Equality of Builtins" in "VerifiedCompilation.Equality". +{-# TERMINATING #-} eqDATA : DATA → DATA → Bool -eqDATA _ _ = Bool.true +eqDATA (ConstrDATA i₁ l₁) (ConstrDATA i₂ l₂) = + (Relation.Nullary.isYes (i₁ Data.Integer.≟ i₂)) + Data.Bool.∧ + L.and (L.zipWith eqDATA (toList l₁) (toList l₂)) +eqDATA (ConstrDATA x x₁) (MapDATA x₂) = Bool.false +eqDATA (ConstrDATA x x₁) (ListDATA x₂) = Bool.false +eqDATA (ConstrDATA x x₁) (iDATA x₂) = Bool.false +eqDATA (ConstrDATA x x₁) (bDATA x₂) = Bool.false +eqDATA (MapDATA x) (ConstrDATA x₁ x₂) = Bool.false +eqDATA (MapDATA m₁) (MapDATA m₂) = + L.and + (L.zipWith + (λ (x₁ , y₁) (x₂ , y₂) → eqDATA x₁ x₂ Data.Bool.∧ eqDATA y₁ y₂) + (toList m₁) + (toList m₂) + ) +eqDATA (MapDATA x) (ListDATA x₁) = Bool.false +eqDATA (MapDATA x) (iDATA x₁) = Bool.false +eqDATA (MapDATA x) (bDATA x₁) = Bool.false +eqDATA (ListDATA x) (ConstrDATA x₁ x₂) = Bool.false +eqDATA (ListDATA x) (MapDATA x₁) = Bool.false +eqDATA (ListDATA x) (ListDATA x₁) = L.and (L.zipWith eqDATA (toList x) (toList x₁)) +eqDATA (ListDATA x) (iDATA x₁) = Bool.false +eqDATA (ListDATA x) (bDATA x₁) = Bool.false +eqDATA (iDATA x) (ConstrDATA x₁ x₂) = Bool.false +eqDATA (iDATA x) (MapDATA x₁) = Bool.false +eqDATA (iDATA x) (ListDATA x₁) = Bool.false +eqDATA (iDATA i₁) (iDATA i₂) = Relation.Nullary.isYes (i₁ Data.Integer.≟ i₂) +eqDATA (iDATA x) (bDATA x₁) = Bool.false +eqDATA (bDATA x) (ConstrDATA x₁ x₂) = Bool.false +eqDATA (bDATA x) (MapDATA x₁) = Bool.false +eqDATA (bDATA x) (ListDATA x₁) = Bool.false +eqDATA (bDATA x) (iDATA x₁) = Bool.false +-- Warning: eqByteString is always trivially true at the Agda level. +-- See "Decidable Equality of Builtins" in "VerifiedCompilation.Equality". +eqDATA (bDATA b₁) (bDATA b₂) = eqByteString b₁ b₂ {-# COMPILE GHC eqDATA = (==) #-} postulate Bls12-381-G1-Element : Set From 4a735afb90ebcf75e803258f7eebcc3e878edcde Mon Sep 17 00:00:00 2001 From: Ana Pantilie Date: Wed, 30 Apr 2025 23:53:57 +0300 Subject: [PATCH 26/26] Fix --- plutus-metatheory/src/Utils.lagda.md | 1 - 1 file changed, 1 deletion(-) diff --git a/plutus-metatheory/src/Utils.lagda.md b/plutus-metatheory/src/Utils.lagda.md index ab880e8630d..e07ee8fd78a 100644 --- a/plutus-metatheory/src/Utils.lagda.md +++ b/plutus-metatheory/src/Utils.lagda.md @@ -3,7 +3,6 @@ title: Utils layout: page --- ``` -{-# OPTIONS --allow-unsolved-metas #-} module Utils where ``` ## Imports