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/statefunctions/gamestates/kan.cc
Line
Count
Source
1
#include <array>
2
#include <cstdint>
3
#include <iostream>
4
#include <memory>
5
#include <vector>
6
7
#include "statefunctions/router.h"
8
#include "statefunctions/stateutilities.h"
9
#include "types/event.h"
10
#include "types/gamestate.h"
11
#include "types/piecetype.h"
12
#include "types/sets.h"
13
#include "types/statefunction.h"
14
15
namespace mahjong {
16
17
namespace {
18
0
std::unique_ptr<GameState> Kan(std::unique_ptr<GameState> state) {
19
0
  AlertPlayers(*state, Event{
20
0
                           .type = Event::kKan,          // type
21
0
                           .player = state->lastCaller,  // player
22
0
                           .piece = static_cast<int16_t>(
23
0
                               state->pendingPiece.toUint8_t()),  // piece
24
0
                           .decision = false,                     // decision
25
0
                       });
26
27
0
  if (state->hands.at(state->currentPlayer).riichi &&
28
0
      state->hands.at(state->currentPlayer).discards.size() ==
29
0
          state->hands.at(state->currentPlayer).riichiPieceDiscard) {
30
0
    state->hands.at(state->currentPlayer).riichiPieceDiscard++;
31
0
  }
32
33
0
  state->hands.at(state->lastCaller).open = true;
34
0
  state->currentPlayer = state->lastCaller;
35
0
  state->hands.at(state->lastCaller).live.push_back(state->pendingPiece);
36
0
  state->hands.at(state->lastCaller).sort();
37
0
  state->lastCall = state->turnNum;
38
0
  state->concealedKan = false;
39
0
  state->turnNum++;
40
41
0
  if (RemovePieces(*state, state->lastCaller, state->pendingPiece,
42
0
                   /*count=*/4) != 4) {
43
0
    std::cerr << "Not Enough Pieces to remove in kan" << '\n';
44
0
    state->nextState = StateFunctionType::kError;
45
0
    return state;
46
0
  }
47
0
  state->hands.at(state->lastCaller)
48
0
      .melds.push_back({SetType::kKan, state->pendingPiece});
49
50
0
  state->nextState = StateFunctionType::kKanDiscard;
51
0
  return state;
52
0
}
53
}  // namespace
54
55
REGISTER_ROUTE(Kan, StateFunctionType::kKan);
56
}  // namespace mahjong