@@ -73,6 +73,15 @@ var typeDefinitions: String {
7373 case X, Y, Z
7474 }
7575
76+ public enum SPSCE<T> {
77+ case A(T)
78+ }
79+
80+ public enum SPE<T> {
81+ case A(T)
82+ case B
83+ }
84+
7685 public enum MPE<T, V> {
7786 case A(T)
7887 case B(V)
@@ -285,6 +294,72 @@ struct Enum : Value {
285294 }
286295}
287296
297+ struct SinglePayloadSingleCaseEnum : Value {
298+ let payload : any Value
299+
300+ init ( generator: inout RandomGenerator , depth: Int ) {
301+ self . payload = generator. createValue ( depth: depth)
302+ }
303+
304+ func getType( ) -> String {
305+ " SPSCE< \( payload. getType ( ) ) > "
306+ }
307+
308+ func getInitValue( ) -> String {
309+ return " SPSCE.A( \( payload. getInitValue ( ) ) ) "
310+ }
311+
312+ func getExpectedOutput( topLevel: Bool ) -> String {
313+ let prefix = topLevel ? " " : " \( getRuntimeTypeName ( topLevel: topLevel) ) . "
314+ return " \( prefix) A( \( payload. getExpectedOutput ( topLevel: false ) ) ) "
315+ }
316+
317+ func getRuntimeTypeName( topLevel: Bool ) -> String {
318+ let prefix = topLevel ? " " : " test. "
319+ return " \( prefix) SPSCE< \( payload. getRuntimeTypeName ( topLevel: topLevel) ) > "
320+ }
321+
322+ var containsEnum : Bool { true }
323+ }
324+
325+ struct SinglePayloadEnum : Value {
326+ let payload : any Value
327+ let caseIdx : Int
328+
329+ init ( generator: inout RandomGenerator , depth: Int ) {
330+ self . caseIdx = Int . random ( in: 0 ..< 2 , using: & generator)
331+ self . payload = generator. createValue ( depth: depth)
332+ }
333+
334+ func getType( ) -> String {
335+ " SPE< \( payload. getType ( ) ) > "
336+ }
337+
338+ func getInitValue( ) -> String {
339+ switch caseIdx {
340+ case 0 : return " SPE.A( \( payload. getInitValue ( ) ) ) "
341+ case 1 : return " SPE.B "
342+ default : fatalError ( )
343+ }
344+ }
345+
346+ func getExpectedOutput( topLevel: Bool ) -> String {
347+ let prefix = topLevel ? " " : " \( getRuntimeTypeName ( topLevel: topLevel) ) . "
348+ switch caseIdx {
349+ case 0 : return " \( prefix) A( \( payload. getExpectedOutput ( topLevel: false ) ) ) "
350+ case 1 : return " \( prefix) B "
351+ default : fatalError ( )
352+ }
353+ }
354+
355+ func getRuntimeTypeName( topLevel: Bool ) -> String {
356+ let prefix = topLevel ? " " : " test. "
357+ return " \( prefix) SPE< \( payload. getRuntimeTypeName ( topLevel: topLevel) ) > "
358+ }
359+
360+ var containsEnum : Bool { true }
361+ }
362+
288363struct MultiPayloadEnum : Value {
289364 let payloadA : any Value
290365 let payloadB : any Value
@@ -407,6 +482,8 @@ struct RandomGenerator : RandomNumberGenerator {
407482 private static let allValueTypes : [ any Value . Type ] = allTerminalTypes + [
408483 OptionalValue . self,
409484 Struct . self,
485+ SinglePayloadSingleCaseEnum . self,
486+ SinglePayloadEnum . self,
410487 MultiPayloadEnum . self
411488 ]
412489
0 commit comments