Skip to content

Commit 6b47fe9

Browse files
authored
[Test] Make 'test_mangle' not fail (#7297)
1 parent d26be3e commit 6b47fe9

File tree

4 files changed

+24
-12
lines changed
  • plutus-core
    • plutus-core/test/Names
    • testlib
      • PlutusCore/Generators/Hedgehog
      • UntypedPlutusCore/Generators/Hedgehog
    • untyped-plutus-core/testlib/Scoping

4 files changed

+24
-12
lines changed

plutus-core/plutus-core/test/Names/Spec.hs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import Control.Monad.Except (modifyError)
2727
import Data.String (IsString (fromString))
2828
import Data.Text qualified as Text
2929
import Hedgehog (Gen, Property, forAll, property, tripping, (/==), (===))
30+
import Hedgehog.Gen qualified as Gen
3031
import Test.Tasty (TestTree, testGroup)
3132
import Test.Tasty.Hedgehog (testPropertyNamed)
3233
import Test.Tasty.HUnit (assertBool, testCase, (@?=))
@@ -53,9 +54,10 @@ test_DeBruijnInteresting =
5354
test_mangle :: TestTree
5455
test_mangle =
5556
testPropertyNamed "equality does not survive mangling" "equality_mangling" . property $ do
56-
(term, termMangled) <- forAll . runAstGen $ do
57+
(term, termMangled) <- forAll . runAstGen . Gen.justT $ do
5758
term <- AST.genTerm
58-
(,) term <$> mangleNames term
59+
mayTermMang <- mangleNames term
60+
pure $ (,) term <$> mayTermMang
5961
term /== termMangled
6062
termMangled /== term
6163

plutus-core/testlib/PlutusCore/Generators/Hedgehog/AST.hs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -185,8 +185,12 @@ subset1 s
185185
where xs = Set.toList s
186186

187187
-- See Note [Name mangling]
188-
genNameMangler :: Set Name -> AstGen (Name -> AstGen (Maybe Name))
189-
genNameMangler names = Gen.justT $ do
188+
-- Returns a 'Maybe' instead of doing 'Gen.justT' at the end so that if the original term is hard to
189+
-- mangle (few names and they clash with what 'genNames' produces), then the caller can pick a
190+
-- different term instead of repeatedly trying to mangle the original one until Hedgehog runs out of
191+
-- steam.
192+
genNameMangler :: Set Name -> AstGen (Maybe (Name -> AstGen (Maybe Name)))
193+
genNameMangler names = do
190194
mayNamesMangle <- subset1 names
191195
for mayNamesMangle $ \namesMangle -> do
192196
let isNew name = not $ name `Set.member` namesMangle
@@ -212,7 +216,7 @@ allTermNames = setOf $ vTerm <^> tvTerm . coerced
212216
-- See Note [Name mangling]
213217
mangleNames
214218
:: Term TyName Name DefaultUni DefaultFun ()
215-
-> AstGen (Term TyName Name DefaultUni DefaultFun ())
219+
-> AstGen (Maybe (Term TyName Name DefaultUni DefaultFun ()))
216220
mangleNames term = do
217-
mang <- genNameMangler $ allTermNames term
218-
substAllNames mang term
221+
mayMang <- genNameMangler $ allTermNames term
222+
for mayMang $ \mang -> substAllNames mang term

plutus-core/testlib/UntypedPlutusCore/Generators/Hedgehog/AST.hs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ module UntypedPlutusCore.Generators.Hedgehog.AST
88
, mangleNames
99
) where
1010

11+
import PlutusPrelude
12+
1113
import PlutusCore.Generators.Hedgehog.AST qualified as PLC
1214

1315
import PlutusCore.Compiler.Erase
@@ -37,7 +39,9 @@ genProgram
3739
genProgram = fmap eraseProgram PLC.genProgram
3840

3941
-- See Note [Name mangling]
40-
mangleNames :: Term Name DefaultUni DefaultFun () -> PLC.AstGen (Term Name DefaultUni DefaultFun ())
42+
mangleNames
43+
:: Term Name DefaultUni DefaultFun ()
44+
-> PLC.AstGen (Maybe (Term Name DefaultUni DefaultFun ()))
4145
mangleNames term = do
42-
mang <- PLC.genNameMangler $ setOf vTerm term
43-
termSubstNamesM (fmap (fmap $ UPLC.Var ()) . mang) term
46+
mayMang <- PLC.genNameMangler $ setOf vTerm term
47+
for mayMang $ \mang -> termSubstNamesM (fmap (fmap $ UPLC.Var ()) . mang) term

plutus-core/untyped-plutus-core/testlib/Scoping/Spec.hs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import PlutusCore.Rename
2020
import PlutusCore.Test qualified as T
2121

2222
import Hedgehog
23+
import Hedgehog.Gen qualified as Gen
2324
import Test.Tasty
2425
import Test.Tasty.Hedgehog
2526
import Test.Tasty.HUnit
@@ -28,9 +29,10 @@ test_mangle :: TestTree
2829
test_mangle =
2930
testPropertyNamed "equality does not survive mangling" "equality_mangling" $
3031
withDiscards 1000000 . T.mapTestLimitAtLeast 300 (`div` 3) . property $ do
31-
(term, termMangled) <- forAll . runAstGen $ do
32+
(term, termMangled) <- forAll . runAstGen . Gen.justT $ do
3233
term <- genTerm
33-
(,) term <$> mangleNames term
34+
mayTermMang <- mangleNames term
35+
pure $ (,) term <$> mayTermMang
3436
term /== termMangled
3537
termMangled /== term
3638

0 commit comments

Comments
 (0)