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

1import warnings 

2import pytest 

3from muutils.statcounter import StatCounter 

4import pstats 

5 

6# Assuming the timeit_fancy function and FancyTimeitResult are imported from the correct module 

7from muutils.timeit_fancy import timeit_fancy, FancyTimeitResult 

8 

9 

10def test_timeit_fancy_basic(): 

11 def simple_function(): 

12 return sum(range(1000)) 

13 

14 result = timeit_fancy(simple_function) 

15 

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()) 

20 

21 

22def test_timeit_fancy_with_return(): 

23 def simple_function(): 

24 return sum(range(1000)) 

25 

26 result = timeit_fancy(simple_function, get_return=True) 

27 

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()) 

33 

34 

35def test_timeit_fancy_with_profiling(): 

36 def simple_function(): 

37 return sum(range(1000)) 

38 

39 result = timeit_fancy(simple_function, do_profiling=True) 

40 

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()) 

45 

46 

47def test_timeit_fancy_no_return(): 

48 def simple_function_returns_data(): 

49 return "helloworld" 

50 

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] 

58 

59 

60def test_timeit_fancy_with_repeats(): 

61 def simple_function(): 

62 return sum(range(100)) 

63 

64 result = timeit_fancy(simple_function, repeats=10) 

65 

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()) 

71 

72 

73def test_timeit_fancy_cmd_lambda(): 

74 result = timeit_fancy(lambda: sum(range(100))) 

75 

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()) 

80 

81 

82def test_timeit_fancy_cmd_string_warns(): 

83 # expect a warning 

84 with pytest.warns(UserWarning): 

85 result = timeit_fancy("sum(range(100))") 

86 

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()) 

91 

92 

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) 

98 

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())