GCC Code Coverage Report


Directory: ./
Coverage: low: ≥ 0% medium: ≥ 75.0% high: ≥ 90.0%
Coverage Exec / Excl / Total
Lines: 88.8% 191 / 0 / 215
Functions: 100.0% 112 / 0 / 112
Branches: 59.6% 56 / 0 / 94

src/math/ds/mint/bd/lib.hpp
Line Branch Exec Source
1 #pragma once
2
3 #include "../../../../nt/mod/barrett/lib.hpp"
4 #include "../_base/lib.hpp"
5
6 namespace tifa_libs {
7
8 template <i64 ID>
9 class mint_bd_tag : public mint_impl_::mint_tag_base {
10 static inline barrett<0> core;
11
12 public:
13 static CEXP bool FIXED_MOD = false;
14 5473 static CEXP void set_mod(u32 m) NE { core.reset(m); }
15
16 protected:
17 using raw_t = u32;
18 raw_t v_{};
19 11820906307 CEXP mint_bd_tag() NE = default;
20 47783867050 CEXP mint_bd_tag(int_c auto v) NE : v_{mod(v)} {}
21
22 public:
23 2445532897 static CEXP raw_t mod(sint_c auto v) NE {
24
15/26
unsigned int tifa_libs::mint_bd_tag<11l>::mod<int>(int):
✓ Branch 0 taken 25584018 times.
✗ Branch 1 not taken.
unsigned int tifa_libs::mint_bd_tag<11l>::mod<long>(long):
✓ Branch 0 taken 73134690 times.
✗ Branch 1 not taken.
unsigned int tifa_libs::mint_bd_tag<12l>::mod<int>(int):
✓ Branch 0 taken 17776903 times.
✗ Branch 1 not taken.
unsigned int tifa_libs::mint_bd_tag<12l>::mod<long>(long):
✓ Branch 0 taken 30332502 times.
✗ Branch 1 not taken.
unsigned int tifa_libs::mint_bd_tag<13l>::mod<int>(int):
✓ Branch 0 taken 32168167 times.
✗ Branch 1 not taken.
unsigned int tifa_libs::mint_bd_tag<13l>::mod<long>(long):
✓ Branch 0 taken 66735236 times.
✗ Branch 1 not taken.
unsigned int tifa_libs::mint_bd_tag<14l>::mod<int>(int):
✓ Branch 0 taken 263716307 times.
✓ Branch 1 taken 2284 times.
unsigned int tifa_libs::mint_bd_tag<14l>::mod<long>(long):
✓ Branch 0 taken 885091678 times.
✗ Branch 1 not taken.
unsigned int tifa_libs::mint_bd_tag<15l>::mod<int>(int):
✓ Branch 0 taken 402550937 times.
✓ Branch 1 taken 6852 times.
unsigned int tifa_libs::mint_bd_tag<15l>::mod<long>(long):
✓ Branch 0 taken 296764316 times.
✗ Branch 1 not taken.
unsigned int tifa_libs::mint_bd_tag<16l>::mod<int>(int):
✓ Branch 0 taken 323809775 times.
✗ Branch 1 not taken.
unsigned int tifa_libs::mint_bd_tag<16l>::mod<long>(long):
✓ Branch 0 taken 15262980 times.
✗ Branch 1 not taken.
unsigned int tifa_libs::mint_bd_tag<17l>::mod<int>(int):
✓ Branch 0 taken 12596252 times.
✗ Branch 1 not taken.
2445532897 if (v >= 0) return mod((to_uint_t<decltype(v)>)v);
25
2/26
unsigned int tifa_libs::mint_bd_tag<11l>::mod<int>(int):
✗ Branch 1 not taken.
✗ Branch 2 not taken.
unsigned int tifa_libs::mint_bd_tag<11l>::mod<long>(long):
✗ Branch 1 not taken.
✗ Branch 2 not taken.
unsigned int tifa_libs::mint_bd_tag<12l>::mod<int>(int):
✗ Branch 1 not taken.
✗ Branch 2 not taken.
unsigned int tifa_libs::mint_bd_tag<12l>::mod<long>(long):
✗ Branch 1 not taken.
✗ Branch 2 not taken.
unsigned int tifa_libs::mint_bd_tag<13l>::mod<int>(int):
✗ Branch 1 not taken.
✗ Branch 2 not taken.
unsigned int tifa_libs::mint_bd_tag<13l>::mod<long>(long):
✗ Branch 1 not taken.
✗ Branch 2 not taken.
unsigned int tifa_libs::mint_bd_tag<14l>::mod<int>(int):
✓ Branch 1 taken 2284 times.
✗ Branch 2 not taken.
unsigned int tifa_libs::mint_bd_tag<14l>::mod<long>(long):
✗ Branch 1 not taken.
✗ Branch 2 not taken.
unsigned int tifa_libs::mint_bd_tag<15l>::mod<int>(int):
✓ Branch 1 taken 6852 times.
✗ Branch 2 not taken.
unsigned int tifa_libs::mint_bd_tag<15l>::mod<long>(long):
✗ Branch 1 not taken.
✗ Branch 2 not taken.
unsigned int tifa_libs::mint_bd_tag<16l>::mod<int>(int):
✗ Branch 1 not taken.
✗ Branch 2 not taken.
unsigned int tifa_libs::mint_bd_tag<16l>::mod<long>(long):
✗ Branch 1 not taken.
✗ Branch 2 not taken.
unsigned int tifa_libs::mint_bd_tag<17l>::mod<int>(int):
✗ Branch 1 not taken.
✗ Branch 2 not taken.
9136 if (auto ret = mod((to_uint_t<decltype(v)>)-v); ret) return mod() - ret;
26 else return ret;
27 }
28 47783867050 static CEXP raw_t mod(uint_c auto v) NE {
29 47783867050 if CEXP (umost64_c<decltype(v)>) return (raw_t)core.reduce((u64)v);
30 else if (v < UINT64_MAX) return (raw_t)core.reduce((u64)v);
31 else return raw_t(v % mod());
32 }
33 92331410864 static CEXP raw_t mod() NE { return (raw_t)core.mod; }
34 12091438327 ND CEXP raw_t val() CNE { return v_; }
35 CEXP raw_t& data() NE { return v_; }
36
37 protected:
38 template <class mint>
39 354711400 CEXP auto neg() CNE {
40 354711400 mint res;
41
12/14
auto tifa_libs::mint_bd_tag<11l>::neg<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<11l> > >() const:
✓ Branch 0 taken 2183943 times.
✓ Branch 1 taken 133364 times.
auto tifa_libs::mint_bd_tag<12l>::neg<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<12l> > >() const:
✓ Branch 0 taken 5234319 times.
✓ Branch 1 taken 776668 times.
auto tifa_libs::mint_bd_tag<13l>::neg<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> > >() const:
✓ Branch 0 taken 60758574 times.
✓ Branch 1 taken 777943 times.
auto tifa_libs::mint_bd_tag<14l>::neg<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<14l> > >() const:
✓ Branch 0 taken 71748303 times.
✓ Branch 1 taken 1693863 times.
auto tifa_libs::mint_bd_tag<15l>::neg<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<15l> > >() const:
✓ Branch 0 taken 210923847 times.
✓ Branch 1 taken 480564 times.
auto tifa_libs::mint_bd_tag<16l>::neg<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<16l> > >() const:
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
auto tifa_libs::mint_bd_tag<17l>::neg<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<17l> > >() const:
✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
354711400 if (v_) res.v_ = mod() - v_;
42 354711400 return res;
43 }
44 58864872105 CEXP void add(mint_bd_tag CR r) NE {
45
13/14
tifa_libs::mint_bd_tag<11l>::add(tifa_libs::mint_bd_tag<11l> const&):
✓ Branch 1 taken 2648668700 times.
✓ Branch 2 taken 2844003170 times.
tifa_libs::mint_bd_tag<12l>::add(tifa_libs::mint_bd_tag<12l> const&):
✓ Branch 1 taken 9920194916 times.
✓ Branch 2 taken 13852258808 times.
tifa_libs::mint_bd_tag<13l>::add(tifa_libs::mint_bd_tag<13l> const&):
✓ Branch 1 taken 653357149 times.
✓ Branch 2 taken 4494949212 times.
tifa_libs::mint_bd_tag<14l>::add(tifa_libs::mint_bd_tag<14l> const&):
✓ Branch 1 taken 1385178907 times.
✓ Branch 2 taken 7951968042 times.
tifa_libs::mint_bd_tag<15l>::add(tifa_libs::mint_bd_tag<15l> const&):
✓ Branch 1 taken 1789560713 times.
✓ Branch 2 taken 5084692940 times.
tifa_libs::mint_bd_tag<16l>::add(tifa_libs::mint_bd_tag<16l> const&):
✓ Branch 1 taken 1692166611 times.
✓ Branch 2 taken 6521568986 times.
tifa_libs::mint_bd_tag<17l>::add(tifa_libs::mint_bd_tag<17l> const&):
✗ Branch 1 not taken.
✓ Branch 2 taken 26303951 times.
58864872105 if ((v_ += r.v_) >= mod()) v_ -= mod();
46 58864872105 }
47 25859809213 CEXP void sub(mint_bd_tag CR r) NE {
48
14/14
tifa_libs::mint_bd_tag<11l>::sub(tifa_libs::mint_bd_tag<11l> const&):
✓ Branch 0 taken 76574346 times.
✓ Branch 1 taken 1952287106 times.
tifa_libs::mint_bd_tag<12l>::sub(tifa_libs::mint_bd_tag<12l> const&):
✓ Branch 0 taken 802598996 times.
✓ Branch 1 taken 915658761 times.
tifa_libs::mint_bd_tag<13l>::sub(tifa_libs::mint_bd_tag<13l> const&):
✓ Branch 0 taken 2310857184 times.
✓ Branch 1 taken 7934759935 times.
tifa_libs::mint_bd_tag<14l>::sub(tifa_libs::mint_bd_tag<14l> const&):
✓ Branch 0 taken 678925194 times.
✓ Branch 1 taken 4550572705 times.
tifa_libs::mint_bd_tag<15l>::sub(tifa_libs::mint_bd_tag<15l> const&):
✓ Branch 0 taken 772022661 times.
✓ Branch 1 taken 1287981395 times.
tifa_libs::mint_bd_tag<16l>::sub(tifa_libs::mint_bd_tag<16l> const&):
✓ Branch 0 taken 995420730 times.
✓ Branch 1 taken 2886093075 times.
tifa_libs::mint_bd_tag<17l>::sub(tifa_libs::mint_bd_tag<17l> const&):
✓ Branch 0 taken 168451809 times.
✓ Branch 1 taken 527605316 times.
25859809213 if (i32(v_ -= r.v_) < 0) v_ += mod();
49 25859809213 }
50 93955402036 CEXP void mul(mint_bd_tag CR r) NE { v_ = (raw_t)core.reduce(u64(v_) * r.v_); }
51 };
52 template <i64 ID>
53 using mint_bd = mint_impl_::mint<mint_bd_tag<ID>>;
54
55 } // namespace tifa_libs
56