Skip to content

Commit 1f86a49

Browse files
committed
Fix some test failures
The new code stores test numbers as numbers (not strings), which requires a few adjustments. I also apparently missed a few test updates.
1 parent 97ec545 commit 1f86a49

File tree

3 files changed

+54
-54
lines changed

3 files changed

+54
-54
lines changed

benchmark/scripts/Benchmark_Driver

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -144,9 +144,9 @@ class BenchmarkDriver(object):
144144
"""Return a list of performance tests to run."""
145145
lines = self._invoke(self._cmd_list_benchmarks).split("\n")
146146
json_tests = []
147-
for l in lines:
148-
if l.strip() != "":
149-
json_tests.append(json.loads(l))
147+
for line in lines:
148+
if line.strip() != "":
149+
json_tests.append(json.loads(line))
150150
self.all_tests = [json["name"] for json in json_tests]
151151
test_numbers = [json["number"] for json in json_tests]
152152
self.test_number = dict([(json["name"], json["number"]) for json in json_tests])
@@ -157,18 +157,19 @@ class BenchmarkDriver(object):
157157
return self.all_tests
158158

159159
def _tests_matching_patterns(self):
160-
regexes = map(re.compile, self.args.filters)
161160
matches = set()
162-
for pattern in regexes:
161+
for fil in self.args.filters:
162+
pattern = re.compile(fil)
163163
new_matches = filter(pattern.match, self.all_tests)
164-
matches.union(new_matches)
164+
matches = matches.union(new_matches)
165165
return sorted(list(matches))
166166

167167
def _tests_by_name_or_number(self, test_numbers):
168168
benchmarks = set(self.args.benchmarks)
169-
number_to_name = dict(zip(test_numbers, self.all_tests))
169+
numbers = list(map(str, test_numbers))
170+
number_to_name = dict(zip(numbers, self.all_tests))
170171
tests_by_number = [
171-
number_to_name[i] for i in benchmarks.intersection(test_numbers)
172+
number_to_name[i] for i in benchmarks.intersection(numbers)
172173
]
173174
return sorted(
174175
list(benchmarks.intersection(set(self.all_tests)).union(tests_by_number))
@@ -208,7 +209,7 @@ class BenchmarkDriver(object):
208209
if test:
209210
cmd.append(test)
210211
else:
211-
cmd.extend([self.test_number.get(name, name) for name in self.tests])
212+
cmd.extend([str(self.test_number.get(name, name)) for name in self.tests])
212213
if num_samples > 0:
213214
cmd.append("--num-samples={0}".format(num_samples))
214215
if num_iters > 0:

benchmark/scripts/compare_perf_tests.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,6 @@ def setup(self):
254254
"""
255255
return 0
256256

257-
258257
@property
259258
def max_rss(self):
260259
"""Return max_rss if available
@@ -646,8 +645,8 @@ def values(result):
646645
# isinstance(result, ResultComparison)
647646
(
648647
result.name,
649-
str(result.old.min_value) if result.old.min_value else "-",
650-
str(result.new.min_value) if result.new.min_value else "-",
648+
str(result.old.min_value) if result.old.min_value is not None else "-",
649+
str(result.new.min_value) if result.new.min_value is not None else "-",
651650
"{0:+.1f}%".format(result.delta),
652651
"{0:.2f}x{1}".format(result.ratio, " (?)" if result.is_dubious else ""),
653652
)

benchmark/scripts/test_Benchmark_Driver.py

Lines changed: 42 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ def test_test_harness(self):
208208
self.args,
209209
tests=["ignored"],
210210
_subprocess=self.subprocess_mock).test_harness,
211-
"/benchmarks/Benchmark_O",
211+
"/benchmarks/Benchmark_O-*",
212212
)
213213
self.args.tests = "/path"
214214
self.args.optimization = "Suffix"
@@ -217,28 +217,27 @@ def test_test_harness(self):
217217
self.args,
218218
tests=["ignored"],
219219
_subprocess=self.subprocess_mock).test_harness,
220-
"/path/Benchmark_Suffix",
220+
"/path/Benchmark_Suffix-*",
221221
)
222222

223223
def test_gets_list_of_precommit_benchmarks(self):
224224
self.subprocess_mock.expect(
225-
"/benchmarks/Benchmark_O --list".split(" "),
226-
"#\tTest\t[Tags]\n1\tBenchmark1\t[t1, t2]\n2\tBenchmark2\t[t3]\n",
225+
"/benchmarks/Benchmark_O-* --list --json".split(" "),
226+
"""{"number":1,"name":"Benchmark1","tags":["t1","t2"]}\n"""
227+
+ """{"number":2,"name":"Benchmark2","tags":["t3"]}\n""",
227228
)
228229
driver = BenchmarkDriver(self.args, _subprocess=self.subprocess_mock)
229230
self.subprocess_mock.assert_called_all_expected()
230231
self.assertEqual(driver.tests, ["Benchmark1", "Benchmark2"])
231232
self.assertEqual(driver.all_tests, ["Benchmark1", "Benchmark2"])
232-
self.assertEqual(driver.test_number["Benchmark1"], "1")
233-
self.assertEqual(driver.test_number["Benchmark2"], "2")
233+
self.assertEqual(driver.test_number["Benchmark1"], 1)
234+
self.assertEqual(driver.test_number["Benchmark2"], 2)
234235

235236
list_all_tests = (
236-
"/benchmarks/Benchmark_O --list --skip-tags=".split(" "),
237-
"""# Test [Tags]
238-
1 Benchmark1 [t1, t2]
239-
2 Benchmark2 [t3]
240-
3 Benchmark3 [t3, t4]
241-
""",
237+
"/benchmarks/Benchmark_O-* --list --json --skip-tags=".split(" "),
238+
"""{"number":1, "name": "Benchmark1", "tags":["t1","t2"]}\n"""
239+
+ """{"number":2, "name": "Benchmark2", "tags":["t3"]}\n"""
240+
+ """{"number":3, "name": "Benchmark3", "tags":["t3","t4"]}\n""",
242241
)
243242

244243
def test_gets_list_of_all_benchmarks_when_benchmarks_args_exist(self):
@@ -251,7 +250,7 @@ def test_gets_list_of_all_benchmarks_when_benchmarks_args_exist(self):
251250
self.assertEqual(driver.all_tests, ["Benchmark1", "Benchmark2", "Benchmark3"])
252251

253252
def test_filters_benchmarks_by_pattern(self):
254-
self.args.filters = "-f .+3".split()
253+
self.args.filters = [".+3"]
255254
self.subprocess_mock.expect(*self.list_all_tests)
256255
driver = BenchmarkDriver(self.args, _subprocess=self.subprocess_mock)
257256
self.subprocess_mock.assert_called_all_expected()
@@ -320,37 +319,37 @@ def setUp(self):
320319
self.parser_stub = LogParserStub()
321320
self.subprocess_mock = SubprocessMock()
322321
self.subprocess_mock.expect(
323-
"/benchmarks/Benchmark_O --list".split(" "),
324-
"#\tTest\t[Tags]\n1\tb1\t[tag]\n",
322+
"/benchmarks/Benchmark_O-* --list --json".split(" "),
323+
"""{"number":1, "name":"b1", "tags":["tag"]}""",
325324
)
326325
self.driver = BenchmarkDriver(
327326
self.args, _subprocess=self.subprocess_mock, parser=self.parser_stub
328327
)
329328

330329
def test_run_benchmark_with_multiple_samples(self):
331330
self.driver.run("b1")
332-
self.subprocess_mock.assert_called_with(("/benchmarks/Benchmark_O", "b1"))
331+
self.subprocess_mock.assert_called_with(("/benchmarks/Benchmark_O-*", "b1", "--json"))
333332
self.driver.run("b2", num_samples=5)
334333
self.subprocess_mock.assert_called_with(
335-
("/benchmarks/Benchmark_O", "b2", "--num-samples=5")
334+
("/benchmarks/Benchmark_O-*", "b2", "--num-samples=5", "--json")
336335
)
337336

338337
def test_run_benchmark_with_specified_number_of_iterations(self):
339338
self.driver.run("b", num_iters=1)
340339
self.subprocess_mock.assert_called_with(
341-
("/benchmarks/Benchmark_O", "b", "--num-iters=1")
340+
("/benchmarks/Benchmark_O-*", "b", "--num-iters=1", "--json")
342341
)
343342

344343
def test_run_benchmark_for_specified_time(self):
345344
self.driver.run("b", sample_time=0.5)
346345
self.subprocess_mock.assert_called_with(
347-
("/benchmarks/Benchmark_O", "b", "--sample-time=0.5")
346+
("/benchmarks/Benchmark_O-*", "b", "--sample-time=0.5", "--json")
348347
)
349348

350349
def test_run_benchmark_in_verbose_mode(self):
351350
self.driver.run("b", verbose=True)
352351
self.subprocess_mock.assert_called_with(
353-
("/benchmarks/Benchmark_O", "b", "--verbose")
352+
("/benchmarks/Benchmark_O-*", "b", "--verbose", "--json")
354353
)
355354

356355
def test_run_batch(self):
@@ -361,7 +360,7 @@ def test_run_batch(self):
361360
"""
362361
self.driver.tests = ["b1", "bx"]
363362
self.driver.run()
364-
self.subprocess_mock.assert_called_with(("/benchmarks/Benchmark_O", "1", "bx"))
363+
self.subprocess_mock.assert_called_with(("/benchmarks/Benchmark_O-*", "1", "bx", "--json"))
365364

366365
def test_parse_results_from_running_benchmarks(self):
367366
"""Parse measurements results using LogParser.
@@ -379,7 +378,7 @@ def test_parse_results_from_running_benchmarks(self):
379378
def test_measure_memory(self):
380379
self.driver.run("b", measure_memory=True)
381380
self.subprocess_mock.assert_called_with(
382-
("/benchmarks/Benchmark_O", "b", "--memory")
381+
("/benchmarks/Benchmark_O-*", "b", "--memory", "--json")
383382
)
384383

385384
def test_run_benchmark_independent_samples(self):
@@ -389,10 +388,11 @@ def test_run_benchmark_independent_samples(self):
389388
self.assertEqual(
390389
self.subprocess_mock.calls.count(
391390
(
392-
"/benchmarks/Benchmark_O",
391+
"/benchmarks/Benchmark_O-*",
393392
"b1",
394393
"--num-iters=1",
395394
"--memory",
395+
"--json",
396396
)
397397
),
398398
3,
@@ -501,7 +501,7 @@ def _run(
501501
def record_and_respond(self, test, num_samples, num_iters, verbose, measure_memory):
502502
args = (test, num_samples, num_iters, verbose, measure_memory)
503503
self.calls.append(args)
504-
return self.respond.get(args, _PTR(min=700))
504+
return self.respond.get(args, _PTR(min_value=700))
505505

506506

507507
class TestLoggingReportFormatter(unittest.TestCase):
@@ -604,9 +604,9 @@ def test_names_in_code_format(self):
604604
self.assert_contains(["| `QuotedName`"])
605605

606606

607-
def _PTR(min=700, mem_pages=1000, setup=None):
607+
def _PTR(min_value=700, mem_pages=1000, setup=None):
608608
"""Create PerformanceTestResult Stub."""
609-
return Stub(samples=Stub(min=min), mem_pages=mem_pages, setup=setup)
609+
return Stub(min_value=min_value, mem_pages=mem_pages, setup=setup)
610610

611611

612612
def _run(test, num_samples=None, num_iters=None, verbose=None, measure_memory=False):
@@ -677,7 +677,7 @@ def test_measure_10_independent_1s_benchmark_series(self):
677677
# calibration run, returns a stand-in for PerformanceTestResult
678678
(
679679
_run("B1", num_samples=3, num_iters=1, verbose=True),
680-
_PTR(min=300),
680+
_PTR(min_value=300),
681681
)
682682
]
683683
+
@@ -693,7 +693,7 @@ def test_measure_10_independent_1s_benchmark_series(self):
693693
verbose=True,
694694
measure_memory=True,
695695
),
696-
_PTR(min=300),
696+
_PTR(min_value=300),
697697
)
698698
]
699699
* 5
@@ -710,7 +710,7 @@ def test_measure_10_independent_1s_benchmark_series(self):
710710
verbose=True,
711711
measure_memory=True,
712712
),
713-
_PTR(min=300),
713+
_PTR(min_value=300),
714714
)
715715
]
716716
* 5
@@ -838,8 +838,8 @@ def test_benchmark_runtime_range(self):
838838
def measurements(name, runtime):
839839
return {
840840
"name": name,
841-
name + " O i1a": _PTR(min=runtime + 2),
842-
name + " O i2a": _PTR(min=runtime),
841+
name + " O i1a": _PTR(min_value=runtime + 2),
842+
name + " O i2a": _PTR(min_value=runtime),
843843
}
844844

845845
with captured_output() as (out, _):
@@ -852,8 +852,8 @@ def measurements(name, runtime):
852852
doctor.analyze(
853853
{
854854
"name": "OverheadTurtle",
855-
"OverheadTurtle O i1a": _PTR(min=800000),
856-
"OverheadTurtle O i2a": _PTR(min=700000),
855+
"OverheadTurtle O i1a": _PTR(min_value=800000),
856+
"OverheadTurtle O i2a": _PTR(min_value=700000),
857857
}
858858
)
859859
output = out.getvalue()
@@ -909,30 +909,30 @@ def test_benchmark_has_no_significant_setup_overhead(self):
909909
{
910910
"name": "NoOverhead", # not 'significant' enough
911911
# Based on DropFirstArray a10/e10: overhead 3.7% (6 μs)
912-
"NoOverhead O i1a": _PTR(min=162),
913-
"NoOverhead O i2a": _PTR(min=159),
912+
"NoOverhead O i1a": _PTR(min_value=162),
913+
"NoOverhead O i2a": _PTR(min_value=159),
914914
}
915915
)
916916
doctor.analyze(
917917
{
918918
"name": "SO", # Setup Overhead
919919
# Based on SuffixArrayLazy a10/e10: overhead 5.8% (4 μs)
920-
"SO O i1a": _PTR(min=69),
921-
"SO O i1b": _PTR(min=70),
922-
"SO O i2a": _PTR(min=67),
923-
"SO O i2b": _PTR(min=68),
920+
"SO O i1a": _PTR(min_value=69),
921+
"SO O i1b": _PTR(min_value=70),
922+
"SO O i2a": _PTR(min_value=67),
923+
"SO O i2b": _PTR(min_value=68),
924924
}
925925
)
926926
doctor.analyze(
927-
{"name": "Zero", "Zero O i1a": _PTR(min=0), "Zero O i2a": _PTR(min=0)}
927+
{"name": "Zero", "Zero O i1a": _PTR(min_value=0), "Zero O i2a": _PTR(min_value=0)}
928928
)
929929
doctor.analyze(
930930
{
931931
"name": "LOA", # Limit of Accuracy
932932
# Impossible to detect overhead:
933933
# Even 1μs change in 20μs runtime is 5%.
934-
"LOA O i1a": _PTR(min=21),
935-
"LOA O i2a": _PTR(min=20),
934+
"LOA O i1a": _PTR(min_value=21),
935+
"LOA O i2a": _PTR(min_value=20),
936936
}
937937
)
938938
output = out.getvalue()

0 commit comments

Comments
 (0)