1
1
{-# LANGUAGE BlockArguments #-}
2
- {-# LANGUAGE NumericUnderscores #-}
3
2
{-# LANGUAGE OverloadedStrings #-}
4
3
{-# LANGUAGE ScopedTypeVariables #-}
5
4
6
5
module Transform.Inline.Spec where
7
6
8
- import Control.Monad.Reader (runReaderT )
9
- import Control.Monad.State (runStateT )
10
7
import Data.Maybe (fromMaybe , isNothing )
11
- import Data.MultiSet qualified as MultiSet
12
- import PlutusCore.Annotation (Inline (MayInline ))
13
- import PlutusCore.Quote (runQuote )
14
- import PlutusCore.Size (Size (.. ))
15
8
import PlutusPrelude (def )
16
9
import Test.Tasty (TestTree , testGroup )
17
10
import Test.Tasty.HUnit (Assertion , assertBool , testCase )
18
11
import UntypedPlutusCore (DefaultFun , DefaultUni , Name (.. ), Term (.. ))
19
12
import UntypedPlutusCore.Test.Term.Construction (addInteger , app , case_ , delay , lam , uniqueNames3 ,
20
13
uniqueNames4 , var )
21
- import UntypedPlutusCore.Transform.Inline (InlineHints (InlineHints ), InlineInfo (.. ), InlineM ,
22
- S (.. ), Subst (Subst ), TermEnv (TermEnv ),
23
- isFirstVarBeforeEffects , isVarDelayed )
24
-
25
- --------------------------------------------------------------------------------
26
- -- Tests -----------------------------------------------------------------------
14
+ import UntypedPlutusCore.Transform.Inline (isFirstVarBeforeEffects , isVarDelayed )
27
15
28
16
test_inline :: TestTree
29
17
test_inline =
30
18
testGroup
31
19
" Inline"
32
- [ testCase " var is before or after effects" testVarBeforeAfterEffects
20
+ [ testCase
21
+ " var is before or after effects"
22
+ testVarBeforeAfterEffects
33
23
, testGroup
34
24
" isVarDelayed"
35
25
[ testCase
@@ -47,11 +37,11 @@ test_inline =
47
37
testVarBeforeAfterEffects :: Assertion
48
38
testVarBeforeAfterEffects = do
49
39
assertBool " a is evaluated before effects" do
50
- testFirstVarBeforeEffects a term
40
+ isFirstVarBeforeEffects def a term
51
41
assertBool " b is evaluated before effects" do
52
- testFirstVarBeforeEffects b term
42
+ isFirstVarBeforeEffects def b term
53
43
assertBool " c is not evaluated after effects" $ not do
54
- testFirstVarBeforeEffects c term
44
+ isFirstVarBeforeEffects def c term
55
45
where
56
46
term :: Term Name DefaultUni DefaultFun ()
57
47
term =
@@ -107,28 +97,3 @@ testVarIsDelayedInCaseBranch = do
107
97
term = case_ (var b) [var a, var c]
108
98
109
99
(a, b, c, d) = uniqueNames4 " a" " b" " c" " d"
110
-
111
- --------------------------------------------------------------------------------
112
- -- Helper functions: -----------------------------------------------------------
113
-
114
- testFirstVarBeforeEffects :: Name -> Term Name DefaultUni DefaultFun () -> Bool
115
- testFirstVarBeforeEffects name = runInlineM . isFirstVarBeforeEffects name
116
-
117
- runInlineM :: InlineM Name DefaultUni DefaultFun () r -> r
118
- runInlineM m = result
119
- where
120
- (result, _finalState) =
121
- runQuote (runStateT (runReaderT m inlineInfo) initialState)
122
-
123
- inlineInfo :: InlineInfo Name DefaultFun ()
124
- inlineInfo =
125
- InlineInfo
126
- { _iiUsages = MultiSet. empty
127
- , _iiHints = InlineHints \ _ann _name -> MayInline
128
- , _iiBuiltinSemanticsVariant = def
129
- , _iiInlineConstants = True
130
- , _iiInlineCallsiteGrowth = Size 1_000_000
131
- }
132
-
133
- initialState :: S Name DefaultUni DefaultFun ()
134
- initialState = S {_subst = Subst (TermEnv mempty ), _vars = mempty }
0 commit comments