5
5
// Created by Lennard Sprong on 08/07/2025.
6
6
//
7
7
8
- #if compiler(>=6.2)
9
8
import Testing
9
+
10
10
@testable import PropertyBased
11
11
12
12
@Suite struct GenFrequencyTests {
@@ -16,13 +16,29 @@ import Testing
16
16
case text( String )
17
17
}
18
18
19
- let gen = Gen . oneOf (
19
+ // MARK: oneOf
20
+
21
+ static let unpackedGen = Gen . oneOf (
22
+ Gen . always ( Choice . plain) . eraseToAny ( ) ,
23
+ Gen . int ( ) . map ( Choice . number) . eraseToAny ( ) ,
24
+ Gen . lowercaseLetter. string ( of: 8 ) . map ( Choice . text) . eraseToAny ( ) ,
25
+ )
26
+
27
+ #if compiler(>=6.2)
28
+ static let packedGen = Gen . oneOf (
20
29
Gen . always ( Choice . plain) ,
21
30
Gen . int ( ) . map ( Choice . number) ,
22
31
Gen . lowercaseLetter. string ( of: 8 ) . map ( Choice . text) ,
23
32
)
24
33
25
- @Test func testGenerateEnum( ) async {
34
+ static let generators = [ ( 0 , unpackedGen) , ( 1 , packedGen) ]
35
+ #else
36
+ static let generators = [ ( 0 , unpackedGen) ]
37
+ #endif // compiler(>=6.2)
38
+
39
+ @Test ( arguments: generators)
40
+ func testGenerateEnum( _ pair: ( Int , Generator < Choice , AnySequence < ( index: Int , value: Any ) > > ) ) async {
41
+ let gen = pair. 1
26
42
await testGen ( gen)
27
43
28
44
await confirmation ( expectedCount: 1 ... ) { confirm1 in
@@ -43,12 +59,43 @@ import Testing
43
59
}
44
60
}
45
61
46
- @Test func testShrinkChoice( ) async throws {
62
+ @Test ( arguments: generators)
63
+ func testShrinkChoice( _ pair: ( Int , Generator < Choice , AnySequence < ( index: Int , value: Any ) > > ) ) async throws {
64
+ let gen = pair. 1
47
65
let value = ( index: 1 , value: 500 as Any )
48
66
let results = gen. _shrinker ( value) . compactMap ( gen. _mapFilter)
49
67
try #require( results. count > 1 )
50
68
#expect( results. first == . number( 0 ) )
51
69
#expect( !results. contains ( . number( 500 ) ) )
52
70
}
71
+
72
+ // MARK: frequency
73
+
74
+ static let unpackedFreqGen = Gen< Choice> . frequency( [
75
+ ( 1 , Gen . int ( ) . map ( Choice . number) . eraseToAny ( ) ) ,
76
+ ( 2.0 , Gen . lowercaseLetter. string ( of: 8 ) . map ( Choice . text) . eraseToAny ( ) ) ,
77
+ ( 0 , Gen . always ( Choice . plain) . eraseToAny ( ) ) ,
78
+ ] )
79
+
80
+ #if compiler(>=6.2)
81
+ static let packedFreqGen = Gen . frequency (
82
+ ( 1 , Gen . int ( ) . map ( Choice . number) ) ,
83
+ ( 2 , Gen . lowercaseLetter. string ( of: 8 ) . map ( Choice . text) ) ,
84
+ ( 0 , Gen . always ( Choice . plain) ) ,
85
+ )
86
+
87
+ static let freqGenerators = [ ( 0 , unpackedFreqGen) , ( 1 , packedFreqGen) ]
88
+ #else
89
+ static let freqGenerators = [ ( 0 , unpackedFreqGen) ]
90
+ #endif // compiler(>=6.2)
91
+
92
+ @Test ( arguments: freqGenerators)
93
+ func testGenerateWithFrequency( _ pair: ( Int , Generator < Choice , AnySequence < ( index: Int , value: Any ) > > ) ) async {
94
+ let gen = pair. 1
95
+ await testGen ( gen)
96
+
97
+ await propertyCheck ( count: 200 , input: gen) { item in
98
+ #expect( item != . plain)
99
+ }
100
+ }
53
101
}
54
- #endif // compiler(>=6.2)
0 commit comments