GCC Code Coverage Report


Directory: src/
Coverage: low: ≥ 0% medium: ≥ 75.0% high: ≥ 90.0%
Coverage Exec / Excl / Total
Lines: 92.6% 25 / 0 / 27
Functions: 100.0% 9 / 0 / 9
Branches: 96.2% 25 / 0 / 26

num/trunc_series.hpp
Line Branch Exec Source
1 #pragma once
2
3 #include <array>
4 #include <cstddef>
5
6 namespace wala {
7
8 // Truncated polynomial mod x^N over num
9 template <typename num, int N> struct trunc_series {
10 2304 std::array<num, size_t(N)> a{};
11 67544 num& operator[](int i) { return a[size_t(i)]; }
12 122160 const num& operator[](int i) const { return a[size_t(i)]; }
13 7856 num* data() { return a.data(); }
14 6464 const num* data() const { return a.data(); }
15
6/6
wala::trunc_series<wala::modnum<1000000007>, 2>::operator+=(wala::trunc_series<wala::modnum<1000000007>, 2> const&):
✓ Branch 15 → 3 taken 8064 times.
✓ Branch 15 → 16 taken 4032 times.
wala::trunc_series<wala::modnum<1000000007>, 3>::operator+=(wala::trunc_series<wala::modnum<1000000007>, 3> const&):
✓ Branch 15 → 3 taken 12096 times.
✓ Branch 15 → 16 taken 4032 times.
wala::trunc_series<wala::modnum<998244353>, 3>::operator+=(wala::trunc_series<wala::modnum<998244353>, 3> const&):
✓ Branch 15 → 3 taken 12096 times.
✓ Branch 15 → 16 taken 4032 times.
44352 trunc_series& operator+=(const trunc_series& o) { for (int i = 0; i < N; i++) a[i] += o.a[i]; return *this; }
16 ✗ friend trunc_series operator+(trunc_series x, const trunc_series& y) { x += y; return x; }
17
6/6
wala::trunc_series<wala::modnum<1000000007>, 2>::operator-=(wala::trunc_series<wala::modnum<1000000007>, 2> const&):
✓ Branch 15 → 3 taken 36 times.
✓ Branch 15 → 16 taken 18 times.
wala::trunc_series<wala::modnum<1000000007>, 3>::operator-=(wala::trunc_series<wala::modnum<1000000007>, 3> const&):
✓ Branch 15 → 3 taken 54 times.
✓ Branch 15 → 16 taken 18 times.
wala::trunc_series<wala::modnum<998244353>, 3>::operator-=(wala::trunc_series<wala::modnum<998244353>, 3> const&):
✓ Branch 15 → 3 taken 54 times.
✓ Branch 15 → 16 taken 18 times.
198 trunc_series& operator-=(const trunc_series& o) { for (int i = 0; i < N; i++) a[i] -= o.a[i]; return *this; }
18 54 friend trunc_series operator-(trunc_series x, const trunc_series& y) { x -= y; return x; }
19 12216 friend trunc_series operator*(const trunc_series& x, const trunc_series& y) {
20 12216 trunc_series r;
21
12/12
wala::operator*(wala::trunc_series<wala::modnum<1000000007>, 2> const&, wala::trunc_series<wala::modnum<1000000007>, 2> const&):
✓ Branch 29 → 5 taken 12216 times.
✓ Branch 29 → 30 taken 8144 times.
✓ Branch 31 → 32 taken 8144 times.
✓ Branch 31 → 33 taken 4072 times.
wala::operator*(wala::trunc_series<wala::modnum<1000000007>, 3> const&, wala::trunc_series<wala::modnum<1000000007>, 3> const&):
✓ Branch 29 → 5 taken 24432 times.
✓ Branch 29 → 30 taken 12216 times.
✓ Branch 31 → 32 taken 12216 times.
✓ Branch 31 → 33 taken 4072 times.
wala::operator*(wala::trunc_series<wala::modnum<998244353>, 3> const&, wala::trunc_series<wala::modnum<998244353>, 3> const&):
✓ Branch 29 → 5 taken 24432 times.
✓ Branch 29 → 30 taken 12216 times.
✓ Branch 31 → 32 taken 12216 times.
✓ Branch 31 → 33 taken 4072 times.
228032 for (int i = 0; i < N; i++) for (int j = 0; j < N - i; j++) r[i + j] += x[i] * y[j];
22 12216 return r;
23 }
24 ✗ trunc_series& operator*=(const trunc_series& o) { return *this = *this * o; }
25
1/2
✓ Branch 20 → 21 taken 2304 times.
✗ Branch 20 → 25 not taken.
4608 friend bool operator==(const trunc_series&, const trunc_series&) = default;
26 };
27
28 } // namespace wala
29