GCC Code Coverage Report


Directory: ./
Coverage: low: ≥ 0% medium: ≥ 75.0% high: ≥ 90.0%
Coverage Exec / Excl / Total
Lines: 76.5% 52 / 0 / 68
Functions: 100.0% 5 / 0 / 5
Branches: 50.0% 104 / 0 / 208

test/cpv_local/comb/gen.cpp
Line Branch Exec Source
1 // competitive-verifier: STANDALONE
2 #include "../../../src/comb/seq/fact/lib.hpp"
3 #include "../../../src/comb/seq/ifact/lib.hpp"
4 #include "../../../src/comb/seq/inv/lib.hpp"
5 #include "../../../src/comb/seq/invseq/lib.hpp"
6 #include "../../../src/comb/seq/ipowi/lib.hpp"
7 #include "../../../src/comb/seq/pows/lib.hpp"
8 #include "../../../src/math/ds/mint/md/lib.hpp"
9 #include "../../../src/math/ds/mint/md64/lib.hpp"
10 #include "../../../src/math/ds/mint/ms/lib.hpp"
11 #include "../../../src/math/ds/mint/ms64/lib.hpp"
12 #include "../../../src/math/qpow/basic/lib.hpp"
13 #include "../../../src/util/rand/lib.hpp"
14 #include "../base.hpp"
15
16 using namespace tifa_libs;
17 rand_gen<u64> g(1);
18
19 template <class mint>
20 8 void test_all(u32 n) {
21 [](u32 n) { // fact & ifact
22 timer_(auto fact = gen_fact<mint>(n));
23 timer_(auto ifact = gen_ifact<mint>(n));
24 mint bf = 1;
25 flt_ (u32, i, 0, n) {
26 if (i) bf *= i;
27 check(fact[i], bf, check_param(i));
28 check(ifact[i], bf.inv(), check_param(i));
29 }
30
4/8
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<70l> > >(unsigned int):
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<69l> > >(unsigned int):
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >(unsigned int):
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >(unsigned int):
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
8 }(n);
31 [](u32 n) { // inv
32 timer_(auto inv = gen_inv<mint>(n));
33 flt_ (u32, i, 1, n) {
34 auto bf = mint{i}.inv();
35 check(inv[i], bf, check_param(i));
36 }
37
4/8
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<70l> > >(unsigned int):
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<69l> > >(unsigned int):
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >(unsigned int):
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >(unsigned int):
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
8 }(n);
38 [](u32 n) { // invseq
39 vec<mint> seq;
40 timer_(std::generate_n(std::back_inserter(seq), n, [&] { return mint(g()); }));
41 auto invseq = gen_invseq(seq);
42 flt_ (u32, i, 0, n) {
43 auto bf = seq[i].inv();
44 check(invseq[i], bf, check_param(i), check_param(seq[i]));
45 }
46
4/8
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<70l> > >(unsigned int):
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<69l> > >(unsigned int):
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >(unsigned int):
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >(unsigned int):
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
8 }(n);
47 [](u32 n) { // ipowi
48 timer_(auto ipowi = gen_ipowi<mint>(n));
49 flt_ (u32, i, 0, n) {
50 auto bf = qpow<mint>(i, i);
51 check(ipowi[i], bf, check_param(i));
52 }
53
4/8
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<70l> > >(unsigned int):
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<69l> > >(unsigned int):
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >(unsigned int):
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >(unsigned int):
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
8 }(n);
54 auto test_pows = [](u32 n, u32 b) { // pows
55 timer_(auto pows = gen_pows<mint>(n, b));
56 flt_ (u32, i, 0, n) {
57 auto bf = qpow<mint>(i, b);
58 check(pows[i], bf, check_param(i), check_param(b));
59 }
60 };
61
16/32
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<70l> > >(unsigned int):
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<69l> > >(unsigned int):
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >(unsigned int):
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >(unsigned int):
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
8 timer_(test_pows(n, 0));
62
16/32
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<70l> > >(unsigned int):
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<69l> > >(unsigned int):
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >(unsigned int):
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >(unsigned int):
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
8 timer_(test_pows(n, 1));
63
16/32
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<70l> > >(unsigned int):
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<69l> > >(unsigned int):
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >(unsigned int):
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >(unsigned int):
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
8 timer_(test_pows(n, 114514));
64
16/32
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<70l> > >(unsigned int):
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<69l> > >(unsigned int):
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >(unsigned int):
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >(unsigned int):
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
8 timer_(test_pows(n, n));
65 8 }
66
67 using mints30 = mint_ms<998244353>;
68 using mints63 = mint_ms64<998244353>;
69 using mintd31 = mint_md<__LINE__>;
70 using mintd63 = mint_md64<__LINE__>;
71
72 1 int main() {
73 1 mintd31::set_mod(1000000000 + 7);
74 1 mintd63::set_mod(1000000000 + 7);
75
76
3/6
✓ Branch 4 taken 1 time.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 time.
✗ Branch 11 not taken.
1 timer_(test_all<mints30>(1000));
77
3/6
✓ Branch 4 taken 1 time.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 time.
✗ Branch 11 not taken.
1 timer_(test_all<mints63>(1000));
78
3/6
✓ Branch 4 taken 1 time.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 time.
✗ Branch 11 not taken.
1 timer_(test_all<mintd31>(1000));
79
3/6
✓ Branch 4 taken 1 time.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 time.
✗ Branch 11 not taken.
1 timer_(test_all<mintd63>(1000));
80
3/6
✓ Branch 4 taken 1 time.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 time.
✗ Branch 11 not taken.
1 timer_(test_all<mints30>(1'000'000));
81
3/6
✓ Branch 4 taken 1 time.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 time.
✗ Branch 11 not taken.
1 timer_(test_all<mints63>(1'000'000));
82
3/6
✓ Branch 4 taken 1 time.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 time.
✗ Branch 11 not taken.
1 timer_(test_all<mintd31>(1'000'000));
83
3/6
✓ Branch 4 taken 1 time.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 time.
✗ Branch 11 not taken.
1 timer_(test_all<mintd63>(1'000'000));
84 1 }
85