Path: blob/main/python/bench/src/cython/numbers.pyx
1068 views
from bench import register, all12from nt import xgcd, pi3from nt cimport gcd, xgcd_c, inverse_mod45def test_pi(n=100000):6assert pi(n) == 9592789register("pi(10**5)", pi)1011cdef class A:12cdef int i13def __init__(self, int i):14self.i = i1516def value(self):17return self.i1819def __add__(self, right):20return A((<A>self).i + (<A>right).i)2122def operator_add(int n=100000):2324a = A(2)25b = A(3)26cdef int i27for i in range(n):28c = a + b29assert c.value() == 5303132register("operator_add", operator_add)333435def bench_gcd(int n=10**5):36cdef int s = 037cdef int i38for i in range(n):39s += gcd(92250, 922350 + i)40assert s == 241448441return s424344register("gcd", bench_gcd)454647def bench_xgcd_py(n=10**5):48s = 049for i in range(n):50s += xgcd(92250, 922350 + i)[0]51assert s == 241448452return s5354# 10x slower, of course55# register("xgcd_py", bench_xgcd_py)565758def bench_xgcd(int n=10**5):59cdef int s = 0, cx, cy, i60for i in range(n):61s += xgcd_c(92250, 922350 + i, &cx, &cy)62assert s == 241448463return s646566register("xgcd", bench_xgcd)676869def bench_inverse_mod(long long n=10**5):70cdef long long i, s = 071for i in range(1, n):72s += inverse_mod(i, 1073741827) # nextprime(2^30)73assert s == 53532319533988747576register("bench_inverse_mod", bench_inverse_mod)777879def sum_loop(int n=1000000):80cdef int s = 0, i81for i in range(0, n, 3):82s += 183assert s == 33333484return s858687register("sum_loop", sum_loop)888990def sum_range(long long n=1000000):91n = sum(range(0, n, 3))92assert n == 166666833333939495register("sum_range", sum_range)969798def sum_reversed(long long n=1000000):99n = sum(reversed(list(range(0, n, 3))))100assert n == 166666833333101102103register("sum_reversed", sum_reversed)104105if __name__ == '__main__':106all('numbers')107108109