Skip to content

Commit c31b209

Browse files
committed
Interpreter tests for resilient enums
1 parent 0269e02 commit c31b209

File tree

2 files changed

+413
-0
lines changed

2 files changed

+413
-0
lines changed

test/Inputs/resilient_enum.swift

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,121 @@ public enum Medium {
2929
public indirect enum IndirectApproach {
3030
case Angle(Double)
3131
}
32+
33+
// Specific enum implementations for executable tests
34+
public enum ResilientEmptyEnum {
35+
case X
36+
}
37+
38+
public enum ResilientSingletonEnum {
39+
case X(AnyObject)
40+
}
41+
42+
public enum ResilientSingletonGenericEnum<T> {
43+
case X(T)
44+
}
45+
46+
public enum ResilientNoPayloadEnum {
47+
case A
48+
case B
49+
case C
50+
}
51+
52+
public enum ResilientSinglePayloadEnum {
53+
case A
54+
case B
55+
case C
56+
case X(AnyObject)
57+
}
58+
59+
public enum ResilientSinglePayloadGenericEnum<T> {
60+
case A
61+
case B
62+
case C
63+
case X(T)
64+
}
65+
66+
public class ArtClass {
67+
public init() {}
68+
}
69+
70+
public enum ResilientMultiPayloadEnum {
71+
case A
72+
case B
73+
case C
74+
case X(Int)
75+
case Y(Int)
76+
}
77+
78+
public func makeResilientMultiPayloadEnum(n: Int, i: Int)
79+
-> ResilientMultiPayloadEnum {
80+
switch i {
81+
case 0:
82+
return .A
83+
case 1:
84+
return .B
85+
case 2:
86+
return .C
87+
case 3:
88+
return .X(n)
89+
case 4:
90+
return .Y(n)
91+
default:
92+
while true {}
93+
}
94+
}
95+
96+
public enum ResilientMultiPayloadEnumSpareBits {
97+
case A
98+
case B
99+
case C
100+
case X(ArtClass)
101+
case Y(ArtClass)
102+
}
103+
104+
public func makeResilientMultiPayloadEnumSpareBits(o: ArtClass, i: Int)
105+
-> ResilientMultiPayloadEnumSpareBits {
106+
switch i {
107+
case 0:
108+
return .A
109+
case 1:
110+
return .B
111+
case 2:
112+
return .C
113+
case 3:
114+
return .X(o)
115+
case 4:
116+
return .Y(o)
117+
default:
118+
while true {}
119+
}
120+
}
121+
122+
public typealias SevenSpareBits = (Bool, Int8, Int8, Int8, Int8, Int8, Int8, Int8)
123+
124+
public enum ResilientMultiPayloadEnumSpareBitsAndExtraBits {
125+
// On 64-bit little endian, 7 spare bits at the LSB end
126+
case P1(SevenSpareBits)
127+
// On 64-bit, 8 spare bits at the MSB end and 3 at the LSB end
128+
case P2(ArtClass)
129+
case P3(ArtClass)
130+
case P4(ArtClass)
131+
case P5(ArtClass)
132+
case P6(ArtClass)
133+
case P7(ArtClass)
134+
case P8(ArtClass)
135+
}
136+
137+
public enum ResilientMultiPayloadGenericEnum<T> {
138+
case A
139+
case B
140+
case C
141+
case X(T)
142+
case Y(T)
143+
}
144+
145+
public enum ResilientIndirectEnum {
146+
case Base
147+
indirect case A(ResilientIndirectEnum)
148+
indirect case B(ResilientIndirectEnum, ResilientIndirectEnum)
149+
}

0 commit comments

Comments
 (0)