Skip to content

Commit 2aaccb0

Browse files
authored
Add a phantom-type test for deriveEnum (#7499)
Co-authored-by: Nikolaos Bezirgiannis <[email protected]>
1 parent 85ce1fd commit 2aaccb0

File tree

2 files changed

+68
-0
lines changed

2 files changed

+68
-0
lines changed
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
instance PlutusTx.Enum.Class.Enum (Enum.Spec.SomeVeryLargePhantom a_0
2+
b_1
3+
c_2
4+
d_3
5+
e_4
6+
f_5
7+
g_6
8+
h_7)
9+
where {PlutusTx.Enum.Class.succ (Enum.Spec.P1) = Enum.Spec.P2
10+
PlutusTx.Enum.Class.succ (Enum.Spec.P2) = Enum.Spec.P3
11+
PlutusTx.Enum.Class.succ (Enum.Spec.P3) = Enum.Spec.P4
12+
PlutusTx.Enum.Class.succ (Enum.Spec.P4) = Enum.Spec.P5
13+
PlutusTx.Enum.Class.succ (Enum.Spec.P5) = Enum.Spec.P6
14+
PlutusTx.Enum.Class.succ (Enum.Spec.P6) = Enum.Spec.P7
15+
PlutusTx.Enum.Class.succ (Enum.Spec.P7) = Enum.Spec.P8
16+
PlutusTx.Enum.Class.succ (Enum.Spec.P8) = Enum.Spec.P9
17+
PlutusTx.Enum.Class.succ (Enum.Spec.P9) = Enum.Spec.P10
18+
PlutusTx.Enum.Class.succ (Enum.Spec.P10) = PlutusTx.Trace.traceError PlutusTx.ErrorCodes.succBadArgumentError;
19+
{-# INLINABLE PlutusTx.Enum.Class.succ #-};
20+
PlutusTx.Enum.Class.pred (Enum.Spec.P1) = PlutusTx.Trace.traceError PlutusTx.ErrorCodes.predBadArgumentError
21+
PlutusTx.Enum.Class.pred (Enum.Spec.P2) = Enum.Spec.P1
22+
PlutusTx.Enum.Class.pred (Enum.Spec.P3) = Enum.Spec.P2
23+
PlutusTx.Enum.Class.pred (Enum.Spec.P4) = Enum.Spec.P3
24+
PlutusTx.Enum.Class.pred (Enum.Spec.P5) = Enum.Spec.P4
25+
PlutusTx.Enum.Class.pred (Enum.Spec.P6) = Enum.Spec.P5
26+
PlutusTx.Enum.Class.pred (Enum.Spec.P7) = Enum.Spec.P6
27+
PlutusTx.Enum.Class.pred (Enum.Spec.P8) = Enum.Spec.P7
28+
PlutusTx.Enum.Class.pred (Enum.Spec.P9) = Enum.Spec.P8
29+
PlutusTx.Enum.Class.pred (Enum.Spec.P10) = Enum.Spec.P9;
30+
{-# INLINABLE PlutusTx.Enum.Class.pred #-};
31+
PlutusTx.Enum.Class.toEnum 0 = Enum.Spec.P1
32+
PlutusTx.Enum.Class.toEnum 1 = Enum.Spec.P2
33+
PlutusTx.Enum.Class.toEnum 2 = Enum.Spec.P3
34+
PlutusTx.Enum.Class.toEnum 3 = Enum.Spec.P4
35+
PlutusTx.Enum.Class.toEnum 4 = Enum.Spec.P5
36+
PlutusTx.Enum.Class.toEnum 5 = Enum.Spec.P6
37+
PlutusTx.Enum.Class.toEnum 6 = Enum.Spec.P7
38+
PlutusTx.Enum.Class.toEnum 7 = Enum.Spec.P8
39+
PlutusTx.Enum.Class.toEnum 8 = Enum.Spec.P9
40+
PlutusTx.Enum.Class.toEnum 9 = Enum.Spec.P10
41+
PlutusTx.Enum.Class.toEnum _ = PlutusTx.Trace.traceError PlutusTx.ErrorCodes.toEnumBadArgumentError;
42+
{-# INLINABLE PlutusTx.Enum.Class.toEnum #-};
43+
PlutusTx.Enum.Class.fromEnum (Enum.Spec.P1) = 0
44+
PlutusTx.Enum.Class.fromEnum (Enum.Spec.P2) = 1
45+
PlutusTx.Enum.Class.fromEnum (Enum.Spec.P3) = 2
46+
PlutusTx.Enum.Class.fromEnum (Enum.Spec.P4) = 3
47+
PlutusTx.Enum.Class.fromEnum (Enum.Spec.P5) = 4
48+
PlutusTx.Enum.Class.fromEnum (Enum.Spec.P6) = 5
49+
PlutusTx.Enum.Class.fromEnum (Enum.Spec.P7) = 6
50+
PlutusTx.Enum.Class.fromEnum (Enum.Spec.P8) = 7
51+
PlutusTx.Enum.Class.fromEnum (Enum.Spec.P9) = 8
52+
PlutusTx.Enum.Class.fromEnum (Enum.Spec.P10) = 9;
53+
{-# INLINABLE PlutusTx.Enum.Class.fromEnum #-}}

plutus-tx/test/Enum/Spec.hs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,20 @@ data SomeVeryLargeEnum
3434
deriving stock (HS.Eq, HS.Enum, HS.Bounded, HS.Show)
3535
deriveEnum ''SomeVeryLargeEnum
3636

37+
data SomeVeryLargePhantom a b c d e f g h
38+
= P1
39+
| P2
40+
| P3
41+
| P4
42+
| P5
43+
| P6
44+
| P7
45+
| P8
46+
| P9
47+
| P10
48+
deriving stock (HS.Eq, HS.Enum, HS.Bounded, HS.Show)
49+
deriveEnum ''SomeVeryLargePhantom
50+
3751
-- we lack Tx.Bounded so we use Haskell's for the tests
3852
enumTests :: TestTree
3953
enumTests =
@@ -45,6 +59,7 @@ enumTests =
4559
, runTestNested
4660
["test", "Enum", "Golden"]
4761
[ $(goldenCodeGen "SomeVeryLargeEnum" (deriveEnum ''SomeVeryLargeEnum))
62+
, $(goldenCodeGen "SomeVeryLargePhantom" (deriveEnum ''SomeVeryLargePhantom))
4863
, $(goldenCodeGen "Bool" (deriveEnum ''Bool))
4964
, $(goldenCodeGen "Unit" (deriveEnum ''()))
5065
]

0 commit comments

Comments
 (0)