GCC Code Coverage Report


Directory: ./
Coverage: low: ≥ 0% medium: ≥ 75.0% high: ≥ 90.0%
Coverage Exec / Excl / Total
Lines: 96.4% 1448 / 0 / 1502
Functions: 94.8% 984 / 0 / 1038
Branches: 48.8% 41 / 0 / 84

src/math/ds/mint/_base/lib.hpp
Line Branch Exec Source
1 #pragma once
2
3 #include "../../../../nt/inverse/lib.hpp"
4 #include "../../../../util/traits/others/lib.hpp"
5
6 namespace tifa_libs::mint_impl_ {
7
8 struct mint_tag_base {};
9 template <std::derived_from<mint_tag_base> tag_t>
10 struct mint : tag_t {
11 138390767240 CEXP mint() = default;
12 282385937082 CEXP mint(int_c auto v) NE : tag_t(v) {}
13
14 using raw_t = tag_t::raw_t;
15 using sraw_t = to_sint_t<raw_t>;
16 29457460584 static CEXP sraw_t smod() NE { return (sraw_t)tag_t::mod(); }
17 30625884 ND CEXP sraw_t sval() CNE { return (sraw_t)tag_t::val(); }
18 template <int_c T>
19 7551003 CEXPE operator T() CNE { return (T)tag_t::val(); }
20 2007410320606 CEXP mint& operator+=(mint CR r) NE {
21 2007410320606 mint::add(r);
22 2007410320606 return *this;
23 }
24 1786930277739 CEXP mint& operator-=(mint CR r) NE {
25 1786930277739 mint::sub(r);
26 1786930277739 return *this;
27 }
28 2475960920912 CEXP mint& operator*=(mint CR r) NE {
29 2475960920912 mint::mul(r);
30 2475960920912 return *this;
31 }
32 241998626 CEXP mint& operator/=(mint CR r) NE { return *this = *this * r.inv(); }
33 CEXP mint CR operator+() CNE { return *this; }
34 1843816257 CEXP mint operator-() CNE { return tag_t::template neg<mint>(); }
35 2555758928 ND CEXP mint inv() CNE { return inverse(tag_t::val(), tag_t::mod()); }
36 1643284728740 friend CEXP mint operator+(mint l, mint CR r) NE { return l += r; }
37 1687334288171 friend CEXP mint operator-(mint l, mint CR r) NE { return l -= r; }
38 2081381006038 friend CEXP mint operator*(mint l, mint CR r) NE { return l *= r; }
39 125406040 friend CEXP mint operator/(mint l, mint CR r) NE { return l /= r; }
40 16032701718 friend CEXP bool operator==(mint CR l, mint CR r) NE { return l.val() == r.val(); }
41
41/84
tifa_libs::mint_impl_::operator<=>(tifa_libs::mint_impl_::mint<tifa_libs::mint_2e61n1_tag> const&, tifa_libs::mint_impl_::mint<tifa_libs::mint_2e61n1_tag> const&):
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
tifa_libs::mint_impl_::operator<=>(tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<12l> > const&, tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<12l> > const&):
✓ Branch 2 taken 90445 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1889 times.
✓ Branch 5 taken 88556 times.
tifa_libs::mint_impl_::operator<=>(tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> > const&, tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> > const&):
✓ Branch 2 taken 2159383 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 46899 times.
✓ Branch 5 taken 2112484 times.
tifa_libs::mint_impl_::operator<=>(tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<16l> > const&, tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<16l> > const&):
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 5 times.
✓ Branch 5 taken 4 times.
tifa_libs::mint_impl_::operator<=>(tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<17l> > const&, tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<17l> > const&):
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
tifa_libs::mint_impl_::operator<=>(tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > const&, tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > const&):
✓ Branch 2 taken 2247852 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 48876 times.
✓ Branch 5 taken 2198976 times.
tifa_libs::mint_impl_::operator<=>(tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<12l> > const&, tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<12l> > const&):
✓ Branch 2 taken 90445 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1889 times.
✓ Branch 5 taken 88556 times.
tifa_libs::mint_impl_::operator<=>(tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> > const&, tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> > const&):
✓ Branch 2 taken 2159125 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 46528 times.
✓ Branch 5 taken 2112597 times.
tifa_libs::mint_impl_::operator<=>(tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<16l> > const&, tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<16l> > const&):
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 5 times.
✓ Branch 5 taken 4 times.
tifa_libs::mint_impl_::operator<=>(tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<17l> > const&, tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<17l> > const&):
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
tifa_libs::mint_impl_::operator<=>(tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<55l> > const&, tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<55l> > const&):
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
tifa_libs::mint_impl_::operator<=>(tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<12l> > const&, tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<12l> > const&):
✓ Branch 2 taken 90445 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1889 times.
✓ Branch 5 taken 88556 times.
tifa_libs::mint_impl_::operator<=>(tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> > const&, tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> > const&):
✓ Branch 2 taken 2159961 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 46799 times.
✓ Branch 5 taken 2113162 times.
tifa_libs::mint_impl_::operator<=>(tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<16l> > const&, tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<16l> > const&):
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 5 times.
✓ Branch 5 taken 4 times.
tifa_libs::mint_impl_::operator<=>(tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<17l> > const&, tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<17l> > const&):
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
tifa_libs::mint_impl_::operator<=>(tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<54l> > const&, tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<54l> > const&):
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
tifa_libs::mint_impl_::operator<=>(tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<8l> > const&, tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<8l> > const&):
✓ Branch 2 taken 605463 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 12071 times.
✓ Branch 5 taken 593392 times.
tifa_libs::mint_impl_::operator<=>(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<3799912185593857ul> > const&, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<3799912185593857ul> > const&):
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
tifa_libs::mint_impl_::operator<=>(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > const&, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > const&):
✓ Branch 2 taken 2247839 times.
✓ Branch 3 taken 606618 times.
✓ Branch 4 taken 48616 times.
✓ Branch 5 taken 2199223 times.
tifa_libs::mint_impl_::operator<=>(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<1000003ul> > const&, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<1000003ul> > const&):
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
tifa_libs::mint_impl_::operator<=>(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > const&, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > const&):
✓ Branch 2 taken 2248721 times.
✓ Branch 3 taken 606618 times.
✓ Branch 4 taken 48346 times.
✓ Branch 5 taken 2200375 times.
15312942 friend CEXP auto operator<=>(mint CR l, mint CR r) NE { return l.sval() <=> r.sval(); }
42 5588592097 friend auto& operator>>(istream_c auto& is, mint& x) NE {
43 i64 _;
44 5588592097 is >> _, x = mint(_);
45 5588592097 return is;
46 }
47 7073808683 friend auto& operator<<(ostream_c auto& os, mint CR x) NE { return os << x.val(); }
48 friend CEXP auto abs(mint CR x) NE { return x.val(); }
49 };
50
51 } // namespace tifa_libs::mint_impl_
52