GCC Code Coverage Report


Directory: ./
Coverage: low: ≥ 0% medium: ≥ 75.0% high: ≥ 90.0%
Coverage Exec / Excl / Total
Lines: 100.0% 67 / 0 / 67
Functions: 100.0% 45 / 0 / 45
Branches: 100.0% 22 / 0 / 22

src/graph/ds/amat/lib.hpp
Line Branch Exec Source
1 #pragma once
2
3 #include "../graph_c/lib.hpp"
4
5 namespace tifa_libs {
6 namespace amat_impl_ {
7 template <class T, class... Info>
8 class amat_tag : public graph_info_impl_::graph_tag_base<Info...> {
9 using base_t = graph_info_impl_::graph_tag_base<Info...>;
10 using ET = std::conditional_t<std::is_void_v<T>, u32, T>;
11 struct iter_ {
12 using iter_t = vec<ET>::const_iterator;
13 iter_t it, bgn, ed;
14 CEXP iter_(iter_t begin, iter_t end) NE : it(begin), bgn(begin), ed(end) { nomalize(), bgn = it; }
15
16 CEXP auto begin() CNE { return iter_{bgn, ed}; }
17 CEXP auto end() CNE { return iter_{ed, ed}; }
18
19 CEXP auto operator*() CNE { return *it; }
20 CEXP iter_& operator++() NE {
21 ++it, nomalize();
22 return *this;
23 }
24 CEXP bool operator!=(iter_ const& r) CNE { return it != r.it; }
25
26 private:
27 CEXP void nomalize() NE {
28 while (it != ed && *it == ET{}) ++it;
29 }
30 };
31 vec<ET> g;
32 u32 n_;
33
34 protected:
35 using val_t = T;
36 824 CEXPE amat_tag(u32 n, ET const null = {}) NE : base_t(n), g(n* n, null), n_(n) {
37
22/22
tifa_libs::amat_impl_::amat_tag<long>::amat_tag(unsigned int, long):
✓ Branch 1 taken 2276 times.
✓ Branch 2 taken 50 times.
tifa_libs::amat_impl_::amat_tag<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<16l> >>::amat_tag(unsigned int, tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<16l> >):
✓ Branch 2 taken 4440 times.
✓ Branch 3 taken 44 times.
tifa_libs::amat_impl_::amat_tag<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<17l> >>::amat_tag(unsigned int, tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<17l> >):
✓ Branch 2 taken 2668 times.
✓ Branch 3 taken 11 times.
tifa_libs::amat_impl_::amat_tag<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >>::amat_tag(unsigned int, tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >):
✓ Branch 2 taken 7108 times.
✓ Branch 3 taken 55 times.
tifa_libs::amat_impl_::amat_tag<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<16l> >>::amat_tag(unsigned int, tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<16l> >):
✓ Branch 2 taken 4440 times.
✓ Branch 3 taken 44 times.
tifa_libs::amat_impl_::amat_tag<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<17l> >>::amat_tag(unsigned int, tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<17l> >):
✓ Branch 2 taken 2668 times.
✓ Branch 3 taken 11 times.
tifa_libs::amat_impl_::amat_tag<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<16l> >>::amat_tag(unsigned int, tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<16l> >):
✓ Branch 2 taken 4440 times.
✓ Branch 3 taken 44 times.
tifa_libs::amat_impl_::amat_tag<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<17l> >>::amat_tag(unsigned int, tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<17l> >):
✓ Branch 2 taken 2668 times.
✓ Branch 3 taken 11 times.
tifa_libs::amat_impl_::amat_tag<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >>::amat_tag(unsigned int, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >):
✓ Branch 2 taken 7108 times.
✓ Branch 3 taken 55 times.
tifa_libs::amat_impl_::amat_tag<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<1000003ul> >>::amat_tag(unsigned int, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<1000003ul> >):
✓ Branch 2 taken 1326 times.
✓ Branch 3 taken 32 times.
tifa_libs::amat_impl_::amat_tag<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >>::amat_tag(unsigned int, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >):
✓ Branch 2 taken 7108 times.
✓ Branch 3 taken 55 times.
46662 flt_ (u32, i, 0, n) g[i * n + i] = ET{};
38 412 }
39
40 public:
41 CEXP void build() CNE {}
42 13688809 CEXP void add_arc(u32 u, u32 v, cT_(ET) w = 1) NE { g[u * n_ + v] = w, base_t::add_arc(u, v); }
43 412 ND CEXP u32 vsize() CNE { return n_; }
44
45 CEXP auto CR operator[](u32 u) CNE { return iter_{g.begin() + u * n_, g.begin() + (u + 1) * n_}; }
46 42324457 ND CEXP auto val(u32 u, u32 v) CNE { return g[u * n_ + v]; }
47 5381170 CEXP void set_val(u32 u, u32 v, cT_(ET) w) NE { g[u * n_ + v] = w; }
48 };
49 } // namespace amat_impl_
50 template <class Et = void, class... Info>
51 using amat = graph_impl_::graph<amat_impl_::amat_tag<Et, Info...>>;
52
53 } // namespace tifa_libs
54