@@ -73,6 +73,15 @@ var typeDefinitions: String {
73
73
case X, Y, Z
74
74
}
75
75
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
+
76
85
public enum MPE<T, V> {
77
86
case A(T)
78
87
case B(V)
@@ -285,6 +294,72 @@ struct Enum : Value {
285
294
}
286
295
}
287
296
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
+
288
363
struct MultiPayloadEnum : Value {
289
364
let payloadA : any Value
290
365
let payloadB : any Value
@@ -407,6 +482,8 @@ struct RandomGenerator : RandomNumberGenerator {
407
482
private static let allValueTypes : [ any Value . Type ] = allTerminalTypes + [
408
483
OptionalValue . self,
409
484
Struct . self,
485
+ SinglePayloadSingleCaseEnum . self,
486
+ SinglePayloadEnum . self,
410
487
MultiPayloadEnum . self
411
488
]
412
489
0 commit comments