mirror of
https://github.com/jorenchik/testing-spring-2024.git
synced 2025-10-21 20:10:36 +00:00
feat: null checks and rename some options
This commit is contained in:
parent
2f585a3318
commit
871faaa2a3
31
src/lib.cpp
31
src/lib.cpp
@ -4,17 +4,19 @@
|
|||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
#include <iostream>
|
|
||||||
#include <ostream>
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
enum VALIDATION_STATUS {
|
enum VALIDATION_STATUS {
|
||||||
PLAYER_NOT_IN_ROOM,
|
PLAYER_NOT_IN_ROOM,
|
||||||
NO_PLAYER,
|
|
||||||
NO_TARGET_PLAYER_SPECIFIED,
|
NO_TARGET_PLAYER_SPECIFIED,
|
||||||
ROOM_NOT_IN_PROGRESS,
|
ROOM_NOT_IN_PROGRESS,
|
||||||
|
ACTION_DOES_NOT_BELONG_TO_ROLE,
|
||||||
ACTION_PROHIBITED,
|
ACTION_PROHIBITED,
|
||||||
|
NO_ACTOR,
|
||||||
|
NO_ACTION,
|
||||||
NO_ROLE,
|
NO_ROLE,
|
||||||
|
NO_ROOM,
|
||||||
|
NO_RELATED_EVENTS,
|
||||||
ACTION_VALID,
|
ACTION_VALID,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -30,20 +32,31 @@ void run() {
|
|||||||
std::vector<Event> relatedEvents({event2, event3});
|
std::vector<Event> relatedEvents({event2, event3});
|
||||||
Player player1 = Player(69, "player1", role1, PlayerStatus::ALIVE);
|
Player player1 = Player(69, "player1", role1, PlayerStatus::ALIVE);
|
||||||
Player player2 = Player(420, "player2", role1, PlayerStatus::ALIVE);
|
Player player2 = Player(420, "player2", role1, PlayerStatus::ALIVE);
|
||||||
Room room1(1, "Room 1", 1710087364, RoomStatus::IN_PROGRESS, {});
|
Room room1(1, "Room 1", 1710087364, RoomStatus::IN_PROGRESS, {player1, player2});
|
||||||
Room room2(2, "Room 2", 1710087384, RoomStatus::ENDED, {player1, player2});
|
Room room2(2, "Room 2", 1710087384, RoomStatus::ENDED, {});
|
||||||
int actionValidated = validateAction(&player1, &kill, &room1, &relatedEvents, &player2);
|
int actionValidated = validateAction(&player1, &kill, &room1, &relatedEvents, &player2);
|
||||||
printf("The action validation result is %u\n", actionValidated);
|
printf("The action validation result is %u\n", actionValidated);
|
||||||
}
|
}
|
||||||
|
|
||||||
int validateAction(
|
int validateAction(
|
||||||
Player *actor, const Action *action, Room *room, std::vector<Event> *relatedEvents, Player *target = nullptr) {
|
Player *actor, const Action *action, Room *room, std::vector<Event> *relatedEvents, Player *target = nullptr) {
|
||||||
|
// null checks
|
||||||
|
if (!actor) {
|
||||||
|
return NO_ACTOR;
|
||||||
|
}
|
||||||
|
if (!action) {
|
||||||
|
return NO_ACTION;
|
||||||
|
}
|
||||||
|
if (!room) {
|
||||||
|
return NO_ROOM;
|
||||||
|
}
|
||||||
|
if (!relatedEvents) {
|
||||||
|
return NO_RELATED_EVENTS;
|
||||||
|
}
|
||||||
|
// actual validation
|
||||||
if (!playerBelongsToRoom(actor, room)) {
|
if (!playerBelongsToRoom(actor, room)) {
|
||||||
return PLAYER_NOT_IN_ROOM;
|
return PLAYER_NOT_IN_ROOM;
|
||||||
}
|
}
|
||||||
if (!actor) {
|
|
||||||
return NO_PLAYER;
|
|
||||||
}
|
|
||||||
if (action->hasTarget && !target) {
|
if (action->hasTarget && !target) {
|
||||||
return NO_TARGET_PLAYER_SPECIFIED;
|
return NO_TARGET_PLAYER_SPECIFIED;
|
||||||
}
|
}
|
||||||
@ -55,7 +68,7 @@ int validateAction(
|
|||||||
return NO_ROLE;
|
return NO_ROLE;
|
||||||
}
|
}
|
||||||
if (!actionBelongsToRole(role, action)) {
|
if (!actionBelongsToRole(role, action)) {
|
||||||
return ACTION_PROHIBITED;
|
return ACTION_DOES_NOT_BELONG_TO_ROLE;
|
||||||
}
|
}
|
||||||
if (!isActionAllowed(action, relatedEvents)) {
|
if (!isActionAllowed(action, relatedEvents)) {
|
||||||
return ACTION_PROHIBITED;
|
return ACTION_PROHIBITED;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user