Coverage Report

Created: 2025-09-03 03:49

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/nix/store/i1aar97n7b4yf8rk94p66if25brfvvdx-gqvzl8a5pvrg3xj44q0msrndcripi8dk-source/src/scoring/yakus/terminalsinallsets.cc
Line
Count
Source
1
#include "scoring/yakus/terminalsinallsets.h"
2
3
#include <vector>
4
5
#include "analysis/handnode.h"
6
#include "scoring/yakus.h"
7
#include "types/gamestate.h"
8
#include "types/sets.h"
9
#include "types/yaku.h"
10
11
namespace mahjong::yaku {
12
bool isTerminalsInAllSets(const GameState& state, int player,
13
6
                          const std::vector<const mahjong::Node*>& branch) {
14
19
  for (const auto* node : branch) {
15
19
    switch (node->type()) {
16
0
      case SetType::kSingle:
17
0
        return false;
18
9
      case SetType::kChi:
19
9
        if (!node->start().isTerminal() && !(node->start() + 2).isTerminal()) {
20
0
          return false;
21
0
        }
22
9
        break;
23
9
      case SetType::kPair:
24
10
      case SetType::kPon:
25
10
      case SetType::kKan:
26
10
      case SetType::kConcealedKan:
27
10
        if (!node->start().isTerminal()) {
28
4
          return false;
29
4
        }
30
6
        break;
31
19
    }
32
19
  }
33
2
  for (const auto& meld : state.hands.at(player).melds) {
34
1
    switch (meld.type) {
35
0
      case SetType::kSingle:
36
0
        return false;
37
1
      case SetType::kChi:
38
1
        if (!meld.start.isTerminal() && !(meld.start + 2).isTerminal()) {
39
0
          return false;
40
0
        }
41
1
        break;
42
1
      case SetType::kPair:
43
0
      case SetType::kKan:
44
0
      case SetType::kConcealedKan:
45
0
      case SetType::kPon:
46
0
        if (!meld.start.isTerminal()) {
47
0
          return false;
48
0
        }
49
0
        break;
50
1
    }
51
1
  }
52
2
  return true;
53
2
}
54
55
REGISTER_YAKU({
56
    .id = "terminalsinallsets",
57
    .name = "Terminals in all Sets",
58
    .type = Yaku::kBonusWhenClosed,
59
    .value = 2,
60
    .is_yaku_func = yaku::isTerminalsInAllSets,
61
});
62
}  // namespace mahjong::yaku