GCC Code Coverage Report


Directory: ./
Coverage: low: ≥ 0% medium: ≥ 75.0% high: ≥ 90.0%
Coverage Exec / Excl / Total
Lines: 74.4% 29 / 0 / 39
Functions: 100.0% 2 / 0 / 2
Branches: 54.3% 75 / 0 / 138

test/cpv_local/game/mahjong_parser.uva11210.cpp
Line Branch Exec Source
1 // competitive-verifier: LOCALCASE test/cpv_local/_data/uva/11210
2
3 #include "../../../src/game/mahjong/parser/lib.hpp"
4
5 using namespace tifa_libs;
6 using std::cin, std::cout;
7 using namespace tifa_libs::literals;
8
9 9 static auto [mp, mp2] = [] {
10 #define _(n, i, j) {#n #i, n##_mj##j}
11 #define __(i, j) _(1, i, j), _(2, i, j), _(3, i, j), _(4, i, j), _(5, i, j), _(6, i, j), _(7, i, j), _(8, i, j), _(9, i, j)
12 std::map<strn, mahjong_card> mp{
13 __(T, p),
14 __(S, s),
15 __(W, m),
16 {"DONG", 1_mjz},
17 {"NAN", 2_mjz},
18 {"XI", 3_mjz},
19 {"BEI", 4_mjz},
20 {"ZHONG", 5_mjz},
21 {"FA", 6_mjz},
22 {"BAI", 7_mjz},
23
3/6
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 306 times.
✓ Branch 4 taken 9 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
324 };
24 #undef __
25 #undef _
26
27 9 arr<strn, 45> mp2;
28
3/4
✓ Branch 8 taken 306 times.
✗ Branch 9 not taken.
✓ Branch 12 taken 306 times.
✓ Branch 13 taken 9 times.
315 for (auto CR[k, v] : mp) mp2[v.encode()] = k;
29
1/2
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
18 return std::make_pair(mp, mp2);
30
34/72
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 9 times.
✗ Branch 7 not taken.
✓ Branch 10 taken 9 times.
✗ Branch 11 not taken.
✓ Branch 14 taken 9 times.
✗ Branch 15 not taken.
✓ Branch 18 taken 9 times.
✗ Branch 19 not taken.
✓ Branch 22 taken 9 times.
✗ Branch 23 not taken.
✓ Branch 26 taken 9 times.
✗ Branch 27 not taken.
✓ Branch 30 taken 9 times.
✗ Branch 31 not taken.
✓ Branch 34 taken 9 times.
✗ Branch 35 not taken.
✓ Branch 38 taken 9 times.
✗ Branch 39 not taken.
✓ Branch 42 taken 9 times.
✗ Branch 43 not taken.
✓ Branch 46 taken 9 times.
✗ Branch 47 not taken.
✓ Branch 50 taken 9 times.
✗ Branch 51 not taken.
✓ Branch 54 taken 9 times.
✗ Branch 55 not taken.
✓ Branch 58 taken 9 times.
✗ Branch 59 not taken.
✓ Branch 62 taken 9 times.
✗ Branch 63 not taken.
✓ Branch 66 taken 9 times.
✗ Branch 67 not taken.
✓ Branch 70 taken 9 times.
✗ Branch 71 not taken.
✓ Branch 74 taken 9 times.
✗ Branch 75 not taken.
✓ Branch 78 taken 9 times.
✗ Branch 79 not taken.
✓ Branch 82 taken 9 times.
✗ Branch 83 not taken.
✓ Branch 86 taken 9 times.
✗ Branch 87 not taken.
✓ Branch 90 taken 9 times.
✗ Branch 91 not taken.
✓ Branch 94 taken 9 times.
✗ Branch 95 not taken.
✓ Branch 98 taken 9 times.
✗ Branch 99 not taken.
✓ Branch 102 taken 9 times.
✗ Branch 103 not taken.
✓ Branch 106 taken 9 times.
✗ Branch 107 not taken.
✓ Branch 110 taken 9 times.
✗ Branch 111 not taken.
✓ Branch 114 taken 9 times.
✗ Branch 115 not taken.
✓ Branch 118 taken 9 times.
✗ Branch 119 not taken.
✓ Branch 122 taken 9 times.
✗ Branch 123 not taken.
✓ Branch 126 taken 9 times.
✗ Branch 127 not taken.
✓ Branch 130 taken 9 times.
✗ Branch 131 not taken.
✓ Branch 134 taken 9 times.
✗ Branch 135 not taken.
✗ Branch 138 not taken.
✗ Branch 139 not taken.
✗ Branch 140 not taken.
✗ Branch 141 not taken.
18 }();
31
32 9 int main() {
33
1/2
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
9 cout << std::fixed << std::setprecision(2);
34
35 9 u32 kase = 0;
36 9 strn s;
37
7/10
✓ Branch 1 taken 296 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 296 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 296 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 287 times.
✓ Branch 10 taken 9 times.
✓ Branch 11 taken 287 times.
✓ Branch 12 taken 9 times.
296 while (std::getline(cin, s) && s[0] != '0') {
38 287 vec<mahjong_card> hand;
39
1/2
✓ Branch 1 taken 287 times.
✗ Branch 2 not taken.
287 hand.reserve(13);
40 {
41
1/2
✓ Branch 1 taken 287 times.
✗ Branch 2 not taken.
287 std::stringstream ss;
42
1/2
✓ Branch 1 taken 287 times.
✗ Branch 2 not taken.
287 ss << s;
43
6/10
✓ Branch 1 taken 3731 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3731 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4018 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 4018 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 3731 times.
✓ Branch 13 taken 287 times.
4018 while (ss >> s) hand.push_back(mp[s]);
44 287 }
45 287 vecu ans;
46
1/2
✓ Branch 1 taken 287 times.
✗ Branch 2 not taken.
287 auto res = mahjong_parser<13>(hand);
47
2/2
✓ Branch 5 taken 2394 times.
✓ Branch 6 taken 287 times.
2681 for (auto CR p : res) {
48
2/2
✓ Branch 1 taken 2212 times.
✓ Branch 2 taken 182 times.
2394 if (!p.win()) continue;
49 182 auto _ = p.improve_cards();
50
1/2
✓ Branch 5 taken 182 times.
✗ Branch 6 not taken.
182 ans.insert(ans.end(), _.begin(), _.end());
51 182 }
52
3/6
✓ Branch 1 taken 287 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 287 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 287 times.
✗ Branch 8 not taken.
287 cout << "Case " << ++kase << ": ";
53
4/6
✓ Branch 1 taken 287 times.
✗ Branch 2 not taken.
✓ Branch 8 taken 235 times.
✓ Branch 9 taken 52 times.
✓ Branch 11 taken 235 times.
✗ Branch 12 not taken.
287 if (ans = uniq(ans); ans.empty()) cout << "Not ready\n";
54 else
55
4/6
✓ Branch 4 taken 125 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 125 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 125 times.
✓ Branch 11 taken 52 times.
177 flt_ (u32, i, 0, (u32)ans.size()) cout << mp2[ans[i]] << " \n"[i + 1 == ans.size()];
56 287 }
57 9 }
58