@@ -122,6 +122,58 @@ mod examples {
122122 }
123123}
124124
125+ mod generation_strategies {
126+ use bnf:: { CoverageGuided , DepthBounded , RandomWalk , Weighted } ;
127+
128+ const SEED : [ u8 ; 32 ] = [ 0 ; 32 ] ;
129+
130+ fn postal_grammar ( ) -> bnf:: Grammar {
131+ include_str ! ( "../tests/fixtures/postal_address.terminated.input.bnf" )
132+ . parse ( )
133+ . unwrap ( )
134+ }
135+
136+ #[ divan:: bench( min_time = 5 , max_time = 30 ) ]
137+ fn generate_random_walk ( bencher : divan:: Bencher ) {
138+ bencher. with_inputs ( postal_grammar) . bench_refs ( |grammar| {
139+ let mut strategy = RandomWalk :: from_seed ( SEED ) ;
140+ grammar
141+ . generate_seeded_with_strategy ( & mut strategy)
142+ . unwrap ( )
143+ } ) ;
144+ }
145+
146+ #[ divan:: bench( min_time = 5 , max_time = 30 ) ]
147+ fn generate_depth_bounded ( bencher : divan:: Bencher ) {
148+ bencher. with_inputs ( postal_grammar) . bench_refs ( |grammar| {
149+ let mut strategy = DepthBounded :: from_seed ( 10 , SEED ) ;
150+ grammar
151+ . generate_seeded_with_strategy ( & mut strategy)
152+ . unwrap ( )
153+ } ) ;
154+ }
155+
156+ #[ divan:: bench( min_time = 5 , max_time = 30 ) ]
157+ fn generate_coverage_guided ( bencher : divan:: Bencher ) {
158+ bencher. with_inputs ( postal_grammar) . bench_refs ( |grammar| {
159+ let mut strategy = CoverageGuided :: from_seed ( SEED ) ;
160+ grammar
161+ . generate_seeded_with_strategy ( & mut strategy)
162+ . unwrap ( )
163+ } ) ;
164+ }
165+
166+ #[ divan:: bench( min_time = 5 , max_time = 30 ) ]
167+ fn generate_weighted ( bencher : divan:: Bencher ) {
168+ bencher. with_inputs ( postal_grammar) . bench_refs ( |grammar| {
169+ let mut strategy = Weighted :: from_seed ( 100 , 1 , SEED ) ;
170+ grammar
171+ . generate_seeded_with_strategy ( & mut strategy)
172+ . unwrap ( )
173+ } ) ;
174+ }
175+ }
176+
125177mod parser_api {
126178 #[ divan:: bench( min_time = 5 , max_time = 60 ) ]
127179 fn build_postal_parser ( bencher : divan:: Bencher ) {
0 commit comments