test/cpv_local/game/mahjong_parser.cpp
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | // competitive-verifier: STANDALONE | ||
| 2 | |||
| 3 | #include "../../../src/game/mahjong/parser/lib.hpp" | ||
| 4 | #include "../base.hpp" | ||
| 5 | |||
| 6 | using namespace tifa_libs; | ||
| 7 | using namespace tifa_libs::literals; | ||
| 8 | |||
| 9 | vecp<u32, vec<mahjong_card>> mahjong_hand_data{ | ||
| 10 | {5, {1_mjs, 2_mjs, 5_mjs, 6_mjs, 8_mjs, 9_mjs, 1_mjm, 2_mjm, 5_mjm, 6_mjm, 8_mjm, 9_mjm, 1_mjp, 2_mjp}}, | ||
| 11 | {4, {1_mjs, 1_mjs, 4_mjs, 4_mjs, 7_mjs, 7_mjs, 1_mjm, 1_mjm, 4_mjm, 4_mjm, 7_mjm, 7_mjm, 1_mjp, 1_mjp}}, | ||
| 12 | {3, {1_mjs, 1_mjs, 1_mjs, 1_mjs, 4_mjs, 4_mjs, 7_mjs, 7_mjs, 1_mjm, 1_mjm, 4_mjm, 4_mjm, 7_mjm, 7_mjm}}, | ||
| 13 | {2, {1_mjs, 1_mjs, 1_mjs, 1_mjs, 2_mjs, 2_mjs, 2_mjs, 2_mjs, 1_mjm, 1_mjm, 4_mjm, 4_mjm, 7_mjm, 7_mjm}}, | ||
| 14 | {1, {1_mjs, 1_mjs, 1_mjs, 1_mjs, 2_mjs, 2_mjs, 2_mjs, 2_mjs, 1_mjm, 1_mjm, 1_mjm, 1_mjm, 4_mjm, 4_mjm}}, | ||
| 15 | {2, {1_mjs, 1_mjs, 1_mjs, 1_mjs, 2_mjs, 2_mjs, 2_mjs, 2_mjs, 1_mjm, 1_mjm, 1_mjm, 1_mjm, 4_mjm, 5_mjm}}, | ||
| 16 | {3, {1_mjs, 1_mjs, 1_mjs, 1_mjs, 4_mjs, 4_mjs, 4_mjs, 4_mjs, 1_mjm, 1_mjm, 1_mjm, 1_mjm, 4_mjm, 5_mjm}}, | ||
| 17 | {4, {1_mjs, 1_mjs, 1_mjs, 1_mjs, 4_mjs, 5_mjs, 8_mjs, 9_mjs, 1_mjm, 2_mjm, 5_mjm, 6_mjm, 8_mjm, 9_mjm}}, | ||
| 18 | {3, {1_mjs, 1_mjs, 1_mjs, 1_mjs, 4_mjs, 4_mjs, 4_mjs, 4_mjs, 1_mjm, 2_mjm, 5_mjm, 6_mjm, 8_mjm, 9_mjm}}, | ||
| 19 | {3, {1_mjs, 1_mjs, 1_mjs, 1_mjs, 2_mjs, 2_mjs, 2_mjs, 2_mjs, 1_mjm, 2_mjm, 5_mjm, 6_mjm, 8_mjm, 9_mjm}}, | ||
| 20 | {5, {1_mjs, 1_mjs, 1_mjs, 1_mjs, 4_mjs, 4_mjs, 4_mjs, 4_mjs, 1_mjm, 4_mjm, 7_mjm, 1_mjp, 4_mjp, 7_mjp}}, | ||
| 21 | {3, {1_mjz, 1_mjz, 1_mjz, 1_mjz, 2_mjz, 2_mjz, 2_mjz, 2_mjz, 3_mjz, 3_mjz, 3_mjz, 3_mjz, 4_mjz, 4_mjz}}, | ||
| 22 | {3, {1_mjz, 1_mjz, 1_mjz, 1_mjz, 2_mjz, 2_mjz, 2_mjz, 2_mjz, 3_mjz, 3_mjz, 3_mjz, 3_mjz, 4_mjz, 7_mjz}}, | ||
| 23 | {2, {1_mjm, 1_mjm, 1_mjm, 1_mjm, 1_mjz, 1_mjz, 1_mjz, 1_mjz, 2_mjz, 2_mjz, 2_mjz, 2_mjz, 3_mjz, 3_mjz}}, | ||
| 24 | {3, {1_mjm, 1_mjm, 1_mjm, 1_mjm, 1_mjz, 1_mjz, 1_mjz, 1_mjz, 2_mjz, 2_mjz, 2_mjz, 2_mjz, 3_mjz, 4_mjz}}, | ||
| 25 | {1, {1_mjs, 1_mjs, 1_mjs, 2_mjs, 2_mjs, 2_mjs, 3_mjs, 3_mjs, 3_mjs, 4_mjs, 4_mjs, 4_mjs, 1_mjz, 2_mjz}}, | ||
| 26 | {1, {1_mjs, 1_mjs, 1_mjs, 2_mjs, 2_mjs, 2_mjs, 3_mjs, 3_mjs, 3_mjs, 4_mjs, 4_mjs, 4_mjs, 1_mjp, 2_mjp}}, | ||
| 27 | {0, {1_mjs, 1_mjs, 1_mjs, 2_mjs, 2_mjs, 2_mjs, 3_mjs, 3_mjs, 3_mjs, 4_mjs, 4_mjs, 4_mjs, 1_mjp, 1_mjp}}, | ||
| 28 | {9, {2_mjm, 5_mjm, 8_mjm, 2_mjp, 5_mjp, 8_mjp, 2_mjs, 5_mjs, 8_mjs, 1_mjz, 2_mjz, 3_mjz, 4_mjz, 7_mjz}}, | ||
| 29 | }; | ||
| 30 | |||
| 31 | 19 | void test(u32 n) { | |
| 32 |
1/2✓ Branch 2 taken 19 times.
✗ Branch 3 not taken.
|
19 | auto [step, hand] = mahjong_hand_data[n]; |
| 33 | |||
| 34 |
1/2✓ Branch 1 taken 19 times.
✗ Branch 2 not taken.
|
19 | auto parsed = mahjong_parser<14>(hand); |
| 35 |
1/2✓ Branch 1 taken 19 times.
✗ Branch 2 not taken.
|
140 | bool win = any_of(parsed, [](auto CR hand) { return hand.win(); }); |
| 36 | |||
| 37 | 250 | auto f = [](auto& v) { | |
| 38 | 250 | vec<strn> ans; | |
| 39 |
2/2✓ Branch 7 taken 859 times.
✓ Branch 8 taken 250 times.
|
1109 | for (auto [melds, c] : v) { |
| 40 | 859 | auto card = mahjong_card::decode(c); | |
| 41 | 859 | strn meld_str; | |
| 42 |
9/12✓ Branch 0 taken 46 times.
✓ Branch 1 taken 18 times.
✓ Branch 2 taken 74 times.
✓ Branch 3 taken 26 times.
✓ Branch 4 taken 228 times.
✓ Branch 5 taken 161 times.
✓ Branch 6 taken 46 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 78 times.
✓ Branch 9 taken 182 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
|
859 | switch (melds) { |
| 43 |
1/2✓ Branch 1 taken 46 times.
✗ Branch 2 not taken.
|
46 | case MELDS_MJ::mian: meld_str = "mian"; break; |
| 44 |
1/2✓ Branch 1 taken 18 times.
✗ Branch 2 not taken.
|
18 | case MELDS_MJ::bianl: meld_str = "bianl"; break; |
| 45 |
1/2✓ Branch 1 taken 74 times.
✗ Branch 2 not taken.
|
74 | case MELDS_MJ::bianr: meld_str = "bianr"; break; |
| 46 |
1/2✓ Branch 1 taken 26 times.
✗ Branch 2 not taken.
|
26 | case MELDS_MJ::kan: meld_str = "kan"; break; |
| 47 |
1/2✓ Branch 1 taken 228 times.
✗ Branch 2 not taken.
|
228 | case MELDS_MJ::orphan: meld_str = "orphan"; break; |
| 48 |
1/2✓ Branch 1 taken 161 times.
✗ Branch 2 not taken.
|
161 | case MELDS_MJ::pair: meld_str = "pair"; break; |
| 49 |
1/2✓ Branch 1 taken 46 times.
✗ Branch 2 not taken.
|
46 | case MELDS_MJ::pair0: meld_str = "pair0"; break; |
| 50 | ✗ | case MELDS_MJ::bonus: meld_str = "bonus"; break; | |
| 51 |
1/2✓ Branch 1 taken 78 times.
✗ Branch 2 not taken.
|
78 | case MELDS_MJ::chow: meld_str = "chow"; break; |
| 52 |
1/2✓ Branch 1 taken 182 times.
✗ Branch 2 not taken.
|
182 | case MELDS_MJ::pung: meld_str = "pung"; break; |
| 53 | ✗ | case MELDS_MJ::kong: meld_str = "kong"; break; | |
| 54 | } | ||
| 55 |
2/4✓ Branch 1 taken 859 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 859 times.
✗ Branch 5 not taken.
|
859 | ans.push_back(std::format("({}:{}{})", meld_str, card.rank, card.suit)); |
| 56 | } | ||
| 57 | 250 | return ans; | |
| 58 | ✗ | }; | |
| 59 | 19 | vvec<strn> prepared, waiting; | |
| 60 |
2/2✓ Branch 4 taken 125 times.
✓ Branch 5 taken 19 times.
|
144 | for (auto CR hand : parsed) { |
| 61 |
2/4✓ Branch 1 taken 125 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 125 times.
✗ Branch 5 not taken.
|
125 | prepared.push_back(f(hand.prepared)); |
| 62 |
2/4✓ Branch 1 taken 125 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 125 times.
✗ Branch 5 not taken.
|
125 | waiting.push_back(f(hand.waiting)); |
| 63 | } | ||
| 64 | |||
| 65 |
4/8✓ Branch 1 taken 19 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 19 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 19 times.
✗ Branch 8 not taken.
✓ Branch 13 taken 19 times.
✗ Branch 14 not taken.
|
19 | check(win, !step, check_param(n), check_param(prepared), check_param(waiting)); |
| 66 | 19 | } | |
| 67 | |||
| 68 | 1 | int main() { | |
| 69 |
2/2✓ Branch 0 taken 19 times.
✓ Branch 1 taken 1 time.
|
20 | for (u32 i = 0; i <= 18; ++i) { |
| 70 |
3/6✓ Branch 4 taken 19 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 19 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 19 times.
✗ Branch 11 not taken.
|
19 | timer_(test(i)); |
| 71 | } | ||
| 72 | 1 | } | |
| 73 |