GCC Code Coverage Report


Directory: ./
Coverage: low: ≥ 0% medium: ≥ 75.0% high: ≥ 90.0%
Coverage Exec / Excl / Total
Lines: 100.0% 21 / 0 / 21
Functions: 100.0% 3 / 0 / 3
Branches: 100.0% 6 / 0 / 6

src/fps/ode/lib.hpp
Line Branch Exec Source
1 #pragma once
2
3 #include "../exp/lib.hpp"
4 #include "../int/lib.hpp"
5 #include "../inv/lib.hpp"
6
7 namespace tifa_libs {
8
9 template <class poly, class G, class DG>
10 requires requires(poly f, size_t n, G g, DG dg) {
11 { g(f, n) } -> std::same_as<poly>;
12 { dg(f, n) } -> std::same_as<poly>;
13 }
14 33 CEXP auto ode_fps(G&& g, DG&& dg, TPN poly::val_t a, u32 n) NE {
15 33 poly f{a};
16
6/6
auto tifa_libs::ode_fps<tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<1012924417ul> > > >, main::{lambda(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<1012924417ul> > > > const&, unsigned int)#1}&, main::{lambda(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<1012924417ul> > > > const&, unsigned int)#2}&>(main::{lambda(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<1012924417ul> > > > const&, unsigned int)#1}&, main::{lambda(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<1012924417ul> > > > const&, unsigned int)#2}&, tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<1012924417ul> > > >::val_t, unsigned int):
✓ Branch 1 taken 137 times.
✓ Branch 2 taken 11 times.
auto tifa_libs::ode_fps<tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<1012924417ul> > > >, main::{lambda(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<1012924417ul> > > > const&, unsigned int)#1}&, main::{lambda(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<1012924417ul> > > > const&, unsigned int)#2}&>(main::{lambda(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<1012924417ul> > > > const&, unsigned int)#1}&, main::{lambda(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<1012924417ul> > > > const&, unsigned int)#2}&, tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<1012924417ul> > > >::val_t, unsigned int):
✓ Branch 1 taken 137 times.
✓ Branch 2 taken 11 times.
auto tifa_libs::ode_fps<tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<1012924417ul> > > >, main::{lambda(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<1012924417ul> > > > const&, unsigned int)#1}&, main::{lambda(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<1012924417ul> > > > const&, unsigned int)#2}&>(main::{lambda(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<1012924417ul> > > > const&, unsigned int)#1}&, main::{lambda(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<1012924417ul> > > > const&, unsigned int)#2}&, tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<1012924417ul> > > >::val_t, unsigned int):
✓ Branch 1 taken 137 times.
✓ Branch 2 taken 11 times.
444 for (u32 i = 1; i < n; i *= 2) {
17 411 auto r = exp_fps(int_fps(-dg(f, i * 2))), h = int_fps(((g(f, i * 2) - (dg(f, i * 2) * f).pre(i * 2)) * r).pre(i * 2));
18 411 f = ((h + a) * inv_fps(r, i * 2)).pre(i * 2);
19 }
20 33 return f.pre(n);
21 33 }
22
23 } // namespace tifa_libs
24