@@ -96,10 +96,12 @@ def benchmarks(self):
9696 @property
9797 def groups (self ):
9898 names = self ._custom_groups ()
99- if not names :
100- names = set (self ._get_tags ())
10199 return names | {'all' , 'default' }
102100
101+ @property
102+ def tags (self ):
103+ return set (self ._get_tags ())
104+
103105 @property
104106 def filename (self ):
105107 return self ._raw_filename
@@ -117,25 +119,26 @@ def _add_section_for_file(self, filename, section, data, resolve, seen):
117119 if resolve is None and filename == DEFAULT_MANIFEST :
118120 resolve = resolve_default_benchmark
119121
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' :
135123 name , entries = data
136124 self ._add_group (name , entries )
137125 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 ))
139142
140143 def _add_benchmarks (self , entries , resolve ):
141144 for spec , metafile , filename in entries :
@@ -145,6 +148,8 @@ def _add_benchmarks(self, entries, resolve):
145148 def _add_benchmark (self , spec , metafile , resolve , filename ):
146149 if spec .name in self ._raw_groups :
147150 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)' )
148153 if metafile :
149154 if filename :
150155 localdir = os .path .dirname (filename )
@@ -156,6 +161,8 @@ def _add_benchmark(self, spec, metafile, resolve, filename):
156161 self ._raw_benchmarks .append ((spec , metafile , filename ))
157162 if resolve is not None :
158163 bench = resolve (bench )
164+ if bench .name in self ._byname :
165+ raise ValueError (f'a benchmark named { bench .name } was already declared' )
159166 self ._byname [bench .name ] = bench
160167 self ._groups = None # Force re-resolution.
161168 self ._tags = None # Force re-resolution.
@@ -164,18 +171,15 @@ def _add_group(self, name, entries):
164171 if name in self ._byname :
165172 raise ValueError (f'a group and a benchmark have the same name ({ name } )' )
166173 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
178178 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 []
179183 self ._groups = None # Force re-resolution.
180184
181185 def _custom_groups (self ):
@@ -218,7 +222,7 @@ def resolve_group(self, name, *, fail=True):
218222 groups = self ._resolve_groups ()
219223 benchmarks = groups .get (name )
220224 if not benchmarks :
221- if name in ( set ( self ._raw_groups ) - { 'default' }) :
225+ if name not in self ._raw_groups :
222226 benchmarks = self ._get_tags ().get (name , ())
223227 elif fail :
224228 raise KeyError (name )
0 commit comments