@@ -67,93 +67,23 @@ def num_digits_faster(n: int) -> int:
67
67
68
68
def benchmark () -> None :
69
69
"""
70
- Benchmark code for comparing 3 functions,
71
- with 3 different length int values.
70
+ Benchmark multiple functions, with three different length int values.
72
71
"""
73
- print ("\n For small_num = " , small_num , ":" )
74
- print (
75
- "> num_digits()" ,
76
- "\t \t ans =" ,
77
- num_digits (small_num ),
78
- "\t time =" ,
79
- timeit ("z.num_digits(z.small_num)" , setup = "import __main__ as z" ),
80
- "seconds" ,
81
- )
82
- print (
83
- "> num_digits_fast()" ,
84
- "\t ans =" ,
85
- num_digits_fast (small_num ),
86
- "\t time =" ,
87
- timeit ("z.num_digits_fast(z.small_num)" , setup = "import __main__ as z" ),
88
- "seconds" ,
89
- )
90
- print (
91
- "> num_digits_faster()" ,
92
- "\t ans =" ,
93
- num_digits_faster (small_num ),
94
- "\t time =" ,
95
- timeit ("z.num_digits_faster(z.small_num)" , setup = "import __main__ as z" ),
96
- "seconds" ,
97
- )
98
-
99
- print ("\n For medium_num = " , medium_num , ":" )
100
- print (
101
- "> num_digits()" ,
102
- "\t \t ans =" ,
103
- num_digits (medium_num ),
104
- "\t time =" ,
105
- timeit ("z.num_digits(z.medium_num)" , setup = "import __main__ as z" ),
106
- "seconds" ,
107
- )
108
- print (
109
- "> num_digits_fast()" ,
110
- "\t ans =" ,
111
- num_digits_fast (medium_num ),
112
- "\t time =" ,
113
- timeit ("z.num_digits_fast(z.medium_num)" , setup = "import __main__ as z" ),
114
- "seconds" ,
115
- )
116
- print (
117
- "> num_digits_faster()" ,
118
- "\t ans =" ,
119
- num_digits_faster (medium_num ),
120
- "\t time =" ,
121
- timeit ("z.num_digits_faster(z.medium_num)" , setup = "import __main__ as z" ),
122
- "seconds" ,
123
- )
124
-
125
- print ("\n For large_num = " , large_num , ":" )
126
- print (
127
- "> num_digits()" ,
128
- "\t \t ans =" ,
129
- num_digits (large_num ),
130
- "\t time =" ,
131
- timeit ("z.num_digits(z.large_num)" , setup = "import __main__ as z" ),
132
- "seconds" ,
133
- )
134
- print (
135
- "> num_digits_fast()" ,
136
- "\t ans =" ,
137
- num_digits_fast (large_num ),
138
- "\t time =" ,
139
- timeit ("z.num_digits_fast(z.large_num)" , setup = "import __main__ as z" ),
140
- "seconds" ,
141
- )
142
- print (
143
- "> num_digits_faster()" ,
144
- "\t ans =" ,
145
- num_digits_faster (large_num ),
146
- "\t time =" ,
147
- timeit ("z.num_digits_faster(z.large_num)" , setup = "import __main__ as z" ),
148
- "seconds" ,
149
- )
72
+ from collections .abc import Callable
73
+
74
+ def benchmark_a_function (func : Callable , value : int ) -> None :
75
+ call = f"{ func .__name__ } ({ value } )"
76
+ timing = timeit (f"__main__.{ call } " , setup = "import __main__" )
77
+ print (f"{ call } : { func (value )} -- { timing } seconds" )
78
+
79
+ for value in (262144 , 1125899906842624 , 1267650600228229401496703205376 ):
80
+ for func in (num_digits , num_digits_fast , num_digits_faster ):
81
+ benchmark_a_function (func , value )
82
+ print ()
150
83
151
84
152
85
if __name__ == "__main__" :
153
- small_num = 262144
154
- medium_num = 1125899906842624
155
- large_num = 1267650600228229401496703205376
156
- benchmark ()
157
86
import doctest
158
87
159
88
doctest .testmod ()
89
+ benchmark ()
0 commit comments