GCC Code Coverage Report


Directory: ./
Coverage: low: ≥ 0% medium: ≥ 75.0% high: ≥ 90.0%
Coverage Exec / Excl / Total
Lines: 100.0% 90 / 0 / 90
Functions: 100.0% 12 / 0 / 12
Branches: 87.5% 42 / 0 / 48

src/lalg/mat/det_rd/lib.hpp
Line Branch Exec Source
1 #pragma once
2
3 #include "../../lfsr_bm/lib.hpp"
4
5 namespace tifa_libs {
6
7 // OK for matsp
8 template <class Mat, class Gn, class Is0>
9 requires requires(Is0 is0, TPN Mat::val_t t) {
10 { is0(t) } -> std::same_as<bool>;
11 }
12 144 auto det_rd(Mat mat, Gn& gen, Is0&& is0) NE {
13 using T = TPN Mat::val_t;
14 144 cu32 n = mat.row();
15
6/12
auto tifa_libs::det_rd<tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> > >, tifa_libs::rand_gen<unsigned int>, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> >)#1}&>(tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> > >, tifa_libs::rand_gen<unsigned int>&, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> >)#1}&):
✗ Branch 1 not taken.
✓ Branch 2 taken 24 times.
auto tifa_libs::det_rd<tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > >, tifa_libs::rand_gen<unsigned int>, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >)#1}&>(tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > >, tifa_libs::rand_gen<unsigned int>&, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >)#1}&):
✗ Branch 1 not taken.
✓ Branch 2 taken 24 times.
auto tifa_libs::det_rd<tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> > >, tifa_libs::rand_gen<unsigned int>, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> >)#1}&>(tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> > >, tifa_libs::rand_gen<unsigned int>&, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> >)#1}&):
✗ Branch 1 not taken.
✓ Branch 2 taken 24 times.
auto tifa_libs::det_rd<tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> > >, tifa_libs::rand_gen<unsigned int>, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> >)#1}&>(tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> > >, tifa_libs::rand_gen<unsigned int>&, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> >)#1}&):
✗ Branch 1 not taken.
✓ Branch 2 taken 24 times.
auto tifa_libs::det_rd<tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >, tifa_libs::rand_gen<unsigned int>, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >)#1}&>(tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >, tifa_libs::rand_gen<unsigned int>&, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >)#1}&):
✗ Branch 1 not taken.
✓ Branch 2 taken 24 times.
auto tifa_libs::det_rd<tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >, tifa_libs::rand_gen<unsigned int>, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >)#1}&>(tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >, tifa_libs::rand_gen<unsigned int>&, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >)#1}&):
✗ Branch 1 not taken.
✓ Branch 2 taken 24 times.
144 assert(n == mat.col());
16 432 auto gen2 = [&gen](u32 n) NE {
17 432 vec<T> v(n);
18 432 generate(v, gen);
19 432 return v;
20 };
21 288 vec<T> u = gen2(n), v = gen2(n), diag = gen2(n), _(n * 2);
22
12/12
tifa_libs::det_rd<tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> > >, tifa_libs::rand_gen<unsigned int>, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> >)#1}&>(tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> > >, tifa_libs::rand_gen<unsigned int>&, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> >)#1}&)::{lambda(unsigned int)#1}::operator()(unsigned int) const:
✓ Branch 0 taken 103710 times.
✓ Branch 1 taken 24 times.
tifa_libs::det_rd<tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > >, tifa_libs::rand_gen<unsigned int>, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >)#1}&>(tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > >, tifa_libs::rand_gen<unsigned int>&, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >)#1}&)::{lambda(unsigned int)#1}::operator()(unsigned int) const:
✓ Branch 0 taken 103710 times.
✓ Branch 1 taken 24 times.
tifa_libs::det_rd<tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> > >, tifa_libs::rand_gen<unsigned int>, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> >)#1}&>(tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> > >, tifa_libs::rand_gen<unsigned int>&, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> >)#1}&)::{lambda(unsigned int)#1}::operator()(unsigned int) const:
✓ Branch 0 taken 103710 times.
✓ Branch 1 taken 24 times.
tifa_libs::det_rd<tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> > >, tifa_libs::rand_gen<unsigned int>, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> >)#1}&>(tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> > >, tifa_libs::rand_gen<unsigned int>&, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> >)#1}&)::{lambda(unsigned int)#1}::operator()(unsigned int) const:
✓ Branch 0 taken 103710 times.
✓ Branch 1 taken 24 times.
tifa_libs::det_rd<tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >, tifa_libs::rand_gen<unsigned int>, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >)#1}&>(tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >, tifa_libs::rand_gen<unsigned int>&, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >)#1}&)::{lambda(unsigned int)#1}::operator()(unsigned int) const:
✓ Branch 0 taken 103710 times.
✓ Branch 1 taken 24 times.
tifa_libs::det_rd<tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >, tifa_libs::rand_gen<unsigned int>, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >)#1}&>(tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >, tifa_libs::rand_gen<unsigned int>&, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >)#1}&)::{lambda(unsigned int)#1}::operator()(unsigned int) const:
✓ Branch 0 taken 103710 times.
✓ Branch 1 taken 24 times.
622404 flt_ (u32, i, 0, n * 2) {
23 622260 _[i] = std::transform_reduce(begin(u), end(u), begin(v), T{});
24
12/12
tifa_libs::det_rd<tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> > >, tifa_libs::rand_gen<unsigned int>, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> >)#1}&>(tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> > >, tifa_libs::rand_gen<unsigned int>&, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> >)#1}&)::{lambda(unsigned int)#1}::operator()(unsigned int) const:
✓ Branch 3 taken 294133594 times.
✓ Branch 4 taken 103710 times.
tifa_libs::det_rd<tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > >, tifa_libs::rand_gen<unsigned int>, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >)#1}&>(tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > >, tifa_libs::rand_gen<unsigned int>&, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >)#1}&)::{lambda(unsigned int)#1}::operator()(unsigned int) const:
✓ Branch 3 taken 294133594 times.
✓ Branch 4 taken 103710 times.
tifa_libs::det_rd<tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> > >, tifa_libs::rand_gen<unsigned int>, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> >)#1}&>(tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> > >, tifa_libs::rand_gen<unsigned int>&, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> >)#1}&)::{lambda(unsigned int)#1}::operator()(unsigned int) const:
✓ Branch 3 taken 294133594 times.
✓ Branch 4 taken 103710 times.
tifa_libs::det_rd<tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> > >, tifa_libs::rand_gen<unsigned int>, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> >)#1}&>(tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> > >, tifa_libs::rand_gen<unsigned int>&, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> >)#1}&)::{lambda(unsigned int)#1}::operator()(unsigned int) const:
✓ Branch 3 taken 294133594 times.
✓ Branch 4 taken 103710 times.
tifa_libs::det_rd<tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >, tifa_libs::rand_gen<unsigned int>, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >)#1}&>(tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >, tifa_libs::rand_gen<unsigned int>&, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >)#1}&)::{lambda(unsigned int)#1}::operator()(unsigned int) const:
✓ Branch 3 taken 294133594 times.
✓ Branch 4 taken 103710 times.
tifa_libs::det_rd<tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >, tifa_libs::rand_gen<unsigned int>, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >)#1}&>(tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >, tifa_libs::rand_gen<unsigned int>&, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >)#1}&)::{lambda(unsigned int)#1}::operator()(unsigned int) const:
✓ Branch 3 taken 294133594 times.
✓ Branch 4 taken 103710 times.
1765423824 flt_ (u32, i, 0, n) v[i] *= diag[i];
25 622260 v = mat.lproj(v);
26 }
27 144 T res = lfsr_bm(_, std::forward<Is0>(is0)).back() / std::reduce(begin(diag), end(diag), T(1), std::multiplies<T>());
28
12/12
tifa_libs::det_rd<tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> > >, tifa_libs::rand_gen<unsigned int>, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> >)#1}&>(tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> > >, tifa_libs::rand_gen<unsigned int>&, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> >)#1}&)::{lambda(unsigned int)#1}::operator()(unsigned int) const:
✓ Branch 0 taken 13 times.
✓ Branch 1 taken 11 times.
tifa_libs::det_rd<tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > >, tifa_libs::rand_gen<unsigned int>, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >)#1}&>(tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > >, tifa_libs::rand_gen<unsigned int>&, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >)#1}&)::{lambda(unsigned int)#1}::operator()(unsigned int) const:
✓ Branch 0 taken 13 times.
✓ Branch 1 taken 11 times.
tifa_libs::det_rd<tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> > >, tifa_libs::rand_gen<unsigned int>, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> >)#1}&>(tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> > >, tifa_libs::rand_gen<unsigned int>&, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> >)#1}&)::{lambda(unsigned int)#1}::operator()(unsigned int) const:
✓ Branch 0 taken 13 times.
✓ Branch 1 taken 11 times.
tifa_libs::det_rd<tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> > >, tifa_libs::rand_gen<unsigned int>, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> >)#1}&>(tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> > >, tifa_libs::rand_gen<unsigned int>&, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> >)#1}&)::{lambda(unsigned int)#1}::operator()(unsigned int) const:
✓ Branch 0 taken 13 times.
✓ Branch 1 taken 11 times.
tifa_libs::det_rd<tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >, tifa_libs::rand_gen<unsigned int>, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >)#1}&>(tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >, tifa_libs::rand_gen<unsigned int>&, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >)#1}&)::{lambda(unsigned int)#1}::operator()(unsigned int) const:
✓ Branch 0 taken 13 times.
✓ Branch 1 taken 11 times.
tifa_libs::det_rd<tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >, tifa_libs::rand_gen<unsigned int>, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >)#1}&>(tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >, tifa_libs::rand_gen<unsigned int>&, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >)#1}&)::{lambda(unsigned int)#1}::operator()(unsigned int) const:
✓ Branch 0 taken 13 times.
✓ Branch 1 taken 11 times.
144 retif_(((n & 1) == 1), -res, res);
29 144 }
30
31 } // namespace tifa_libs
32