GCC Code Coverage Report


Directory: ./
Coverage: low: ≥ 0% medium: ≥ 75.0% high: ≥ 90.0%
Coverage Exec / Excl / Total
Lines: 100.0% 194 / 0 / 194
Functions: 100.0% 136 / 0 / 136
Branches: 61.8% 42 / 0 / 68

src/math/ds/mint/md64/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 <i64 ID>
9 class mint_md64_tag : public mint_impl_::mint_tag_base {
10 static inline montgomery64<0> core;
11
12 public:
13 static CEXP bool FIXED_MOD = false;
14 4390 static CEXP void set_mod(u64 m) NE { core.reset(m); }
15
16 protected:
17 using raw_t = u64;
18 raw_t v_{};
19 6851957987 CEXP mint_md64_tag() NE = default;
20 23949212949 CEXP mint_md64_tag(int_c auto v) NE : v_{mod(v)} {}
21
22 public:
23
17/30
unsigned long tifa_libs::mint_md64_tag<11l>::mod<int>(int):
✓ Branch 0 taken 25584018 times.
✗ Branch 1 not taken.
unsigned long tifa_libs::mint_md64_tag<11l>::mod<long>(long):
✓ Branch 0 taken 73134690 times.
✗ Branch 1 not taken.
unsigned long tifa_libs::mint_md64_tag<12l>::mod<int>(int):
✓ Branch 0 taken 5358207 times.
✗ Branch 1 not taken.
unsigned long tifa_libs::mint_md64_tag<12l>::mod<long>(long):
✓ Branch 0 taken 30332502 times.
✗ Branch 1 not taken.
unsigned long tifa_libs::mint_md64_tag<13l>::mod<int>(int):
✓ Branch 0 taken 19749895 times.
✗ Branch 1 not taken.
unsigned long tifa_libs::mint_md64_tag<13l>::mod<long>(long):
✓ Branch 0 taken 66735236 times.
✗ Branch 1 not taken.
unsigned long tifa_libs::mint_md64_tag<14l>::mod<int>(int):
✓ Branch 0 taken 122722327 times.
✓ Branch 1 taken 2284 times.
unsigned long tifa_libs::mint_md64_tag<14l>::mod<long>(long):
✓ Branch 0 taken 885091665 times.
✗ Branch 1 not taken.
unsigned long tifa_libs::mint_md64_tag<15l>::mod<int>(int):
✓ Branch 0 taken 265306417 times.
✓ Branch 1 taken 2284 times.
unsigned long tifa_libs::mint_md64_tag<15l>::mod<long>(long):
✓ Branch 0 taken 243442460 times.
✗ Branch 1 not taken.
unsigned long tifa_libs::mint_md64_tag<16l>::mod<int>(int):
✓ Branch 0 taken 12596378 times.
✗ Branch 1 not taken.
unsigned long tifa_libs::mint_md64_tag<16l>::mod<long>(long):
✓ Branch 0 taken 15262980 times.
✗ Branch 1 not taken.
unsigned long tifa_libs::mint_md64_tag<17l>::mod<int>(int):
✓ Branch 0 taken 12596252 times.
✗ Branch 1 not taken.
unsigned long tifa_libs::mint_md64_tag<55l>::mod<int>(int):
✓ Branch 0 taken 3125 times.
✗ Branch 1 not taken.
unsigned long tifa_libs::mint_md64_tag<70l>::mod<int>(int):
✓ Branch 0 taken 5005002 times.
✗ Branch 1 not taken.
1782925722 static CEXP raw_t mod(sint_c auto v) NE { retif_((v >= 0) [[likely]], mod((to_uint_t<decltype(v)>)v), core.redc_mul(core.norm(i64(v % (i64)mod())), core.R2)); }
24 23949208381 static CEXP raw_t mod(uint_c auto v) NE {
25 if CEXP (umost64_c<decltype(v)>) {
26
25/38
unsigned long tifa_libs::mint_md64_tag<11l>::mod<bool>(bool):
✓ Branch 1 taken 56 times.
✗ Branch 2 not taken.
unsigned long tifa_libs::mint_md64_tag<11l>::mod<unsigned int>(unsigned int):
✓ Branch 1 taken 26188782 times.
✗ Branch 2 not taken.
unsigned long tifa_libs::mint_md64_tag<11l>::mod<unsigned long>(unsigned long):
✓ Branch 1 taken 728237222 times.
✓ Branch 2 taken 407046 times.
unsigned long tifa_libs::mint_md64_tag<12l>::mod<unsigned int>(unsigned int):
✓ Branch 1 taken 5578335 times.
✗ Branch 2 not taken.
unsigned long tifa_libs::mint_md64_tag<12l>::mod<unsigned long>(unsigned long):
✓ Branch 1 taken 55470957 times.
✓ Branch 2 taken 9565546 times.
unsigned long tifa_libs::mint_md64_tag<13l>::mod<unsigned int>(unsigned int):
✓ Branch 1 taken 332772079 times.
✗ Branch 2 not taken.
unsigned long tifa_libs::mint_md64_tag<13l>::mod<unsigned long>(unsigned long):
✓ Branch 1 taken 7544085054 times.
✓ Branch 2 taken 30929134 times.
unsigned long tifa_libs::mint_md64_tag<14l>::mod<unsigned int>(unsigned int):
✓ Branch 1 taken 1363928746 times.
✗ Branch 2 not taken.
unsigned long tifa_libs::mint_md64_tag<14l>::mod<unsigned long>(unsigned long):
✓ Branch 1 taken 8253231381 times.
✓ Branch 2 taken 599465503 times.
unsigned long tifa_libs::mint_md64_tag<15l>::mod<unsigned int>(unsigned int):
✓ Branch 1 taken 2664998926 times.
✗ Branch 2 not taken.
unsigned long tifa_libs::mint_md64_tag<15l>::mod<unsigned long>(unsigned long):
✓ Branch 1 taken 2007755979 times.
✓ Branch 2 taken 170571307 times.
unsigned long tifa_libs::mint_md64_tag<16l>::mod<unsigned int>(unsigned int):
✓ Branch 1 taken 51976197 times.
✗ Branch 2 not taken.
unsigned long tifa_libs::mint_md64_tag<16l>::mod<unsigned long>(unsigned long):
✓ Branch 1 taken 24405739 times.
✗ Branch 2 not taken.
unsigned long tifa_libs::mint_md64_tag<17l>::mod<unsigned int>(unsigned int):
✓ Branch 1 taken 51051446 times.
✗ Branch 2 not taken.
unsigned long tifa_libs::mint_md64_tag<17l>::mod<unsigned long>(unsigned long):
✓ Branch 1 taken 3548761 times.
✗ Branch 2 not taken.
unsigned long tifa_libs::mint_md64_tag<55l>::mod<unsigned int>(unsigned int):
✓ Branch 1 taken 6245 times.
✗ Branch 2 not taken.
unsigned long tifa_libs::mint_md64_tag<55l>::mod<unsigned long>(unsigned long):
✓ Branch 1 taken 8944 times.
✗ Branch 2 not taken.
unsigned long tifa_libs::mint_md64_tag<70l>::mod<unsigned int>(unsigned int):
✓ Branch 1 taken 12011998 times.
✗ Branch 2 not taken.
unsigned long tifa_libs::mint_md64_tag<70l>::mod<unsigned long>(unsigned long):
✓ Branch 1 taken 12011998 times.
✓ Branch 2 taken 1001000 times.
23949208381 retif_((cu64 x = (u64)v; x < mod()) [[likely]], core.redc_mul(x, core.R2), core.redc_mul(x % mod(), core.R2));
27 } else retif_((v < mod()) [[likely]], core.redc_mul((raw_t)v, core.R2), core.redc_mul((raw_t)(v % mod()), core.R2));
28 }
29 185884235149 static CEXP raw_t mod() NE { return core.MOD; }
30 9316011261 ND CEXP raw_t val() CNE {
31 9316011261 const raw_t res = -core.mul_h(v_ * core.R, mod());
32 9316011261 return res + (mod() & -(res >> 63));
33 }
34 CEXP raw_t& data() NE { return v_; }
35
36 protected:
37 template <class mint>
38 195666646 CEXP auto neg() CNE {
39 195666646 mint res;
40 195666646 res.v_ = (mod() & -raw_t(v_ != 0)) - v_;
41 195666646 return res;
42 }
43 55580271145 CEXP void add(mint_md64_tag CR r) NE { v_ += r.v_ - mod(), v_ += mod() & -(v_ >> 63); }
44 25618894399 CEXP void sub(mint_md64_tag CR r) NE { v_ -= r.v_, v_ += mod() & -(v_ >> 63); }
45 68339749794 CEXP void mul(mint_md64_tag CR r) NE { v_ = core.redc_mul(v_, r.v_); }
46 };
47 template <i64 ID>
48 using mint_md64 = mint_impl_::mint<mint_md64_tag<ID>>;
49
50 } // namespace tifa_libs
51