GCC Code Coverage Report


Directory: ./
Coverage: low: ≥ 0% medium: ≥ 75.0% high: ≥ 90.0%
Coverage Exec / Excl / Total
Lines: 91.3% 21 / 0 / 23
Functions: 88.2% 15 / 0 / 17
Branches: 100.0% 12 / 0 / 12

src/geo2d/ds/t/lib.hpp
Line Branch Exec Source
1 #pragma once
2
3 #include "../../ang_pp/lib.hpp"
4 #include "../../cross/lib.hpp"
5 #include "../../dis/pp/lib.hpp"
6 #include "../../dot/lib.hpp"
7
8 namespace tifa_libs {
9
10 template <class FP>
11 struct triangle {
12 point<FP> A, B, C;
13
14 CEXP triangle() = default;
15 188628 CEXP triangle(point<FP> CR a, point<FP> CR b, point<FP> CR c) NE : A(a), B(b), C(c) {}
16 CEXP triangle(FP a_x, FP a_y, FP b_x, FP b_y, FP c_x, FP c_y) NE : A(a_x, a_y), B(b_x, b_y), C(c_x, c_y) {}
17
18 284 friend auto& operator>>(istream_c auto& is, triangle& t) NE { return is >> t.A >> t.B >> t.C; }
19 friend auto& operator<<(ostream_c auto& os, triangle CR t) NE { return os << t.A << ' ' << t.B << ' ' << t.C; }
20 friend CEXP bool operator==(triangle CR l, triangle CR r) NE { return l.A == r.A && l.B == r.B && l.C == r.C; }
21 // (a, b, c)
22 326 CEXP pt3<FP> edges() CNE { return {dist_PP(B, C), dist_PP(C, A), dist_PP(A, B)}; }
23 // (A, B, C)
24 24 CEXP pt3<FP> angles() CNE { return {abs(ang_PP(C - A, B - A)), abs(ang_PP(A - B, C - B)), abs(ang_PP(A - C, B - C))}; }
25 177 CEXP point<FP> trilinears(FP x, FP y, FP z) CNE {
26 177 auto [a, b, c] = edges();
27 177 x *= a, y *= b, z *= c;
28 177 return (A * x + B * y + C * z) / (x + y + z);
29 }
30 8 CEXP point<FP> barycentrics(FP u, FP v, FP w) CNE { return (A * u + B * v + C * w) / (u + v + w); }
31 141 CEXP FP area() CNE { return abs(cross(A, B, C)) / 2; }
32 ND CEXP bool is_acute() CNE { return is_pos(dot(A, B, C)) && is_pos(dot(B, C, A)) && is_pos(dot(C, A, B)); }
33
6/6
✓ Branch 2 taken 53428 times.
✓ Branch 3 taken 5499 times.
✓ Branch 6 taken 48250 times.
✓ Branch 7 taken 5178 times.
✓ Branch 10 taken 5281 times.
✓ Branch 11 taken 42969 times.
58927 ND CEXP bool is_right() CNE { return is_zero(dot(A, B, C)) || is_zero(dot(B, C, A)) || is_zero(dot(C, A, B)); }
34
6/6
✓ Branch 2 taken 132041 times.
✓ Branch 3 taken 42655 times.
✓ Branch 6 taken 95575 times.
✓ Branch 7 taken 36466 times.
✓ Branch 10 taken 36648 times.
✓ Branch 11 taken 58927 times.
174696 ND CEXP bool is_obtuse() CNE { return is_neg(dot(A, B, C)) || is_neg(dot(B, C, A)) || is_neg(dot(C, A, B)); }
35 };
36
37 } // namespace tifa_libs
38