GCC Code Coverage Report


Directory: ./
Coverage: low: ≥ 0% medium: ≥ 75.0% high: ≥ 90.0%
Coverage Exec / Excl / Total
Lines: 94.9% 258 / 0 / 272
Functions: 100.0% 169 / 0 / 169
Branches: 65.6% 118 / 0 / 180

src/math/ds/mint/ms64/lib.hpp
Line Branch Exec Source
1 #pragma once
2
3 #include "../../../../nt/mod/montgomery64/lib.hpp"
4 #include "../_base/lib.hpp"
5
6 namespace tifa_libs {
7
8 template <u64 MOD>
9 class mint_ms64_tag : public mint_impl_::mint_tag_base {
10 using core = montgomery64<MOD>;
11
12 public:
13 static CEXP bool FIXED_MOD = true;
14
15 protected:
16 using raw_t = u64;
17 raw_t v_{};
18 32072518880 CEXP mint_ms64_tag() NE = default;
19 37418163479 CEXP mint_ms64_tag(int_c auto v) NE : v_{mod(v)} {}
20
21 public:
22 2849645418 static CEXP raw_t mod(sint_c auto v) NE {
23 if CEXP (smost64_c<decltype(v)>) {
24
102/156
unsigned long tifa_libs::mint_ms64_tag<1000000007ul>::mod<int>(int):
✓ Branch 0 taken 39078311 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 39078311 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 39078311 times.
✗ Branch 6 not taken.
unsigned long tifa_libs::mint_ms64_tag<1000000007ul>::mod<long>(long):
✓ Branch 0 taken 114027477 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 93660656 times.
✓ Branch 4 taken 20366821 times.
✓ Branch 5 taken 93660656 times.
✓ Branch 6 taken 20366821 times.
unsigned long tifa_libs::mint_ms64_tag<1012924417ul>::mod<int>(int):
✓ Branch 0 taken 368563 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 368563 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 368563 times.
✗ Branch 6 not taken.
unsigned long tifa_libs::mint_ms64_tag<1231453023109121ul>::mod<int>(int):
✓ Branch 0 taken 110 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 110 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 110 times.
✗ Branch 6 not taken.
unsigned long tifa_libs::mint_ms64_tag<1231453023109121ul>::mod<long>(long):
✓ Branch 0 taken 1045 times.
✓ Branch 1 taken 1254 times.
✓ Branch 3 taken 1045 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1045 times.
✓ Branch 6 taken 1254 times.
unsigned long tifa_libs::mint_ms64_tag<167772161ul>::mod<int>(int):
✓ Branch 0 taken 53053523 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 53053523 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 53053523 times.
✗ Branch 6 not taken.
unsigned long tifa_libs::mint_ms64_tag<180143985094819841ul>::mod<int>(int):
✓ Branch 0 taken 99 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 99 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 99 times.
✗ Branch 6 not taken.
unsigned long tifa_libs::mint_ms64_tag<180143985094819841ul>::mod<long>(long):
✓ Branch 0 taken 1060 times.
✓ Branch 1 taken 1121 times.
✓ Branch 3 taken 1060 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1060 times.
✓ Branch 6 taken 1121 times.
unsigned long tifa_libs::mint_ms64_tag<2013265921ul>::mod<int>(int):
✓ Branch 0 taken 154 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 154 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 154 times.
✗ Branch 6 not taken.
unsigned long tifa_libs::mint_ms64_tag<2013265921ul>::mod<long>(long):
✓ Branch 0 taken 799 times.
✓ Branch 1 taken 1199 times.
✓ Branch 3 taken 799 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 799 times.
✓ Branch 6 taken 1199 times.
unsigned long tifa_libs::mint_ms64_tag<2061584302081ul>::mod<int>(int):
✓ Branch 0 taken 131 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 131 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 131 times.
✗ Branch 6 not taken.
unsigned long tifa_libs::mint_ms64_tag<2061584302081ul>::mod<long>(long):
✓ Branch 0 taken 953 times.
✓ Branch 1 taken 1258 times.
✓ Branch 3 taken 953 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 953 times.
✓ Branch 6 taken 1258 times.
unsigned long tifa_libs::mint_ms64_tag<3799912185593857ul>::mod<int>(int):
✓ Branch 0 taken 3264 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 3264 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 3264 times.
✗ Branch 6 not taken.
unsigned long tifa_libs::mint_ms64_tag<3799912185593857ul>::mod<long>(long):
✓ Branch 0 taken 1261 times.
✓ Branch 1 taken 1538 times.
✓ Branch 3 taken 1261 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1261 times.
✓ Branch 6 taken 1538 times.
unsigned long tifa_libs::mint_ms64_tag<4179340454199820289ul>::mod<int>(int):
✓ Branch 0 taken 96 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 96 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 96 times.
✗ Branch 6 not taken.
unsigned long tifa_libs::mint_ms64_tag<4179340454199820289ul>::mod<long>(long):
✓ Branch 0 taken 955 times.
✓ Branch 1 taken 1335 times.
✓ Branch 3 taken 955 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 955 times.
✓ Branch 6 taken 1335 times.
unsigned long tifa_libs::mint_ms64_tag<469762049ul>::mod<int>(int):
✓ Branch 0 taken 53053523 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 53053523 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 53053523 times.
✗ Branch 6 not taken.
unsigned long tifa_libs::mint_ms64_tag<6597069766657ul>::mod<int>(int):
✓ Branch 0 taken 106 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 106 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 106 times.
✗ Branch 6 not taken.
unsigned long tifa_libs::mint_ms64_tag<6597069766657ul>::mod<long>(long):
✓ Branch 0 taken 753 times.
✓ Branch 1 taken 974 times.
✓ Branch 3 taken 753 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 753 times.
✓ Branch 6 taken 974 times.
unsigned long tifa_libs::mint_ms64_tag<75161927681ul>::mod<int>(int):
✓ Branch 0 taken 121 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 121 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 121 times.
✗ Branch 6 not taken.
unsigned long tifa_libs::mint_ms64_tag<75161927681ul>::mod<long>(long):
✓ Branch 0 taken 804 times.
✓ Branch 1 taken 1033 times.
✓ Branch 3 taken 804 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 804 times.
✓ Branch 6 taken 1033 times.
unsigned long tifa_libs::mint_ms64_tag<754974721ul>::mod<int>(int):
✓ Branch 0 taken 53053523 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 53053523 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 53053523 times.
✗ Branch 6 not taken.
unsigned long tifa_libs::mint_ms64_tag<77309411329ul>::mod<int>(int):
✓ Branch 0 taken 109 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 109 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 109 times.
✗ Branch 6 not taken.
unsigned long tifa_libs::mint_ms64_tag<77309411329ul>::mod<long>(long):
✓ Branch 0 taken 651 times.
✓ Branch 1 taken 880 times.
✓ Branch 3 taken 651 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 651 times.
✓ Branch 6 taken 880 times.
unsigned long tifa_libs::mint_ms64_tag<998244353ul>::mod<int>(int):
✓ Branch 0 taken 533909168 times.
✓ Branch 1 taken 6852 times.
✓ Branch 3 taken 533909168 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 533909168 times.
✓ Branch 6 taken 6852 times.
unsigned long tifa_libs::mint_ms64_tag<998244353ul>::mod<long>(long):
✓ Branch 0 taken 2003071415 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 1439282596 times.
✓ Branch 4 taken 563788819 times.
✓ Branch 5 taken 1439282596 times.
✓ Branch 6 taken 563788819 times.
2849645418 retif_((v >= 0 && (u64)v < mod()) [[likely]], core::redc_mul((u64)v, core::R2));
25 }
26 584173084 return core::redc_mul(core::norm(i64(v % (i64)mod())), core::R2);
27 }
28 34568518061 static CEXP raw_t mod(uint_c auto v) NE {
29 if CEXP (umost64_c<decltype(v)>) {
30
16/24
unsigned long tifa_libs::mint_ms64_tag<1000000007ul>::mod<bool>(bool):
✓ Branch 1 taken 56 times.
✗ Branch 2 not taken.
unsigned long tifa_libs::mint_ms64_tag<1000000007ul>::mod<unsigned int>(unsigned int):
✓ Branch 1 taken 2473411062 times.
✗ Branch 2 not taken.
unsigned long tifa_libs::mint_ms64_tag<1000000007ul>::mod<unsigned long>(unsigned long):
✓ Branch 1 taken 108806098 times.
✗ Branch 2 not taken.
unsigned long tifa_libs::mint_ms64_tag<1012924417ul>::mod<unsigned int>(unsigned int):
✓ Branch 1 taken 27056658 times.
✗ Branch 2 not taken.
unsigned long tifa_libs::mint_ms64_tag<1012924417ul>::mod<unsigned long>(unsigned long):
✓ Branch 1 taken 21312529 times.
✗ Branch 2 not taken.
unsigned long tifa_libs::mint_ms64_tag<167772161ul>::mod<unsigned long>(unsigned long):
✓ Branch 1 taken 1039619671 times.
✓ Branch 2 taken 2594088967 times.
unsigned long tifa_libs::mint_ms64_tag<3799912185593857ul>::mod<unsigned int>(unsigned int):
✓ Branch 1 taken 3120 times.
✗ Branch 2 not taken.
unsigned long tifa_libs::mint_ms64_tag<3799912185593857ul>::mod<unsigned long>(unsigned long):
✓ Branch 1 taken 8944 times.
✗ Branch 2 not taken.
unsigned long tifa_libs::mint_ms64_tag<469762049ul>::mod<unsigned long>(unsigned long):
✓ Branch 1 taken 1932920905 times.
✓ Branch 2 taken 1700787733 times.
unsigned long tifa_libs::mint_ms64_tag<754974721ul>::mod<unsigned long>(unsigned long):
✓ Branch 1 taken 2839686724 times.
✓ Branch 2 taken 794021914 times.
unsigned long tifa_libs::mint_ms64_tag<998244353ul>::mod<unsigned int>(unsigned int):
✓ Branch 1 taken 2158589988 times.
✗ Branch 2 not taken.
unsigned long tifa_libs::mint_ms64_tag<998244353ul>::mod<unsigned long>(unsigned long):
✓ Branch 1 taken 18593733777 times.
✓ Branch 2 taken 284469915 times.
34568518061 retif_((cu64 x = (u64)v; x < mod()) [[likely]], core::redc_mul(x, core::R2), core::redc_mul(x % mod(), core::R2));
31 } else retif_((v < mod()) [[likely]], core::redc_mul((u64)v, core::R2), core::redc_mul((u64)(v % mod()), core::R2));
32 }
33 1751378309940 static CEXP raw_t mod() NE { return MOD; }
34 21359102467 ND CEXP raw_t val() CNE {
35 21359102467 const raw_t res = -core::mulh(this->v_ * core::R, mod());
36 21359102467 return res + (mod() & -(res >> 63));
37 }
38 CEXP raw_t& data() NE { return v_; }
39
40 protected:
41 template <class mint>
42 227328231 CEXP auto neg() CNE {
43 227328231 mint res;
44 227328231 res.v_ = (mod() & -raw_t(this->v_ != 0)) - v_;
45 227328231 return res;
46 }
47 565901583694 CEXP void add(mint_ms64_tag CR r) NE { v_ += r.v_ - mod(), v_ += mod() & -(this->v_ >> 63); }
48 527495699962 CEXP void sub(mint_ms64_tag CR r) NE { v_ -= r.v_, v_ += mod() & -(this->v_ >> 63); }
49 671585315784 CEXP void mul(mint_ms64_tag CR r) NE { v_ = core::redc_mul(this->v_, r.v_); }
50 };
51 template <u64 MOD>
52 using mint_ms64 = mint_impl_::mint<mint_ms64_tag<MOD>>;
53
54 } // namespace tifa_libs
55