GCC Code Coverage Report


Directory: ./
Coverage: low: ≥ 0% medium: ≥ 75.0% high: ≥ 90.0%
Coverage Exec / Excl / Total
Lines: 98.4% 61 / 0 / 62
Functions: 100.0% 2 / 0 / 2
Branches: 57.3% 126 / 0 / 220

test/cpv_local/geo2d/make_c.uva12304.cpp
Line Branch Exec Source
1 // competitive-verifier: LOCALCASE test/cpv_local/_data/uva/12304
2
3 #include "../../../src/geo2d/make_c/rcc_ex/lib.hpp"
4 #include "../../../src/geo2d/make_c/rll/lib.hpp"
5 #include "../../../src/geo2d/make_c/rpl/lib.hpp"
6 #include "../../../src/geo2d/tan/cp/lib.hpp"
7 #include "../../../src/geo2d/tcenter/i/lib.hpp"
8 #include "../../../src/geo2d/tcenter/o/lib.hpp"
9
10 using namespace tifa_libs;
11 using std::cin, std::cout;
12 using data_t = f64;
13 using Point2 = point<data_t>;
14 using Line2 = line<data_t>;
15 using Triangle = triangle<data_t>;
16 using Circle2 = circle<data_t>;
17
18 CEXP data_t PI = pi_v<data_t>;
19
20 2 int main() {
21
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 cout << std::fixed << std::setprecision(6);
22
23 2 strn s;
24
4/6
✓ Branch 1 taken 614 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 614 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 612 times.
✓ Branch 7 taken 2 times.
614 while (cin >> s) {
25
3/4
✓ Branch 1 taken 612 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 101 times.
✓ Branch 4 taken 511 times.
612 if (s == "CircumscribedCircle") {
26 Triangle t;
27 101 cin >> t;
28 101 Point2 o = center_O(t);
29 101 data_t r = radius_O(t);
30
7/14
✓ Branch 1 taken 101 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 101 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 101 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 101 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 101 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 101 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 101 times.
✗ Branch 20 not taken.
101 cout << '(' << o.x << ',' << o.y << ',' << r << ")\n";
31
3/4
✓ Branch 1 taken 511 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 101 times.
✓ Branch 4 taken 410 times.
511 } else if (s == "InscribedCircle") {
32 Triangle t;
33 101 cin >> t;
34 101 Point2 i = center_I(t);
35 101 data_t r = radius_I(t);
36
7/14
✓ Branch 1 taken 101 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 101 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 101 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 101 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 101 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 101 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 101 times.
✗ Branch 20 not taken.
101 cout << '(' << i.x << ',' << i.y << ',' << r << ")\n";
37
3/4
✓ Branch 1 taken 410 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 103 times.
✓ Branch 4 taken 307 times.
410 } else if (s == "TangentLineThroughPoint") {
38 Circle2 c;
39 Point2 p;
40 103 cin >> c >> p;
41 103 auto tps = tan_CP(c, p);
42
2/2
✓ Branch 1 taken 23 times.
✓ Branch 2 taken 80 times.
103 if (!tps) {
43
1/2
✓ Branch 1 taken 23 times.
✗ Branch 2 not taken.
23 cout << "[]\n";
44 } else {
45
1/2
✓ Branch 1 taken 80 times.
✗ Branch 2 not taken.
80 auto [tps0, tps1] = tps.value();
46 80 Point2 d1 = Line2{p, tps0}.direction(), d2 = Line2{p, tps1}.direction();
47 80 data_t angle1 = atan2(d1.y, d1.x) / PI * 180;
48 80 data_t angle2 = atan2(d2.y, d2.x) / PI * 180;
49
2/2
✓ Branch 0 taken 41 times.
✓ Branch 1 taken 39 times.
80 if (angle1 < 0) angle1 += 180;
50
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if (angle1 >= 180) angle1 -= 180;
51
2/2
✓ Branch 0 taken 40 times.
✓ Branch 1 taken 40 times.
80 if (angle2 < 0) angle2 += 180;
52
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 80 times.
80 if (angle2 >= 180) angle2 -= 180;
53
2/2
✓ Branch 1 taken 1 time.
✓ Branch 2 taken 79 times.
80 if (is_eq(angle1, angle2)) {
54
3/6
✓ Branch 1 taken 1 time.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 time.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 time.
✗ Branch 8 not taken.
1 cout << '[' << angle1 << "]\n";
55 } else {
56
2/2
✓ Branch 0 taken 58 times.
✓ Branch 1 taken 21 times.
79 if (angle1 > angle2) std::swap(angle1, angle2);
57
5/10
✓ Branch 1 taken 79 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 79 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 79 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 79 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 79 times.
✗ Branch 14 not taken.
79 cout << '[' << angle1 << ',' << angle2 << "]\n";
58 }
59 }
60
3/4
✓ Branch 1 taken 307 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 104 times.
✓ Branch 4 taken 203 times.
307 } else if (s == "CircleThroughAPointAndTangentToALineWithRadius") {
61 Point2 p;
62 Line2 l;
63 data_t r;
64
1/2
✓ Branch 3 taken 104 times.
✗ Branch 4 not taken.
104 cin >> p >> l >> r;
65 104 auto cs = make_C_rPL(r, p, l);
66
2/2
✓ Branch 1 taken 25 times.
✓ Branch 2 taken 79 times.
104 if (!cs) {
67
1/2
✓ Branch 1 taken 25 times.
✗ Branch 2 not taken.
25 cout << "[]\n";
68 } else {
69
1/2
✓ Branch 1 taken 79 times.
✗ Branch 2 not taken.
79 auto [cs0, cs1] = cs.value();
70
2/2
✓ Branch 1 taken 41 times.
✓ Branch 2 taken 38 times.
79 if (cs1.o < cs0.o) std::swap(cs0, cs1);
71
2/2
✓ Branch 1 taken 1 time.
✓ Branch 2 taken 78 times.
79 if (cs0.o == cs1.o) {
72
5/10
✓ Branch 1 taken 1 time.
✗ Branch 2 not taken.
✓ 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.
✓ Branch 13 taken 1 time.
✗ Branch 14 not taken.
1 cout << "[(" << cs0.o.x << ',' << cs0.o.y << ")]\n";
73 } else {
74
9/18
✓ Branch 1 taken 78 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 78 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 78 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 78 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 78 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 78 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 78 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 78 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 78 times.
✗ Branch 26 not taken.
78 cout << "[(" << cs0.o.x << ',' << cs0.o.y << "),(" << cs1.o.x << ',' << cs1.o.y << ")]\n";
75 }
76 }
77
3/4
✓ Branch 1 taken 203 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 101 times.
✓ Branch 4 taken 102 times.
203 } else if (s == "CircleTangentToTwoLinesWithRadius") {
78 Line2 l1, l2;
79 data_t r;
80
1/2
✓ Branch 3 taken 101 times.
✗ Branch 4 not taken.
101 cin >> l1 >> l2 >> r;
81 101 auto cs_ = make_C_rLL(r, l1, l2);
82
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 101 times.
101 if (!cs_) {
83 cout << "[]\n";
84 } else {
85
1/2
✓ Branch 1 taken 101 times.
✗ Branch 2 not taken.
101 auto [cs0, cs1, cs2, cs3] = cs_.value();
86
1/2
✓ Branch 1 taken 101 times.
✗ Branch 2 not taken.
202 vec<Circle2> cs{cs0, cs1, cs2, cs3};
87
1/2
✓ Branch 1 taken 101 times.
✗ Branch 2 not taken.
708 std::ranges::sort(cs, [](Circle2 CR lhs, Circle2 CR rhs) { return lhs.o < rhs.o; });
88
17/34
✓ Branch 1 taken 101 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 101 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 101 times.
✗ Branch 9 not taken.
✓ Branch 12 taken 101 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 101 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 101 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 101 times.
✗ Branch 23 not taken.
✓ Branch 26 taken 101 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 101 times.
✗ Branch 30 not taken.
✓ Branch 33 taken 101 times.
✗ Branch 34 not taken.
✓ Branch 36 taken 101 times.
✗ Branch 37 not taken.
✓ Branch 40 taken 101 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 101 times.
✗ Branch 44 not taken.
✓ Branch 47 taken 101 times.
✗ Branch 48 not taken.
✓ Branch 50 taken 101 times.
✗ Branch 51 not taken.
✓ Branch 54 taken 101 times.
✗ Branch 55 not taken.
✓ Branch 57 taken 101 times.
✗ Branch 58 not taken.
101 cout << "[(" << cs[0].o.x << ',' << cs[0].o.y << "),(" << cs[1].o.x << ',' << cs[1].o.y << "),(" << cs[2].o.x << ',' << cs[2].o.y << "),(" << cs[3].o.x << ',' << cs[3].o.y << ")]\n";
89 101 }
90
2/4
✓ Branch 1 taken 102 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 102 times.
✗ Branch 4 not taken.
102 } else if (s == "CircleTangentToTwoDisjointCirclesWithRadius") {
91 Circle2 c1, c2;
92 data_t r;
93
1/2
✓ Branch 3 taken 102 times.
✗ Branch 4 not taken.
102 cin >> c1 >> c2 >> r;
94 102 auto cs = make_C_rCC_ex(r, c1, c2);
95
2/2
✓ Branch 1 taken 24 times.
✓ Branch 2 taken 78 times.
102 if (!cs) {
96
1/2
✓ Branch 1 taken 24 times.
✗ Branch 2 not taken.
24 cout << "[]\n";
97 } else {
98
1/2
✓ Branch 1 taken 78 times.
✗ Branch 2 not taken.
78 auto [cs0, cs1] = cs.value();
99
2/2
✓ Branch 1 taken 31 times.
✓ Branch 2 taken 47 times.
78 if (cs1.o < cs0.o) std::swap(cs0, cs1);
100
2/2
✓ Branch 1 taken 1 time.
✓ Branch 2 taken 77 times.
78 if (cs0.o == cs1.o) {
101
5/10
✓ Branch 1 taken 1 time.
✗ Branch 2 not taken.
✓ 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.
✓ Branch 13 taken 1 time.
✗ Branch 14 not taken.
1 cout << "[(" << cs0.o.x << ',' << cs0.o.y << ")]\n";
102 } else {
103
9/18
✓ Branch 1 taken 77 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 77 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 77 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 77 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 77 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 77 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 77 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 77 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 77 times.
✗ Branch 26 not taken.
77 cout << "[(" << cs0.o.x << ',' << cs0.o.y << "),(" << cs1.o.x << ',' << cs1.o.y << ")]\n";
104 }
105 }
106 }
107 }
108 2 }
109