diff --git a/nix/pkgs/haskell/materialized-darwin/.plan.nix/plutus-tx-plugin.nix b/nix/pkgs/haskell/materialized-darwin/.plan.nix/plutus-tx-plugin.nix index 83f539a7043..8bd0b76abd4 100644 --- a/nix/pkgs/haskell/materialized-darwin/.plan.nix/plutus-tx-plugin.nix +++ b/nix/pkgs/haskell/materialized-darwin/.plan.nix/plutus-tx-plugin.nix @@ -106,6 +106,7 @@ "Plugin/Errors/Spec" "Plugin/Functions/Spec" "Plugin/Laziness/Spec" + "Plugin/NoTrace/Spec" "Plugin/Primitives/Spec" "Plugin/Profiling/Spec" "Plugin/Typeclasses/Spec" diff --git a/nix/pkgs/haskell/materialized-linux/.plan.nix/plutus-tx-plugin.nix b/nix/pkgs/haskell/materialized-linux/.plan.nix/plutus-tx-plugin.nix index 83f539a7043..8bd0b76abd4 100644 --- a/nix/pkgs/haskell/materialized-linux/.plan.nix/plutus-tx-plugin.nix +++ b/nix/pkgs/haskell/materialized-linux/.plan.nix/plutus-tx-plugin.nix @@ -106,6 +106,7 @@ "Plugin/Errors/Spec" "Plugin/Functions/Spec" "Plugin/Laziness/Spec" + "Plugin/NoTrace/Spec" "Plugin/Primitives/Spec" "Plugin/Profiling/Spec" "Plugin/Typeclasses/Spec" diff --git a/nix/pkgs/haskell/materialized-windows/.plan.nix/plutus-tx-plugin.nix b/nix/pkgs/haskell/materialized-windows/.plan.nix/plutus-tx-plugin.nix index 83f539a7043..8bd0b76abd4 100644 --- a/nix/pkgs/haskell/materialized-windows/.plan.nix/plutus-tx-plugin.nix +++ b/nix/pkgs/haskell/materialized-windows/.plan.nix/plutus-tx-plugin.nix @@ -106,6 +106,7 @@ "Plugin/Errors/Spec" "Plugin/Functions/Spec" "Plugin/Laziness/Spec" + "Plugin/NoTrace/Spec" "Plugin/Primitives/Spec" "Plugin/Profiling/Spec" "Plugin/Typeclasses/Spec" diff --git a/plutus-tx-plugin/plutus-tx-plugin.cabal b/plutus-tx-plugin/plutus-tx-plugin.cabal index 77b0aa3b0a3..4e8734f23dd 100644 --- a/plutus-tx-plugin/plutus-tx-plugin.cabal +++ b/plutus-tx-plugin/plutus-tx-plugin.cabal @@ -97,6 +97,7 @@ test-suite plutus-tx-tests Plugin.Errors.Spec Plugin.Functions.Spec Plugin.Laziness.Spec + Plugin.NoTrace.Spec Plugin.Primitives.Spec Plugin.Profiling.Spec Plugin.Typeclasses.Spec @@ -128,5 +129,4 @@ test-suite plutus-tx-tests ghc-prim -any, containers -any -- NOTE: -g makes the plugin give better errors - -- NOTE: we disable the simplifier as it simplifies away some tests - ghc-options: -g -fplugin-opt PlutusTx.Plugin:max-simplifier-iterations=0 + ghc-options: -g diff --git a/plutus-tx-plugin/src/PlutusTx/Compiler/Builtins.hs b/plutus-tx-plugin/src/PlutusTx/Compiler/Builtins.hs index 1625398c82d..84ee8aa352f 100644 --- a/plutus-tx-plugin/src/PlutusTx/Compiler/Builtins.hs +++ b/plutus-tx-plugin/src/PlutusTx/Compiler/Builtins.hs @@ -42,6 +42,8 @@ import GhcPlugins qualified as GHC import Language.Haskell.TH.Syntax qualified as TH +import Control.Monad.Reader (MonadReader (ask)) + import Data.ByteString qualified as BS import Data.Proxy import Data.Text (Text) @@ -254,6 +256,7 @@ defineBuiltinType name ty = do -- | Add definitions for all the builtin terms to the environment. defineBuiltinTerms :: CompilingDefault uni fun m => m () defineBuiltinTerms = do + CompileContext {ccOpts=compileOpts} <- ask -- See Note [Builtin terms and values] -- Bool @@ -302,9 +305,24 @@ defineBuiltinTerms = do defineBuiltinTerm 'Builtins.appendString $ mkBuiltin PLC.AppendString defineBuiltinTerm 'Builtins.emptyString $ PIR.mkConstant () ("" :: Text) defineBuiltinTerm 'Builtins.equalsString $ mkBuiltin PLC.EqualsString - defineBuiltinTerm 'Builtins.trace $ mkBuiltin PLC.Trace defineBuiltinTerm 'Builtins.encodeUtf8 $ mkBuiltin PLC.EncodeUtf8 + -- Tracing + -- When `remove-trace` is specified, we define `trace` as `\_ a -> a` instead of the builtin version. + traceTerm <- if coRemoveTrace compileOpts + then liftQuote $ do + ta <- freshTyName "a" + t <- freshName "t" + a <- freshName "a" + pure $ PIR.tyAbs () ta (PLC.Type ()) + $ PIR.mkIterLamAbs + [ PIR.VarDecl () t (PIR.mkTyBuiltin @_ @Text ()) + , PIR.VarDecl () a (PLC.TyVar () ta) + ] + $ PIR.Var () a + else pure (mkBuiltin PLC.Trace) + defineBuiltinTerm 'Builtins.trace traceTerm + -- Pairs defineBuiltinTerm 'Builtins.fst $ mkBuiltin PLC.FstPair defineBuiltinTerm 'Builtins.snd $ mkBuiltin PLC.SndPair diff --git a/plutus-tx-plugin/src/PlutusTx/Compiler/Expr.hs b/plutus-tx-plugin/src/PlutusTx/Compiler/Expr.hs index 167999abd96..f5c558f3d2f 100644 --- a/plutus-tx-plugin/src/PlutusTx/Compiler/Expr.hs +++ b/plutus-tx-plugin/src/PlutusTx/Compiler/Expr.hs @@ -430,9 +430,9 @@ hoistExpr var t = do (PIR.Def var' (PIR.mkVar () var', PIR.Strict)) mempty - CompileContext {ccOpts=profileOpts} <- ask + CompileContext {ccOpts=compileOpts} <- ask t' <- - if coProfile profileOpts==All then do + if coProfile compileOpts==All then do let ty = PLC._varDeclType var' varName = PLC._varDeclName var' t'' <- compileExpr t diff --git a/plutus-tx-plugin/src/PlutusTx/Compiler/Types.hs b/plutus-tx-plugin/src/PlutusTx/Compiler/Types.hs index 99893cc0c18..9b71794aa16 100644 --- a/plutus-tx-plugin/src/PlutusTx/Compiler/Types.hs +++ b/plutus-tx-plugin/src/PlutusTx/Compiler/Types.hs @@ -37,8 +37,9 @@ type NameInfo = Map.Map TH.Name GHC.TyThing -- | Compilation options. data CompileOptions = CompileOptions { - coProfile :: ProfileOpts - , coCoverage :: CoverageOpts + coProfile :: ProfileOpts + , coCoverage :: CoverageOpts + , coRemoveTrace :: Bool } data CompileContext uni fun = CompileContext { diff --git a/plutus-tx-plugin/src/PlutusTx/Plugin.hs b/plutus-tx-plugin/src/PlutusTx/Plugin.hs index d0dace1d013..db47756f8a4 100644 --- a/plutus-tx-plugin/src/PlutusTx/Plugin.hs +++ b/plutus-tx-plugin/src/PlutusTx/Plugin.hs @@ -79,6 +79,12 @@ data PluginOptions = PluginOptions { , poDoSimplifierRemoveDeadBindings :: Bool , poProfile :: ProfileOpts , poCoverage :: CoverageOpts + + -- Setting to `True` defines `trace` as `\_ a -> a` instead of the builtin version. + -- Which effectively ignores the trace text. + -- TODO: when simpilers are enabled, we should reduce and inline a `\_ a -> a` call to just `a`. + -- Reducing `test/Plugin/NoTrace/traceComplex.plc.golden` is a good start. + , poRemoveTrace :: Bool } data PluginCtx = PluginCtx @@ -167,6 +173,7 @@ parsePluginArgs args = do [ l | l <- [minBound .. maxBound], elem' "coverage-all" ] ++ [ LocationCoverage | elem' "coverage-location" ] ++ [ BooleanCoverage | elem' "coverage-boolean" ] + , poRemoveTrace = elem' "remove-trace" } -- TODO: better parsing with failures pure opts @@ -337,7 +344,7 @@ compileMarkedExpr locStr codeTy origE = do nameInfo <- makePrimitiveNameInfo $ builtinNames ++ [''Bool, 'False, 'True, 'traceBool] modBreaks <- asks pcModuleModBreaks let ctx = CompileContext { - ccOpts = CompileOptions {coProfile =poProfile opts , coCoverage = poCoverage opts }, + ccOpts = CompileOptions {coProfile=poProfile opts,coCoverage=poCoverage opts,coRemoveTrace=poRemoveTrace opts}, ccFlags = flags, ccFamInstEnvs = famEnvs, ccNameInfo = nameInfo, diff --git a/plutus-tx-plugin/test/Budget/Lib.hs b/plutus-tx-plugin/test/Budget/Lib.hs index 15272c21e27..9da8db43fcf 100644 --- a/plutus-tx-plugin/test/Budget/Lib.hs +++ b/plutus-tx-plugin/test/Budget/Lib.hs @@ -4,9 +4,7 @@ {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-} -{-# OPTIONS_GHC -fplugin PlutusTx.Plugin #-} -{-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:defer-errors #-} -{-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:no-context #-} + module Budget.Lib where import Common diff --git a/plutus-tx-plugin/test/Budget/Spec.hs b/plutus-tx-plugin/test/Budget/Spec.hs index 093f49c4ec7..c1f6ca4dd5f 100644 --- a/plutus-tx-plugin/test/Budget/Spec.hs +++ b/plutus-tx-plugin/test/Budget/Spec.hs @@ -7,7 +7,9 @@ {-# LANGUAGE TypeApplications #-} {-# OPTIONS_GHC -fplugin PlutusTx.Plugin #-} {-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:defer-errors #-} +{-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:max-simplifier-iterations=0 #-} {-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:no-context #-} + module Budget.Spec where import Budget.Lib (goldenBudget) diff --git a/plutus-tx-plugin/test/IsData/Spec.hs b/plutus-tx-plugin/test/IsData/Spec.hs index 6e87d361fa2..04463cada9e 100644 --- a/plutus-tx-plugin/test/IsData/Spec.hs +++ b/plutus-tx-plugin/test/IsData/Spec.hs @@ -8,7 +8,9 @@ {-# OPTIONS_GHC -Wno-orphans #-} {-# OPTIONS_GHC -fplugin PlutusTx.Plugin #-} {-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:defer-errors #-} +{-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:max-simplifier-iterations=0 #-} {-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:no-context #-} + module IsData.Spec where import Common diff --git a/plutus-tx-plugin/test/Lib.hs b/plutus-tx-plugin/test/Lib.hs index 302f366394c..76040c0fb05 100644 --- a/plutus-tx-plugin/test/Lib.hs +++ b/plutus-tx-plugin/test/Lib.hs @@ -1,4 +1,5 @@ {-# LANGUAGE DerivingStrategies #-} +{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE ScopedTypeVariables #-} @@ -10,15 +11,22 @@ module Lib where import Common +import Control.Exception +import Control.Lens.Combinators (_1) +import Control.Monad.Except +import Data.Text (Text) +import Flat (Flat) + import PlcTestUtils +import PlutusPrelude (view) import PlutusTx.Code +import PlutusTx.Evaluation import PlutusCore qualified as PLC -import PlutusCore.Pretty (PrettyConst) +import PlutusCore.Pretty -import Flat (Flat) -import Prettyprinter +import UntypedPlutusCore qualified as UPLC instance (PLC.Closed uni, uni `PLC.Everywhere` Flat, uni `PLC.Everywhere` PrettyConst, PLC.GShow uni, Pretty fun, Flat fun) => ToUPlc (CompiledCodeIn uni fun a) uni fun where @@ -30,3 +38,26 @@ goldenPir :: (PLC.Closed uni, uni `PLC.Everywhere` PrettyConst, uni `PLC.Everywhere` Flat, PLC.GShow uni, Pretty fun, Flat fun) => String -> CompiledCodeIn uni fun a -> TestNested goldenPir name value = nestedGoldenVsDoc name $ pretty $ getPir value + +runPlcCek :: ToUPlc a PLC.DefaultUni PLC.DefaultFun => [a] -> ExceptT SomeException IO (UPLC.Term PLC.Name PLC.DefaultUni PLC.DefaultFun ()) +runPlcCek values = do + ps <- traverse toUPlc values + let p = foldl1 UPLC.applyProgram ps + either (throwError . SomeException) pure $ evaluateCek p + +runPlcCekTrace :: + ToUPlc a PLC.DefaultUni PLC.DefaultFun => + [a] -> + ExceptT SomeException IO ([Text], CekExTally PLC.DefaultFun, UPLC.Term PLC.Name PLC.DefaultUni PLC.DefaultFun ()) +runPlcCekTrace values = do + ps <- traverse toUPlc values + let p = foldl1 UPLC.applyProgram ps + let (logOut, TallyingSt tally _, result) = evaluateCekTrace p + res <- either (throwError . SomeException) pure result + pure (logOut, tally, res) + +goldenEvalCek :: ToUPlc a PLC.DefaultUni PLC.DefaultFun => String -> [a] -> TestNested +goldenEvalCek name values = nestedGoldenVsDocM name $ prettyPlcClassicDebug <$> (rethrow $ runPlcCek values) + +goldenEvalCekLog :: ToUPlc a PLC.DefaultUni PLC.DefaultFun => String -> [a] -> TestNested +goldenEvalCekLog name values = nestedGoldenVsDocM name $ pretty . view _1 <$> (rethrow $ runPlcCekTrace values) diff --git a/plutus-tx-plugin/test/Plugin/Basic/Spec.hs b/plutus-tx-plugin/test/Plugin/Basic/Spec.hs index 4a1ac9bed00..e825f5ac57a 100644 --- a/plutus-tx-plugin/test/Plugin/Basic/Spec.hs +++ b/plutus-tx-plugin/test/Plugin/Basic/Spec.hs @@ -4,9 +4,9 @@ {-# LANGUAGE TypeApplications #-} {-# OPTIONS_GHC -fplugin PlutusTx.Plugin #-} {-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:defer-errors #-} +{-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:max-simplifier-iterations=0 #-} {-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:no-context #-} - module Plugin.Basic.Spec where import Common diff --git a/plutus-tx-plugin/test/Plugin/Coverage/Spec.hs b/plutus-tx-plugin/test/Plugin/Coverage/Spec.hs index 80d05a57c3f..d05ca437419 100644 --- a/plutus-tx-plugin/test/Plugin/Coverage/Spec.hs +++ b/plutus-tx-plugin/test/Plugin/Coverage/Spec.hs @@ -2,7 +2,7 @@ {-# LANGUAGE TypeApplications #-} {-# OPTIONS_GHC -fno-omit-interface-pragmas #-} {-# OPTIONS_GHC -fplugin PlutusTx.Plugin -fplugin-opt PlutusTx.Plugin:coverage-all #-} -{-# OPTIONS_GHC -g #-} +{-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:max-simplifier-iterations=0 #-} module Plugin.Coverage.Spec (coverage) where diff --git a/plutus-tx-plugin/test/Plugin/Data/Spec.hs b/plutus-tx-plugin/test/Plugin/Data/Spec.hs index 870c6e362a1..e5635dfb967 100644 --- a/plutus-tx-plugin/test/Plugin/Data/Spec.hs +++ b/plutus-tx-plugin/test/Plugin/Data/Spec.hs @@ -4,7 +4,10 @@ {-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} {-# OPTIONS_GHC -fno-omit-interface-pragmas #-} -{-# OPTIONS_GHC -fplugin PlutusTx.Plugin -fplugin-opt PlutusTx.Plugin:defer-errors -fplugin-opt PlutusTx.Plugin:no-context #-} +{-# OPTIONS_GHC -fplugin PlutusTx.Plugin #-} +{-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:defer-errors #-} +{-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:max-simplifier-iterations=0 #-} +{-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:no-context #-} {-# OPTIONS_GHC -Wno-incomplete-patterns #-} {-# OPTIONS_GHC -Wno-name-shadowing #-} diff --git a/plutus-tx-plugin/test/Plugin/Errors/Spec.hs b/plutus-tx-plugin/test/Plugin/Errors/Spec.hs index 9d658a9633c..4101b611f70 100644 --- a/plutus-tx-plugin/test/Plugin/Errors/Spec.hs +++ b/plutus-tx-plugin/test/Plugin/Errors/Spec.hs @@ -4,7 +4,10 @@ {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-} -{-# OPTIONS_GHC -fplugin PlutusTx.Plugin -fplugin-opt PlutusTx.Plugin:defer-errors -fplugin-opt PlutusTx.Plugin:no-context #-} +{-# OPTIONS_GHC -fplugin PlutusTx.Plugin #-} +{-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:defer-errors #-} +{-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:max-simplifier-iterations=0 #-} +{-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:no-context #-} {-# OPTIONS_GHC -Wno-name-shadowing #-} module Plugin.Errors.Spec where diff --git a/plutus-tx-plugin/test/Plugin/Functions/Spec.hs b/plutus-tx-plugin/test/Plugin/Functions/Spec.hs index 7aeaa1f43c1..3b23dcf3f91 100644 --- a/plutus-tx-plugin/test/Plugin/Functions/Spec.hs +++ b/plutus-tx-plugin/test/Plugin/Functions/Spec.hs @@ -4,7 +4,10 @@ {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-} {-# LANGUAGE UnboxedTuples #-} -{-# OPTIONS_GHC -fplugin PlutusTx.Plugin -fplugin-opt PlutusTx.Plugin:defer-errors -fplugin-opt PlutusTx.Plugin:no-context #-} +{-# OPTIONS_GHC -fplugin PlutusTx.Plugin #-} +{-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:defer-errors #-} +{-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:max-simplifier-iterations=0 #-} +{-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:no-context #-} {-# OPTIONS_GHC -Wno-name-shadowing #-} module Plugin.Functions.Spec where diff --git a/plutus-tx-plugin/test/Plugin/Laziness/Spec.hs b/plutus-tx-plugin/test/Plugin/Laziness/Spec.hs index b81a9f42a1c..47db62821d3 100644 --- a/plutus-tx-plugin/test/Plugin/Laziness/Spec.hs +++ b/plutus-tx-plugin/test/Plugin/Laziness/Spec.hs @@ -4,6 +4,7 @@ {-# LANGUAGE TypeApplications #-} {-# OPTIONS_GHC -fplugin PlutusTx.Plugin #-} {-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:defer-errors #-} +{-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:max-simplifier-iterations=0 #-} {-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:no-context #-} module Plugin.Laziness.Spec where diff --git a/plutus-tx-plugin/test/Plugin/NoTrace/Spec.hs b/plutus-tx-plugin/test/Plugin/NoTrace/Spec.hs new file mode 100644 index 00000000000..a91efc60c3a --- /dev/null +++ b/plutus-tx-plugin/test/Plugin/NoTrace/Spec.hs @@ -0,0 +1,52 @@ +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE NoImplicitPrelude #-} +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE TemplateHaskell #-} +{-# LANGUAGE TypeApplications #-} +{-# OPTIONS_GHC -fplugin PlutusTx.Plugin #-} +{-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:defer-errors #-} +{-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:remove-trace #-} + +module Plugin.NoTrace.Spec where + +import Common +import Data.Proxy +import Lib +import Prelude qualified as H + +import PlutusTx +import PlutusTx.Builtins qualified as B +import PlutusTx.Plugin +import PlutusTx.Prelude qualified as P + +noTrace :: TestNested +noTrace = testNested "NoTrace" + [ goldenPir "trace" trace + , goldenPir "traceComplex" traceComplex + , goldenEvalCekLog "traceDirect" [traceDirect] + , goldenEvalCekLog "tracePrelude" [tracePrelude] + , goldenEvalCekLog "traceRepeatedly" [traceRepeatedly] + ] + +-- Half-stolen from Plugin.Primitives.Spec +trace :: CompiledCode (B.BuiltinString -> ()) +trace = plc (Proxy @"trace") (\(x :: B.BuiltinString) -> B.trace x ()) + +traceComplex :: CompiledCode (H.Bool -> ()) +traceComplex = plc (Proxy @"traceComplex") (\(b :: H.Bool) -> if b then P.trace "yes" () else P.traceError "no") + +-- Half-stolen from TH.Spec +traceDirect :: CompiledCode () +traceDirect = $$(compile [|| B.trace "test" () ||]) + +tracePrelude :: CompiledCode H.Integer +tracePrelude = $$(compile [|| P.trace "test" (1::H.Integer) ||]) + +traceRepeatedly :: CompiledCode P.Integer +traceRepeatedly = $$(compile + [|| + let i1 = P.trace "Making my first int" (1::P.Integer) + i2 = P.trace "Making my second int" (2::P.Integer) + i3 = P.trace "Adding them up" (i1 P.+ i2) + in i3 + ||]) diff --git a/plutus-tx-plugin/test/Plugin/NoTrace/trace.plc.golden b/plutus-tx-plugin/test/Plugin/NoTrace/trace.plc.golden new file mode 100644 index 00000000000..ccc780c492c --- /dev/null +++ b/plutus-tx-plugin/test/Plugin/NoTrace/trace.plc.golden @@ -0,0 +1,9 @@ +(program + (let + (nonrec) + (datatypebind + (datatype (tyvardecl Unit (type)) Unit_match (vardecl Unit Unit)) + ) + (lam ds (con string) Unit) + ) +) \ No newline at end of file diff --git a/plutus-tx-plugin/test/Plugin/NoTrace/traceComplex.plc.golden b/plutus-tx-plugin/test/Plugin/NoTrace/traceComplex.plc.golden new file mode 100644 index 00000000000..027a56531f3 --- /dev/null +++ b/plutus-tx-plugin/test/Plugin/NoTrace/traceComplex.plc.golden @@ -0,0 +1,53 @@ +(program + (let + (nonrec) + (datatypebind + (datatype + (tyvardecl Bool (type)) + + Bool_match + (vardecl True Bool) (vardecl False Bool) + ) + ) + (datatypebind + (datatype (tyvardecl Unit (type)) Unit_match (vardecl Unit Unit)) + ) + (termbind + (strict) + (vardecl trace (all a (type) (fun (con string) (fun a a)))) + (abs a (type) (lam t (con string) (lam a a a))) + ) + (lam + ds + Bool + { + [ + [ + { [ Bool_match ds ] (all dead (type) Unit) } + (abs dead (type) [ [ { trace Unit } (con string "yes") ] Unit ]) + ] + (abs + dead + (type) + (let + (nonrec) + (termbind + (strict) + (vardecl thunk (con unit)) + [ + { + [ Unit_match [ [ { trace Unit } (con string "no") ] Unit ] ] + (con unit) + } + (con unit ()) + ] + ) + (error Unit) + ) + ) + ] + (all dead (type) dead) + } + ) + ) +) \ No newline at end of file diff --git a/plutus-tx-plugin/test/Plugin/NoTrace/traceDirect.plc.golden b/plutus-tx-plugin/test/Plugin/NoTrace/traceDirect.plc.golden new file mode 100644 index 00000000000..0637a088a01 --- /dev/null +++ b/plutus-tx-plugin/test/Plugin/NoTrace/traceDirect.plc.golden @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/plutus-tx-plugin/test/Plugin/NoTrace/tracePrelude.plc.golden b/plutus-tx-plugin/test/Plugin/NoTrace/tracePrelude.plc.golden new file mode 100644 index 00000000000..0637a088a01 --- /dev/null +++ b/plutus-tx-plugin/test/Plugin/NoTrace/tracePrelude.plc.golden @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/plutus-tx-plugin/test/Plugin/NoTrace/traceRepeatedly.plc.golden b/plutus-tx-plugin/test/Plugin/NoTrace/traceRepeatedly.plc.golden new file mode 100644 index 00000000000..0637a088a01 --- /dev/null +++ b/plutus-tx-plugin/test/Plugin/NoTrace/traceRepeatedly.plc.golden @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/plutus-tx-plugin/test/Plugin/Primitives/Spec.hs b/plutus-tx-plugin/test/Plugin/Primitives/Spec.hs index 21bf12356c1..8f915a753c0 100644 --- a/plutus-tx-plugin/test/Plugin/Primitives/Spec.hs +++ b/plutus-tx-plugin/test/Plugin/Primitives/Spec.hs @@ -5,6 +5,7 @@ {-# OPTIONS_GHC -fplugin PlutusTx.Plugin #-} {-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:defer-errors #-} {-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:debug-context #-} +{-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:max-simplifier-iterations=0 #-} module Plugin.Primitives.Spec where diff --git a/plutus-tx-plugin/test/Plugin/Profiling/Spec.hs b/plutus-tx-plugin/test/Plugin/Profiling/Spec.hs index d044c49c32d..80da5ea9279 100644 --- a/plutus-tx-plugin/test/Plugin/Profiling/Spec.hs +++ b/plutus-tx-plugin/test/Plugin/Profiling/Spec.hs @@ -6,6 +6,7 @@ {-# OPTIONS_GHC -fplugin PlutusTx.Plugin #-} {-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:defer-errors #-} {-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:debug-context #-} +{-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:max-simplifier-iterations=0 #-} {-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:profile-all #-} -- | Tests for the profiling machinery. diff --git a/plutus-tx-plugin/test/Plugin/Spec.hs b/plutus-tx-plugin/test/Plugin/Spec.hs index e80c4acbe74..0813e842b11 100644 --- a/plutus-tx-plugin/test/Plugin/Spec.hs +++ b/plutus-tx-plugin/test/Plugin/Spec.hs @@ -8,6 +8,7 @@ import Plugin.Data.Spec import Plugin.Errors.Spec import Plugin.Functions.Spec import Plugin.Laziness.Spec +import Plugin.NoTrace.Spec import Plugin.Primitives.Spec import Plugin.Profiling.Spec import Plugin.Typeclasses.Spec @@ -19,6 +20,7 @@ tests = testNested "Plugin" [ , datat , functions , laziness + , noTrace , errors , typeclasses , profiling diff --git a/plutus-tx-plugin/test/Plugin/Typeclasses/Spec.hs b/plutus-tx-plugin/test/Plugin/Typeclasses/Spec.hs index 47d8248c10b..51a64f80211 100644 --- a/plutus-tx-plugin/test/Plugin/Typeclasses/Spec.hs +++ b/plutus-tx-plugin/test/Plugin/Typeclasses/Spec.hs @@ -3,7 +3,11 @@ {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-} {-# OPTIONS_GHC -fno-ignore-interface-pragmas #-} -{-# OPTIONS_GHC -fplugin PlutusTx.Plugin -fplugin-opt PlutusTx.Plugin:defer-errors -fplugin-opt PlutusTx.Plugin:no-context -fplugin-opt PlutusTx.Plugin:no-typecheck #-} +{-# OPTIONS_GHC -fplugin PlutusTx.Plugin #-} +{-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:defer-errors #-} +{-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:max-simplifier-iterations=0 #-} +{-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:no-context #-} +{-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:no-typecheck #-} module Plugin.Typeclasses.Spec where diff --git a/plutus-tx-plugin/test/StdLib/Spec.hs b/plutus-tx-plugin/test/StdLib/Spec.hs index 6b23bd57081..b411993d455 100644 --- a/plutus-tx-plugin/test/StdLib/Spec.hs +++ b/plutus-tx-plugin/test/StdLib/Spec.hs @@ -2,7 +2,10 @@ {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-} -{-# OPTIONS_GHC -fplugin PlutusTx.Plugin -fplugin-opt PlutusTx.Plugin:defer-errors -fplugin-opt PlutusTx.Plugin:no-context #-} +{-# OPTIONS_GHC -fplugin PlutusTx.Plugin #-} +{-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:defer-errors #-} +{-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:max-simplifier-iterations=0 #-} +{-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:no-context #-} module StdLib.Spec where diff --git a/plutus-tx-plugin/test/TH/Spec.hs b/plutus-tx-plugin/test/TH/Spec.hs index 78b6ced29f8..38eb0eccfe9 100644 --- a/plutus-tx-plugin/test/TH/Spec.hs +++ b/plutus-tx-plugin/test/TH/Spec.hs @@ -8,60 +8,26 @@ {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} -{-# OPTIONS_GHC -fplugin PlutusTx.Plugin -fplugin-opt PlutusTx.Plugin:defer-errors -fplugin-opt PlutusTx.Plugin:debug-context #-} +{-# OPTIONS_GHC -fplugin PlutusTx.Plugin #-} +{-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:debug-context #-} +{-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:defer-errors #-} +{-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:max-simplifier-iterations=0 #-} {-# OPTIONS_GHC -Wno-orphans #-} -{-# OPTIONS_GHC -g #-} module TH.Spec (tests) where import Common import Lib -import PlcTestUtils -import PlutusPrelude (view) -import TH.TestTH - -import Prelude qualified as Haskell +import PlutusCore.Pretty import PlutusTx import PlutusTx.Builtins qualified as Builtins -import PlutusTx.Evaluation import PlutusTx.Prelude +import Prelude qualified as Haskell -import PlutusCore qualified as PLC -import PlutusCore.Pretty -import UntypedPlutusCore -import UntypedPlutusCore qualified as UPLC - -import Control.Exception -import Control.Lens.Combinators (_1) -import Control.Monad.Except - -import Data.Text (Text) - -runPlcCek :: ToUPlc a PLC.DefaultUni PLC.DefaultFun => [a] -> ExceptT SomeException Haskell.IO (Term PLC.Name PLC.DefaultUni PLC.DefaultFun ()) -runPlcCek values = do - ps <- Haskell.traverse toUPlc values - let p = Haskell.foldl1 UPLC.applyProgram ps - either (throwError . SomeException) Haskell.pure $ evaluateCek p - -runPlcCekTrace :: - ToUPlc a PLC.DefaultUni PLC.DefaultFun => - [a] -> - ExceptT SomeException Haskell.IO ([Text], CekExTally PLC.DefaultFun, Term PLC.Name PLC.DefaultUni PLC.DefaultFun ()) -runPlcCekTrace values = do - ps <- Haskell.traverse toUPlc values - let p = Haskell.foldl1 UPLC.applyProgram ps - let (logOut, TallyingSt tally _, result) = evaluateCekTrace p - res <- either (throwError . SomeException) Haskell.pure result - Haskell.pure (logOut, tally, res) - -goldenEvalCek :: ToUPlc a PLC.DefaultUni PLC.DefaultFun => Haskell.String -> [a] -> TestNested -goldenEvalCek name values = nestedGoldenVsDocM name $ prettyPlcClassicDebug Haskell.<$> (rethrow $ runPlcCek values) - -goldenEvalCekLog :: ToUPlc a PLC.DefaultUni PLC.DefaultFun => Haskell.String -> [a] -> TestNested -goldenEvalCekLog name values = nestedGoldenVsDocM name $ pretty . view _1 Haskell.<$> (rethrow $ runPlcCekTrace values) +import TH.TestTH tests :: TestNested tests = testNested "TH" [ @@ -102,10 +68,10 @@ tracePrelude = $$(compile [|| trace "test" (1::Integer) ||]) traceRepeatedly :: CompiledCode Integer traceRepeatedly = $$(compile [|| - let i1 = trace "Making my first int" (1::Integer) - i2 = trace "Making my second int" (2::Integer) - i3 = trace "Adding them up" (i1 + i2) - in i3 + let i1 = trace "Making my first int" (1::Integer) + i2 = trace "Making my second int" (2::Integer) + i3 = trace "Adding them up" (i1 + i2) + in i3 ||]) data SomeType = One Integer | Two | Three ()