Coverage for tests/unit/test_timeit_fancy.py: 100%
69 statements
« prev ^ index » next coverage.py v7.6.1, created at 2025-04-04 03:33 -0600
« prev ^ index » next coverage.py v7.6.1, created at 2025-04-04 03:33 -0600
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 assert all(t > 0 for t in result.timings.values())
59def test_timeit_fancy_with_repeats():
60 def simple_function():
61 return sum(range(100))
63 result = timeit_fancy(simple_function, repeats=10)
65 assert isinstance(result, FancyTimeitResult)
66 assert isinstance(result.timings, StatCounter)
67 assert result.timings.total() == 10
68 assert result.profile is None
69 assert all(t > 0 for t in result.timings.values())
72def test_timeit_fancy_cmd_lambda():
73 result = timeit_fancy(lambda: sum(range(100)))
75 assert isinstance(result, FancyTimeitResult)
76 assert isinstance(result.timings, StatCounter)
77 assert result.profile is None
78 assert all(t > 0 for t in result.timings.values())
81def test_timeit_fancy_cmd_string_warns():
82 # expect a warning
83 with pytest.warns(UserWarning):
84 result = timeit_fancy("sum(range(100))")
86 assert isinstance(result, FancyTimeitResult)
87 assert isinstance(result.timings, StatCounter)
88 assert result.profile is None
89 assert all(t > 0 for t in result.timings.values())
92def test_timeit_fancy_cmd_string_nowarn():
93 # expect no warnings
94 with warnings.catch_warnings():
95 warnings.simplefilter("error")
96 result = timeit_fancy("sum(range(100))", get_return=False, do_profiling=False)
98 assert isinstance(result, FancyTimeitResult)
99 assert isinstance(result.timings, StatCounter)
100 assert result.profile is None
101 assert all(t > 0 for t in result.timings.values())