GCC Code Coverage Report


Directory: ./
Coverage: low: ≥ 0% medium: ≥ 75.0% high: ≥ 90.0%
Coverage Exec / Excl / Total
Lines: 100.0% 52 / 0 / 52
Functions: 100.0% 2 / 0 / 2
Branches: 88.9% 32 / 0 / 36

src/geo2d/rotcal/coverage_rect/lib.hpp
Line Branch Exec Source
1 #pragma once
2
3 #include "../../ds/cvh/lib.hpp"
4
5 namespace tifa_libs {
6
7 // clang-format off
8 enum class CVHRECT : u8 { min_area, min_circum };
9 // clang-format on
10
11 // Coverage rectangle with min circum
12 template <CVHRECT type, class FP>
13 678 CEXP polygon<FP> coverage_rect(cT_(cvh<FP>) ch) NE {
14 678 cu32 n = ch.size();
15
2/4
tifa_libs::polygon<double> tifa_libs::coverage_rect<(tifa_libs::CVHRECT)0, double>(std::conditional<(sizeof (tifa_libs::cvh<double>))<=((sizeof (unsigned long))*(2)), tifa_libs::cvh<double>, tifa_libs::cvh<double> const&>::type):
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
tifa_libs::polygon<long double> tifa_libs::coverage_rect<(tifa_libs::CVHRECT)0, long double>(std::conditional<(sizeof (tifa_libs::cvh<long double>))<=((sizeof (unsigned long))*(2)), tifa_libs::cvh<long double>, tifa_libs::cvh<long double> const&>::type):
✗ Branch 0 not taken.
✓ Branch 1 taken 668 times.
678 retif_((n == 0) [[unlikely]], ch);
16
3/4
tifa_libs::polygon<double> tifa_libs::coverage_rect<(tifa_libs::CVHRECT)0, double>(std::conditional<(sizeof (tifa_libs::cvh<double>))<=((sizeof (unsigned long))*(2)), tifa_libs::cvh<double>, tifa_libs::cvh<double> const&>::type):
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
tifa_libs::polygon<long double> tifa_libs::coverage_rect<(tifa_libs::CVHRECT)0, long double>(std::conditional<(sizeof (tifa_libs::cvh<long double>))<=((sizeof (unsigned long))*(2)), tifa_libs::cvh<long double>, tifa_libs::cvh<long double> const&>::type):
✓ Branch 0 taken 19 times.
✓ Branch 1 taken 649 times.
678 if (n == 1) return {{ch[0], ch[0], ch[0], ch[0]}};
17
3/4
tifa_libs::polygon<double> tifa_libs::coverage_rect<(tifa_libs::CVHRECT)0, double>(std::conditional<(sizeof (tifa_libs::cvh<double>))<=((sizeof (unsigned long))*(2)), tifa_libs::cvh<double>, tifa_libs::cvh<double> const&>::type):
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
tifa_libs::polygon<long double> tifa_libs::coverage_rect<(tifa_libs::CVHRECT)0, long double>(std::conditional<(sizeof (tifa_libs::cvh<long double>))<=((sizeof (unsigned long))*(2)), tifa_libs::cvh<long double>, tifa_libs::cvh<long double> const&>::type):
✓ Branch 0 taken 23 times.
✓ Branch 1 taken 626 times.
659 if (n == 2) return {{ch[0], ch[0], ch[1], ch[1]}};
18 636 FP ans = std::numeric_limits<FP>::max();
19 636 u32 r = 1, p = 1, q = 1, ans_i = 0, ans_r = 0, ans_p = 0, ans_q = 0;
20
4/4
tifa_libs::polygon<double> tifa_libs::coverage_rect<(tifa_libs::CVHRECT)0, double>(std::conditional<(sizeof (tifa_libs::cvh<double>))<=((sizeof (unsigned long))*(2)), tifa_libs::cvh<double>, tifa_libs::cvh<double> const&>::type):
✓ Branch 0 taken 80 times.
✓ Branch 1 taken 10 times.
tifa_libs::polygon<long double> tifa_libs::coverage_rect<(tifa_libs::CVHRECT)0, long double>(std::conditional<(sizeof (tifa_libs::cvh<long double>))<=((sizeof (unsigned long))*(2)), tifa_libs::cvh<long double>, tifa_libs::cvh<long double> const&>::type):
✓ Branch 0 taken 4335 times.
✓ Branch 1 taken 626 times.
5051 flt_ (u32, i, 0, n) {
21 4415 const auto ni = ch.next(i);
22
4/4
tifa_libs::polygon<double> tifa_libs::coverage_rect<(tifa_libs::CVHRECT)0, double>(std::conditional<(sizeof (tifa_libs::cvh<double>))<=((sizeof (unsigned long))*(2)), tifa_libs::cvh<double>, tifa_libs::cvh<double> const&>::type):
✓ Branch 6 taken 110 times.
✓ Branch 7 taken 80 times.
tifa_libs::polygon<long double> tifa_libs::coverage_rect<(tifa_libs::CVHRECT)0, long double>(std::conditional<(sizeof (tifa_libs::cvh<long double>))<=((sizeof (unsigned long))*(2)), tifa_libs::cvh<long double>, tifa_libs::cvh<long double> const&>::type):
✓ Branch 6 taken 5413 times.
✓ Branch 7 taken 4335 times.
19876 while (!is_neg(cross(ch.vs[i], ch.vs[ni], ch.vs[ch.next(r)]) -
23 15461 cross(ch.vs[i], ch.vs[ni], ch.vs[r]))) r = ch.next(r);
24
4/4
tifa_libs::polygon<double> tifa_libs::coverage_rect<(tifa_libs::CVHRECT)0, double>(std::conditional<(sizeof (tifa_libs::cvh<double>))<=((sizeof (unsigned long))*(2)), tifa_libs::cvh<double>, tifa_libs::cvh<double> const&>::type):
✓ Branch 6 taken 90 times.
✓ Branch 7 taken 80 times.
tifa_libs::polygon<long double> tifa_libs::coverage_rect<(tifa_libs::CVHRECT)0, long double>(std::conditional<(sizeof (tifa_libs::cvh<long double>))<=((sizeof (unsigned long))*(2)), tifa_libs::cvh<long double>, tifa_libs::cvh<long double> const&>::type):
✓ Branch 6 taken 4289 times.
✓ Branch 7 taken 4335 times.
17588 while (!is_neg(dot(ch.vs[i], ch.vs[ni], ch.vs[ch.next(p)]) -
25 13173 dot(ch.vs[i], ch.vs[ni], ch.vs[p]))) p = ch.next(p);
26
4/4
tifa_libs::polygon<double> tifa_libs::coverage_rect<(tifa_libs::CVHRECT)0, double>(std::conditional<(sizeof (tifa_libs::cvh<double>))<=((sizeof (unsigned long))*(2)), tifa_libs::cvh<double>, tifa_libs::cvh<double> const&>::type):
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 70 times.
tifa_libs::polygon<long double> tifa_libs::coverage_rect<(tifa_libs::CVHRECT)0, long double>(std::conditional<(sizeof (tifa_libs::cvh<long double>))<=((sizeof (unsigned long))*(2)), tifa_libs::cvh<long double>, tifa_libs::cvh<long double> const&>::type):
✓ Branch 0 taken 626 times.
✓ Branch 1 taken 3709 times.
4415 if (i == 0) q = p;
27
4/4
tifa_libs::polygon<double> tifa_libs::coverage_rect<(tifa_libs::CVHRECT)0, double>(std::conditional<(sizeof (tifa_libs::cvh<double>))<=((sizeof (unsigned long))*(2)), tifa_libs::cvh<double>, tifa_libs::cvh<double> const&>::type):
✓ Branch 6 taken 110 times.
✓ Branch 7 taken 80 times.
tifa_libs::polygon<long double> tifa_libs::coverage_rect<(tifa_libs::CVHRECT)0, long double>(std::conditional<(sizeof (tifa_libs::cvh<long double>))<=((sizeof (unsigned long))*(2)), tifa_libs::cvh<long double>, tifa_libs::cvh<long double> const&>::type):
✓ Branch 6 taken 5641 times.
✓ Branch 7 taken 4335 times.
20332 while (!is_pos(dot(ch.vs[i], ch.vs[ni], ch.vs[ch.next(q)]) -
28 15917 dot(ch.vs[i], ch.vs[ni], ch.vs[q]))) q = ch.next(q);
29 FP _;
30 if CEXP (type == CVHRECT::min_area)
31 4415 _ = cross(ch.vs[i], ch.vs[ni], ch.vs[r]) *
32 4415 (dot(ch.vs[i], ch.vs[ni], ch.vs[p]) - dot(ch.vs[i], ch.vs[ni], ch.vs[q])) /
33 4415 (ch.vs[i] - ch.vs[ni]).norm2();
34 else if CEXP (type == CVHRECT::min_circum)
35 _ = (cross(ch.vs[i], ch.vs[ni], ch.vs[r]) +
36 (dot(ch.vs[i], ch.vs[ni], ch.vs[p]) - dot(ch.vs[i], ch.vs[ni], ch.vs[q]))) /
37 (ch.vs[i] - ch.vs[ni]).abs();
38
4/4
tifa_libs::polygon<double> tifa_libs::coverage_rect<(tifa_libs::CVHRECT)0, double>(std::conditional<(sizeof (tifa_libs::cvh<double>))<=((sizeof (unsigned long))*(2)), tifa_libs::cvh<double>, tifa_libs::cvh<double> const&>::type):
✓ Branch 0 taken 15 times.
✓ Branch 1 taken 65 times.
tifa_libs::polygon<long double> tifa_libs::coverage_rect<(tifa_libs::CVHRECT)0, long double>(std::conditional<(sizeof (tifa_libs::cvh<long double>))<=((sizeof (unsigned long))*(2)), tifa_libs::cvh<long double>, tifa_libs::cvh<long double> const&>::type):
✓ Branch 0 taken 1545 times.
✓ Branch 1 taken 2790 times.
4415 if (ans > _) ans = _, ans_i = i, ans_r = r, ans_p = p, ans_q = q;
39 }
40 636 point dir = line{ch[ans_i], ch[ch.next(ans_i)]}.direction(), vdir = rot90(dir);
41 636 line li{ch[ans_i], ch[ans_i] + dir},
42 636 lp{ch[ans_p], ch[ans_p] + vdir},
43 636 lr{ch[ans_r], ch[ans_r] + dir},
44 636 lq{ch[ans_q], ch[ans_q] + vdir};
45 636 return {{ins_LL(li, lp), ins_LL(lp, lr), ins_LL(lr, lq), ins_LL(lq, li)}};
46 }
47
48 } // namespace tifa_libs
49