Skip to content

Commit ab1a103

Browse files
committed
add test to ensure we can select correct line
1 parent 232da87 commit ab1a103

File tree

2 files changed

+58
-0
lines changed

2 files changed

+58
-0
lines changed

tests/conftest.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,8 @@ def sample_stats_file(tmp_path) -> Path:
9494
2459 0.200 0.000 0.800 0.000 /vivarium/framework/population/population_view.py:133(get)
9595
50/25 0.150 0.003 0.600 0.024 /some/custom/module.py:100(custom_function)
9696
100 0.025 0.000 0.500 0.005 /another/module.py:200(another_function)
97+
150 0.030 0.000 0.450 0.003 /vivarium/framework/values/pipeline.py:66(duplicate_func)
98+
200 0.040 0.000 0.800 0.004 /vivarium/framework/values/pipeline.py:150(duplicate_func)
9799
"""
98100
stats_file = tmp_path / "test_stats.txt"
99101
stats_file.write_text(stats_content)

tests/test_extraction.py

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,3 +224,59 @@ def test_extract_metrics_missing_patterns(self, sample_stats_file):
224224
metrics = config.extract_metrics(sample_stats_file)
225225

226226
assert metrics["missing_cumtime"] is None
227+
228+
def test_extract_metrics_duplicate_func_no_line_number(self, sample_stats_file):
229+
"""Test that we match the first occurrence when line_number is None."""
230+
patterns = [
231+
FunctionCallConfiguration(
232+
"duplicate_first",
233+
"vivarium/framework/values/pipeline.py",
234+
"duplicate_func",
235+
line_number=None, # Should match first occurrence
236+
extract_cumtime=True,
237+
extract_percall=True,
238+
extract_ncalls=True,
239+
)
240+
]
241+
config = ExtractionConfig(patterns=patterns)
242+
metrics = config.extract_metrics(sample_stats_file)
243+
244+
# Should match line 66, the first occurrence
245+
assert metrics["duplicate_first_cumtime"] == 0.450
246+
assert metrics["duplicate_first_percall"] == 0.003
247+
assert metrics["duplicate_first_ncalls"] == 150
248+
249+
def test_extract_metrics_duplicate_func_with_line_number(self, sample_stats_file):
250+
"""Test that we can match specific occurrences by line number."""
251+
patterns = [
252+
FunctionCallConfiguration(
253+
"duplicate_line_66",
254+
"vivarium/framework/values/pipeline.py",
255+
"duplicate_func",
256+
line_number=66,
257+
extract_cumtime=True,
258+
extract_percall=True,
259+
extract_ncalls=True,
260+
),
261+
FunctionCallConfiguration(
262+
"duplicate_line_150",
263+
"vivarium/framework/values/pipeline.py",
264+
"duplicate_func",
265+
line_number=150,
266+
extract_cumtime=True,
267+
extract_percall=True,
268+
extract_ncalls=True,
269+
),
270+
]
271+
config = ExtractionConfig(patterns=patterns)
272+
metrics = config.extract_metrics(sample_stats_file)
273+
274+
# Line 66
275+
assert metrics["duplicate_line_66_cumtime"] == 0.450
276+
assert metrics["duplicate_line_66_percall"] == 0.003
277+
assert metrics["duplicate_line_66_ncalls"] == 150
278+
279+
# Line 150
280+
assert metrics["duplicate_line_150_cumtime"] == 0.800
281+
assert metrics["duplicate_line_150_percall"] == 0.004
282+
assert metrics["duplicate_line_150_ncalls"] == 200

0 commit comments

Comments
 (0)