@@ -31,20 +31,28 @@ pub enum BenchmarkSetMember {
3131 CompileBenchmark ( BenchmarkName ) ,
3232}
3333
34- /// Return the number of benchmark sets for the given target.
35- pub fn benchmark_set_count ( target : Target ) -> usize {
36- match target {
37- Target :: X86_64UnknownLinuxGnu => 1 ,
34+ #[ derive( Debug ) ]
35+ pub struct BenchmarkSet {
36+ members : Vec < BenchmarkSetMember > ,
37+ }
38+
39+ impl BenchmarkSet {
40+ pub fn members ( & self ) -> & [ BenchmarkSetMember ] {
41+ & self . members
3842 }
3943}
4044
41- /// Expand all the benchmarks that should be performed by a single collector .
42- pub fn expand_benchmark_set ( id : BenchmarkSetId ) -> Vec < BenchmarkSetMember > {
45+ /// Return all benchmark sets for the given target .
46+ pub fn get_benchmark_sets_for_target ( target : Target ) -> Vec < BenchmarkSet > {
4347 use compile_benchmarks:: * ;
4448
45- match ( id. target , id. index ) {
46- ( Target :: X86_64UnknownLinuxGnu , 0 ) => {
47- vec ! [
49+ fn compile ( name : & str ) -> BenchmarkSetMember {
50+ BenchmarkSetMember :: CompileBenchmark ( BenchmarkName :: from ( name) )
51+ }
52+
53+ match target {
54+ Target :: X86_64UnknownLinuxGnu => {
55+ let all = vec ! [
4856 compile( AWAIT_CALL_TREE ) ,
4957 compile( BITMAPS_3_2_1 ) ,
5058 compile( BITMAPS_3_2_1_NEW_SOLVER ) ,
@@ -106,24 +114,21 @@ pub fn expand_benchmark_set(id: BenchmarkSetId) -> Vec<BenchmarkSetMember> {
106114 compile( UNUSED_WARNINGS ) ,
107115 compile( WF_PROJECTION_STRESS_65510 ) ,
108116 compile( WG_GRAMMAR ) ,
109- ]
110- }
111- ( Target :: X86_64UnknownLinuxGnu , 1 ..) => {
112- panic ! ( "Unknown benchmark set id {id:?}" ) ;
117+ ] ;
118+ vec ! [ BenchmarkSet { members: all } ]
113119 }
114120 }
115121}
116122
117- /// Helper function for creating compile-time benchmark member sets.
118- fn compile ( name : & str ) -> BenchmarkSetMember {
119- BenchmarkSetMember :: CompileBenchmark ( BenchmarkName :: from ( name) )
123+ /// Expand all the benchmarks that should be performed by a single collector.
124+ pub fn get_benchmark_set ( id : BenchmarkSetId ) -> BenchmarkSet {
125+ let mut sets = get_benchmark_sets_for_target ( id. target ) ;
126+ sets. remove ( id. index as usize )
120127}
121128
122129#[ cfg( test) ]
123130mod tests {
124- use crate :: benchmark_set:: {
125- benchmark_set_count, expand_benchmark_set, BenchmarkSetId , BenchmarkSetMember ,
126- } ;
131+ use crate :: benchmark_set:: { get_benchmark_sets_for_target, BenchmarkSetMember } ;
127132 use crate :: compile:: benchmark:: target:: Target ;
128133 use crate :: compile:: benchmark:: {
129134 get_compile_benchmarks, BenchmarkName , CompileBenchmarkFilter ,
@@ -135,21 +140,13 @@ mod tests {
135140 /// complete, i.e. they don't miss any benchmarks.
136141 #[ test]
137142 fn check_benchmark_set_x64 ( ) {
138- let target = Target :: X86_64UnknownLinuxGnu ;
139- let sets = ( 0 ..benchmark_set_count ( target) )
140- . map ( |index| {
141- expand_benchmark_set ( BenchmarkSetId {
142- target,
143- index : index as u32 ,
144- } )
145- } )
146- . collect :: < Vec < Vec < BenchmarkSetMember > > > ( ) ;
143+ let sets = get_benchmark_sets_for_target ( Target :: X86_64UnknownLinuxGnu ) ;
147144
148145 // Assert set is unique
149146 for set in & sets {
150- let hashset = set. iter ( ) . collect :: < HashSet < _ > > ( ) ;
147+ let hashset = set. members ( ) . iter ( ) . collect :: < HashSet < _ > > ( ) ;
151148 assert_eq ! (
152- set. len( ) ,
149+ set. members ( ) . len( ) ,
153150 hashset. len( ) ,
154151 "Benchmark set {set:?} contains duplicates"
155152 ) ;
@@ -160,8 +157,8 @@ mod tests {
160157 for j in i + 1 ..sets. len ( ) {
161158 let set_a = & sets[ i] ;
162159 let set_b = & sets[ j] ;
163- let hashset_a = set_a. iter ( ) . collect :: < HashSet < _ > > ( ) ;
164- let hashset_b = set_b. iter ( ) . collect :: < HashSet < _ > > ( ) ;
160+ let hashset_a = set_a. members ( ) . iter ( ) . collect :: < HashSet < _ > > ( ) ;
161+ let hashset_b = set_b. members ( ) . iter ( ) . collect :: < HashSet < _ > > ( ) ;
165162 assert ! (
166163 hashset_a. is_disjoint( & hashset_b) ,
167164 "Benchmark sets {set_a:?} and {set_b:?} overlap"
@@ -170,7 +167,10 @@ mod tests {
170167 }
171168
172169 // Check that the union of all sets contains all the required benchmarks
173- let all_members = sets. iter ( ) . flatten ( ) . collect :: < HashSet < _ > > ( ) ;
170+ let all_members = sets
171+ . iter ( )
172+ . flat_map ( |s| s. members ( ) )
173+ . collect :: < HashSet < _ > > ( ) ;
174174
175175 const BENCHMARK_DIR : & str = concat ! ( env!( "CARGO_MANIFEST_DIR" ) , "/compile-benchmarks" ) ;
176176 let all_compile_benchmarks =
@@ -189,7 +189,7 @@ mod tests {
189189 let BenchmarkSetMember :: CompileBenchmark ( name) = benchmark;
190190 assert ! (
191191 all_compile_benchmarks. contains( name) ,
192- "Compile-time benchmark {name} does not exist on disk or is a stable benchmark "
192+ "Compile-time benchmark {name} does not exist on disk"
193193 ) ;
194194 }
195195 assert_eq ! ( all_members. len( ) , all_compile_benchmarks. len( ) ) ;
0 commit comments