Coverage for tests / unit / test_timeit_fancy.py: 100%
69 statements
« prev ^ index » next coverage.py v7.13.4, created at 2026-02-18 02:51 -0700
« prev ^ index » next coverage.py v7.13.4, created at 2026-02-18 02:51 -0700
1import warnings
2import pytest
3from muutils.statcounter import StatCounter
4import pstats
6# Assuming the timeit_fancy function and FancyTimeitResult are imported from the correct module
7from muutils.timeit_fancy import timeit_fancy, FancyTimeitResult
10def test_timeit_fancy_basic():
11 def simple_function():
12 return sum(range(1000))
14 result = timeit_fancy(simple_function)
16 assert isinstance(result, FancyTimeitResult)
17 assert isinstance(result.timings, StatCounter)
18 assert result.profile is None
19 assert all(t > 0 for t in result.timings.values())
22def test_timeit_fancy_with_return():
23 def simple_function():
24 return sum(range(1000))
26 result = timeit_fancy(simple_function, get_return=True)
28 assert isinstance(result, FancyTimeitResult)
29 assert isinstance(result.timings, StatCounter)
30 assert result.return_value == 499500
31 assert result.profile is None
32 assert all(t > 0 for t in result.timings.values())
35def test_timeit_fancy_with_profiling():
36 def simple_function():
37 return sum(range(1000))
39 result = timeit_fancy(simple_function, do_profiling=True)
41 assert isinstance(result, FancyTimeitResult)
42 assert isinstance(result.timings, StatCounter)
43 assert isinstance(result.profile, pstats.Stats)
44 assert all(t > 0 for t in result.timings.values())
47def test_timeit_fancy_no_return():
48 def simple_function_returns_data():
49 return "helloworld"
51 result = timeit_fancy(simple_function_returns_data, get_return=False)
52 assert isinstance(result, FancyTimeitResult)
53 assert result.return_value is None
54 assert isinstance(result.timings, StatCounter)
55 assert result.profile is None
56 # TYPING: unsure here
57 assert all(t > 0 for t in result.timings.values()) # pyright: ignore[reportGeneralTypeIssues]
60def test_timeit_fancy_with_repeats():
61 def simple_function():
62 return sum(range(100))
64 result = timeit_fancy(simple_function, repeats=10)
66 assert isinstance(result, FancyTimeitResult)
67 assert isinstance(result.timings, StatCounter)
68 assert result.timings.total() == 10
69 assert result.profile is None
70 assert all(t > 0 for t in result.timings.values())
73def test_timeit_fancy_cmd_lambda():
74 result = timeit_fancy(lambda: sum(range(100)))
76 assert isinstance(result, FancyTimeitResult)
77 assert isinstance(result.timings, StatCounter)
78 assert result.profile is None
79 assert all(t > 0 for t in result.timings.values())
82def test_timeit_fancy_cmd_string_warns():
83 # expect a warning
84 with pytest.warns(UserWarning):
85 result = timeit_fancy("sum(range(100))")
87 assert isinstance(result, FancyTimeitResult)
88 assert isinstance(result.timings, StatCounter)
89 assert result.profile is None
90 assert all(t > 0 for t in result.timings.values())
93def test_timeit_fancy_cmd_string_nowarn():
94 # expect no warnings
95 with warnings.catch_warnings():
96 warnings.simplefilter("error")
97 result = timeit_fancy("sum(range(100))", get_return=False, do_profiling=False)
99 assert isinstance(result, FancyTimeitResult)
100 assert isinstance(result.timings, StatCounter)
101 assert result.profile is None
102 assert all(t > 0 for t in result.timings.values())