GCC Code Coverage Report


Directory: ./
Coverage: low: ≥ 0% medium: ≥ 75.0% high: ≥ 90.0%
Coverage Exec / Excl / Total
Lines: 89.9% 133 / 0 / 148
Functions: 100.0% 79 / 0 / 79
Branches: 62.9% 39 / 0 / 62

src/math/ds/mint/bs/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 <u64 MOD_>
9 class mint_bs_tag : public mint_impl_::mint_tag_base {
10 static_assert(MOD_ && MOD_ <= UINT32_MAX);
11 using core = barrett<MOD_>;
12
13 public:
14 static CEXP bool FIXED_MOD = true;
15
16 protected:
17 using raw_t = u32;
18 raw_t v_{};
19 41221199435 CEXP mint_bs_tag() NE = default;
20 61942464690 CEXP mint_bs_tag(int_c auto v) NE : v_{mod(v)} {}
21
22 public:
23 2978125045 static CEXP raw_t mod(sint_c auto v) NE {
24
9/16
unsigned int tifa_libs::mint_bs_tag<1000000007ul>::mod<int>(int):
✓ Branch 0 taken 39078311 times.
✗ Branch 1 not taken.
unsigned int tifa_libs::mint_bs_tag<1000000007ul>::mod<long>(long):
✓ Branch 0 taken 114027477 times.
✗ Branch 1 not taken.
unsigned int tifa_libs::mint_bs_tag<1012924417ul>::mod<int>(int):
✓ Branch 0 taken 368563 times.
✗ Branch 1 not taken.
unsigned int tifa_libs::mint_bs_tag<167772161ul>::mod<int>(int):
✓ Branch 0 taken 69503007 times.
✗ Branch 1 not taken.
unsigned int tifa_libs::mint_bs_tag<469762049ul>::mod<int>(int):
✓ Branch 0 taken 69503007 times.
✗ Branch 1 not taken.
unsigned int tifa_libs::mint_bs_tag<754974721ul>::mod<int>(int):
✓ Branch 0 taken 69503007 times.
✗ Branch 1 not taken.
unsigned int tifa_libs::mint_bs_tag<998244353ul>::mod<int>(int):
✓ Branch 0 taken 559736956 times.
✓ Branch 1 taken 11420 times.
unsigned int tifa_libs::mint_bs_tag<998244353ul>::mod<long>(long):
✓ Branch 0 taken 2056393297 times.
✗ Branch 1 not taken.
2978125045 if (v >= 0) return mod((to_uint_t<decltype(v)>)v);
25
1/16
unsigned int tifa_libs::mint_bs_tag<1000000007ul>::mod<int>(int):
✗ Branch 1 not taken.
✗ Branch 2 not taken.
unsigned int tifa_libs::mint_bs_tag<1000000007ul>::mod<long>(long):
✗ Branch 1 not taken.
✗ Branch 2 not taken.
unsigned int tifa_libs::mint_bs_tag<1012924417ul>::mod<int>(int):
✗ Branch 1 not taken.
✗ Branch 2 not taken.
unsigned int tifa_libs::mint_bs_tag<167772161ul>::mod<int>(int):
✗ Branch 1 not taken.
✗ Branch 2 not taken.
unsigned int tifa_libs::mint_bs_tag<469762049ul>::mod<int>(int):
✗ Branch 1 not taken.
✗ Branch 2 not taken.
unsigned int tifa_libs::mint_bs_tag<754974721ul>::mod<int>(int):
✗ Branch 1 not taken.
✗ Branch 2 not taken.
unsigned int tifa_libs::mint_bs_tag<998244353ul>::mod<int>(int):
✓ Branch 1 taken 11420 times.
✗ Branch 2 not taken.
unsigned int tifa_libs::mint_bs_tag<998244353ul>::mod<long>(long):
✗ Branch 1 not taken.
✗ Branch 2 not taken.
11420 if (auto ret = mod((to_uint_t<decltype(v)>)-v); ret) return mod() - ret;
26 else return ret;
27 }
28 61942464690 static CEXP raw_t mod(uint_c auto v) NE {
29 61942464690 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 1237346755188 static CEXP raw_t mod() NE { return MOD_; }
34 26796330039 ND CEXP raw_t val() CNE { return v_; }
35 CEXP raw_t& data() NE { return v_; }
36
37 protected:
38 template <class mint>
39 430973818 CEXP auto neg() CNE {
40 430973818 mint res;
41
5/6
auto tifa_libs::mint_bs_tag<1000000007ul>::neg<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<1000000007ul> > >() const:
✓ Branch 0 taken 1819236 times.
✗ Branch 1 not taken.
auto tifa_libs::mint_bs_tag<1012924417ul>::neg<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<1012924417ul> > >() const:
✓ Branch 0 taken 1065728 times.
✓ Branch 1 taken 1807937 times.
auto tifa_libs::mint_bs_tag<998244353ul>::neg<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > >() const:
✓ Branch 0 taken 424217174 times.
✓ Branch 1 taken 2063743 times.
430973818 if (v_) res.v_ = mod() - v_;
42 430973818 return res;
43 }
44 689674781217 CEXP void add(mint_bs_tag CR r) NE {
45
12/12
tifa_libs::mint_bs_tag<1000000007ul>::add(tifa_libs::mint_bs_tag<1000000007ul> const&):
✓ Branch 1 taken 1725965 times.
✓ Branch 2 taken 82165426 times.
tifa_libs::mint_bs_tag<1012924417ul>::add(tifa_libs::mint_bs_tag<1012924417ul> const&):
✓ Branch 1 taken 2696511994 times.
✓ Branch 2 taken 4077833047 times.
tifa_libs::mint_bs_tag<167772161ul>::add(tifa_libs::mint_bs_tag<167772161ul> const&):
✓ Branch 1 taken 68138345003 times.
✓ Branch 2 taken 93335573557 times.
tifa_libs::mint_bs_tag<469762049ul>::add(tifa_libs::mint_bs_tag<469762049ul> const&):
✓ Branch 1 taken 67799425286 times.
✓ Branch 2 taken 93674493274 times.
tifa_libs::mint_bs_tag<754974721ul>::add(tifa_libs::mint_bs_tag<754974721ul> const&):
✓ Branch 1 taken 67482928321 times.
✓ Branch 2 taken 93990990239 times.
tifa_libs::mint_bs_tag<998244353ul>::add(tifa_libs::mint_bs_tag<998244353ul> const&):
✓ Branch 1 taken 72025217109 times.
✓ Branch 2 taken 126369571996 times.
689674781217 if ((v_ += r.v_) >= mod()) v_ -= mod();
46 689674781217 }
47 649220959315 CEXP void sub(mint_bs_tag CR r) NE {
48
12/12
tifa_libs::mint_bs_tag<1000000007ul>::sub(tifa_libs::mint_bs_tag<1000000007ul> const&):
✓ Branch 0 taken 294420086 times.
✓ Branch 1 taken 508421134 times.
tifa_libs::mint_bs_tag<1012924417ul>::sub(tifa_libs::mint_bs_tag<1012924417ul> const&):
✓ Branch 0 taken 2676918563 times.
✓ Branch 1 taken 3945872004 times.
tifa_libs::mint_bs_tag<167772161ul>::sub(tifa_libs::mint_bs_tag<167772161ul> const&):
✓ Branch 0 taken 67397243274 times.
✓ Branch 1 taken 94076675286 times.
tifa_libs::mint_bs_tag<469762049ul>::sub(tifa_libs::mint_bs_tag<469762049ul> const&):
✓ Branch 0 taken 67513228040 times.
✓ Branch 1 taken 93960690520 times.
tifa_libs::mint_bs_tag<754974721ul>::sub(tifa_libs::mint_bs_tag<754974721ul> const&):
✓ Branch 0 taken 67649007849 times.
✓ Branch 1 taken 93824910711 times.
tifa_libs::mint_bs_tag<998244353ul>::sub(tifa_libs::mint_bs_tag<998244353ul> const&):
✓ Branch 0 taken 57187922908 times.
✓ Branch 1 taken 100185648940 times.
649220959315 if (i32(v_ -= r.v_) < 0) v_ += mod();
49 649220959315 }
50 838571446930 CEXP void mul(mint_bs_tag CR r) NE { v_ = (raw_t)core::reduce(u64(v_) * r.v_); }
51 };
52 template <u64 MOD>
53 using mint_bs = mint_impl_::mint<mint_bs_tag<MOD>>;
54
55 } // namespace tifa_libs
56