GCC Code Coverage Report


Directory: ./
Coverage: low: ≥ 0% medium: ≥ 75.0% high: ≥ 90.0%
Coverage Exec / Excl / Total
Lines: 100.0% 45 / 0 / 45
Functions: 100.0% 27 / 0 / 27
Branches: 60.0% 18 / 0 / 30

src/gen/gosper/lib.hpp
Line Branch Exec Source
1 #pragma once
2
3 #include "../../bit/lowbit/lib.hpp"
4 #include "../../util/alias/num/lib.hpp"
5
6 namespace tifa_libs {
7
8 template <u32 = 0>
9 class gosper {
10 static inline u32 n_, k_;
11 u64 now_;
12
13 196 static CEXP u64 num_begin() NE { return (1_u64 << k_) - 1; }
14 328576268 static CEXP u64 num_end() NE { return 1_u64 << n_; }
15
16 public:
17 98 static CEXP void set(u32 n, u32 k) NE {
18
9/18
tifa_libs::gosper<0u>::set(unsigned int, unsigned int):
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 16 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 16 times.
✗ Branch 5 not taken.
tifa_libs::gosper<1u>::set(unsigned int, unsigned int):
✓ Branch 0 taken 21 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 21 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 21 times.
✗ Branch 5 not taken.
tifa_libs::gosper<2u>::set(unsigned int, unsigned int):
✓ Branch 0 taken 61 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 61 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 61 times.
✗ Branch 5 not taken.
98 assert(k && k <= n && n < 64);
19 98 n_ = n, k_ = k;
20 98 }
21 98 static CEXP gosper begin() NE { return num_begin(); }
22 98 static CEXP gosper end() NE { return num_end(); }
23
24
9/12
tifa_libs::gosper<0u>::gosper(unsigned long):
✓ Branch 3 taken 32 times.
✓ Branch 4 taken 16 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 32 times.
tifa_libs::gosper<1u>::gosper(unsigned long):
✓ Branch 3 taken 42 times.
✓ Branch 4 taken 21 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 42 times.
tifa_libs::gosper<2u>::gosper(unsigned long):
✓ Branch 3 taken 122 times.
✓ Branch 4 taken 61 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 122 times.
294 CEXP gosper(u64 now = num_begin()) NE : now_(min(now, num_end())) { assert(now == num_end() || (u32)std::popcount(now) == k_); }
25
26 985726942 CEXP u64 operator*() CNE { return now_; }
27 328575680 CEXP bool operator!=(gosper CR x) CNE { return **this != *x; }
28 328575582 CEXP void operator++() NE {
29 328575582 u64 c = lowbit(now_), r = now_ + c;
30 328575582 now_ = min(((r ^ now_) / 4 / c) | r, num_end());
31 328575582 }
32 };
33
34 } // namespace tifa_libs
35