@@ -96,10 +96,12 @@ def benchmarks(self):
96
96
@property
97
97
def groups (self ):
98
98
names = self ._custom_groups ()
99
- if not names :
100
- names = set (self ._get_tags ())
101
99
return names | {'all' , 'default' }
102
100
101
+ @property
102
+ def tags (self ):
103
+ return set (self ._get_tags ())
104
+
103
105
@property
104
106
def filename (self ):
105
107
return self ._raw_filename
@@ -117,25 +119,26 @@ def _add_section_for_file(self, filename, section, data, resolve, seen):
117
119
if resolve is None and filename == DEFAULT_MANIFEST :
118
120
resolve = resolve_default_benchmark
119
121
120
- seen_key = (section , data [0 ]) if section == "group" else section
121
- if seen_key in seen :
122
- # For now each section_key can only show up once.
123
- raise NotImplementedError ((seen_key , data ))
124
- seen .add (seen_key )
125
-
126
- if section == 'includes' :
127
- pass
128
- elif section == 'benchmarks' :
129
- entries = ((s , m , filename ) for s , m in data )
130
- self ._add_benchmarks (entries , resolve )
131
- elif section == 'groups' :
132
- for name in data :
133
- self ._add_group (name , None )
134
- elif section == 'group' :
122
+ if section == 'group' :
135
123
name , entries = data
136
124
self ._add_group (name , entries )
137
125
else :
138
- raise NotImplementedError ((section , data ))
126
+ # All sections with an identifier have already been handled.
127
+ if section in seen :
128
+ # For now each section_key can only show up once.
129
+ raise NotImplementedError ((section , data ))
130
+ seen .add (section )
131
+
132
+ if section == 'includes' :
133
+ pass
134
+ elif section == 'benchmarks' :
135
+ entries = ((s , m , filename ) for s , m in data )
136
+ self ._add_benchmarks (entries , resolve )
137
+ elif section == 'groups' :
138
+ for name in data :
139
+ self ._add_group (name , None )
140
+ else :
141
+ raise NotImplementedError ((section , data ))
139
142
140
143
def _add_benchmarks (self , entries , resolve ):
141
144
for spec , metafile , filename in entries :
@@ -145,6 +148,8 @@ def _add_benchmarks(self, entries, resolve):
145
148
def _add_benchmark (self , spec , metafile , resolve , filename ):
146
149
if spec .name in self ._raw_groups :
147
150
raise ValueError (f'a group and a benchmark have the same name ({ spec .name } )' )
151
+ if spec .name == 'all' :
152
+ raise ValueError ('a benchmark named "all" is not allowed ("all" is reserved for selecting the full set of declared benchmarks)' )
148
153
if metafile :
149
154
if filename :
150
155
localdir = os .path .dirname (filename )
@@ -156,6 +161,8 @@ def _add_benchmark(self, spec, metafile, resolve, filename):
156
161
self ._raw_benchmarks .append ((spec , metafile , filename ))
157
162
if resolve is not None :
158
163
bench = resolve (bench )
164
+ if bench .name in self ._byname :
165
+ raise ValueError (f'a benchmark named { bench .name } was already declared' )
159
166
self ._byname [bench .name ] = bench
160
167
self ._groups = None # Force re-resolution.
161
168
self ._tags = None # Force re-resolution.
@@ -164,18 +171,15 @@ def _add_group(self, name, entries):
164
171
if name in self ._byname :
165
172
raise ValueError (f'a group and a benchmark have the same name ({ name } )' )
166
173
if name == 'all' :
167
- # XXX Emit a warning?
168
- return
169
- if entries :
170
- raw = self ._raw_groups .get (name )
171
- if raw is None :
172
- raw = self ._raw_groups [name ] = list (entries ) if entries else None
173
- elif entries is not None :
174
- raw .extend (entries )
175
- elif name in self ._raw_groups :
176
- return
177
- else :
174
+ raise ValueError ('a group named "all" is not allowed ("all" is reserved for selecting the full set of declared benchmarks)' )
175
+ if entries is None :
176
+ if name in self ._raw_groups :
177
+ return
178
178
self ._raw_groups [name ] = None
179
+ elif name in self ._raw_groups and self ._raw_groups [name ] is not None :
180
+ raise ValueError (f'a group named { name } was already defined' )
181
+ else :
182
+ self ._raw_groups [name ] = list (entries ) if entries else []
179
183
self ._groups = None # Force re-resolution.
180
184
181
185
def _custom_groups (self ):
@@ -218,7 +222,7 @@ def resolve_group(self, name, *, fail=True):
218
222
groups = self ._resolve_groups ()
219
223
benchmarks = groups .get (name )
220
224
if not benchmarks :
221
- if name in ( set ( self ._raw_groups ) - { 'default' }) :
225
+ if name not in self ._raw_groups :
222
226
benchmarks = self ._get_tags ().get (name , ())
223
227
elif fail :
224
228
raise KeyError (name )
0 commit comments