Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
sagemathinc
GitHub Repository: sagemathinc/wapython
Path: blob/main/python/bench/src/numbers.py
1067 views
1
from bench import register, all
2
3
from nt import gcd, xgcd, inverse_mod, pi
4
5
6
def test_pi(n=100000):
7
assert pi(n) == 9592
8
9
10
register("pi(10**5)", pi)
11
12
13
def operator_add(n=100000):
14
class A:
15
def __init__(self, i):
16
self.i = i
17
18
def __add__(self, right):
19
return A(self.i + right.i)
20
21
a = A(2)
22
b = A(3)
23
for i in range(n):
24
c = a + b
25
assert c.i == 5
26
27
28
register("operator_add", operator_add)
29
30
31
def bench_gcd(n=10**5):
32
s = 0
33
for i in range(n):
34
s += gcd(92250, 922350 + i)
35
assert s == 2414484
36
return s
37
38
39
register("gcd", bench_gcd)
40
41
42
def bench_xgcd(n=10**5):
43
s = 0
44
for i in range(n):
45
s += xgcd(92250, 922350 + i)[0]
46
assert s == 2414484
47
return s
48
49
50
register("xgcd", bench_xgcd)
51
52
53
def bench_inverse_mod(n=10**5):
54
s = 0
55
for i in range(1, n):
56
s += inverse_mod(i, 1073741827) # nextprime(2^30)
57
assert s == 53532319533988
58
59
60
register("bench_inverse_mod", bench_inverse_mod)
61
62
63
def sum_loop(n=1000000):
64
s = 0
65
for i in range(0, n, 3):
66
s += 1
67
assert s == 333334
68
return s
69
70
71
register("sum_loop", sum_loop)
72
73
74
def sum_range(n=1000000):
75
n = sum(range(0, n, 3))
76
assert n == 166666833333
77
78
79
register("sum_range", sum_range)
80
81
82
def sum_reversed(n=1000000):
83
n = sum(reversed(list(range(0, n, 3))))
84
assert n == 166666833333
85
86
87
register("sum_reversed", sum_reversed)
88
89
if __name__ == '__main__':
90
all('numbers')
91
92