Skip to content

Commit bd6d62b

Browse files
Remove pulbic function in GoldMine
- Remove getter and setter functions in GoldMine - Add gold manager mock in soldier tests
1 parent 0789be8 commit bd6d62b

8 files changed

Lines changed: 35 additions & 108 deletions

File tree

src/state/include/state/gold_manager/gold_manager.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@
1111

1212
#include <array>
1313
#include <cstdint>
14-
#include <map>
1514
#include <memory>
15+
#include <unordered_map>
1616
#include <vector>
1717

1818
namespace state {
@@ -83,12 +83,11 @@ class STATE_EXPORT GoldManager : public IGoldManager {
8383
* It maps each gold mine to number of requests made by the player to mine
8484
* that location
8585
*/
86-
std::array<std::map<GoldMine *, int64_t, GoldMineCompare>, 2> mine_requests;
86+
std::array<std::unordered_map<GoldMine *, int64_t>, 2> mine_requests;
8787

8888
/**
8989
* Function to return gold mine given the Vec2D offset
9090
*/
91-
9291
GoldMine *GetGoldMine(Vec2D offset);
9392

9493
public:

src/state/include/state/gold_manager/gold_mine.h

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -27,29 +27,5 @@ class GoldMine {
2727
* gold left in the gold mine
2828
*/
2929
int64_t ExtractGold(int64_t ext_amount);
30-
31-
/**
32-
* Helper function to get the amount of gold in the GoldMine
33-
*/
34-
35-
int64_t GetGoldReserve();
36-
37-
/**
38-
* Helper function to set the amount of gold reserve in a GoldMine
39-
*/
40-
void SetGoldReserve(int64_t gold_value);
41-
};
42-
43-
/**
44-
* Defining a way to compare 2 GoldMine objects so that is can be stored in an
45-
* unordered hash map
46-
*/
47-
48-
class GoldMineCompare {
49-
public:
50-
bool operator()(const GoldMine *lhs, const GoldMine *rhs) {
51-
return (lhs->value - rhs->value);
52-
}
5330
};
54-
5531
} // namespace state

src/state/src/gold_manager/gold_mine.cpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,4 @@ int64_t GoldMine::ExtractGold(int64_t ext_amount) {
1616
return ext_amount;
1717
}
1818
}
19-
20-
int64_t GoldMine::GetGoldReserve() { return this->value; }
21-
22-
void GoldMine::SetGoldReserve(int64_t gold_value) { this->value = gold_value; }
23-
2419
} // namespace state

test/logger/logger_test.cpp

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@ class LoggerTest : public testing::Test {
2424

2525
std::unique_ptr<GoldManagerMock> gold_manager;
2626
std::unique_ptr<PathPlanner> path_planner;
27-
std::array<int64_t, 2> player_gold;
28-
int64_t max_gold;
2927

3028
std::unique_ptr<Map> map;
3129

@@ -47,10 +45,6 @@ class LoggerTest : public testing::Test {
4745
{W, W, W, W, W},
4846
}};
4947
map = make_unique<Map>(map_matrix, TEST_MAP_SIZE, ELEMENT_SIZE);
50-
51-
player_gold[0] = 5000;
52-
player_gold[1] = 5000;
53-
max_gold = 10000;
5448
}
5549
};
5650

test/state/factory_test.cpp

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,6 @@ using namespace testing;
1313

1414
class FactoryTest : public Test {
1515
protected:
16-
array<int64_t, 2> player_gold;
17-
int64_t soldier_kill_reward_gold;
18-
int64_t villager_kill_reward_gold;
19-
int64_t factory_kill_reward_gold;
20-
int64_t max_gold;
21-
2216
Soldier model_soldier;
2317
Villager model_villager;
2418

@@ -59,8 +53,6 @@ class FactoryTest : public Test {
5953

6054
FactoryTest() {
6155

62-
player_gold[0] = player_gold[1] = 5000;
63-
6456
model_villager =
6557
Villager(2, PlayerId::PLAYER2, ActorType::VILLAGER, 100, 100,
6658
DoubleVec2D(15, 15), gold_manager.get(),
@@ -70,13 +62,6 @@ class FactoryTest : public Test {
7062
100, DoubleVec2D(10, 10), gold_manager.get(),
7163
path_planner.get(), 10, 10, 10);
7264

73-
this->max_gold = 10000;
74-
this->soldier_kill_reward_gold = SOLDIER_KILL_REWARD_AMOUNT;
75-
this->villager_kill_reward_gold = VILLAGER_KILL_REWARD_AMOUNT;
76-
this->factory_kill_reward_gold = FACTORY_KILL_REWARD_AMOUNT;
77-
78-
std::vector<std::unique_ptr<GoldMine>> gold_mines;
79-
8065
this->gold_manager = make_unique<GoldManagerMock>();
8166

8267
villager_list = std::vector<std::unique_ptr<Villager>>{};

test/state/gold_manager_test.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ class GoldManagerTest : public testing::Test {
126126
TEST_F(GoldManagerTest, AddMineRequest) {
127127
auto villager = MakeStateVillager(PlayerId::PLAYER1);
128128
auto gold_mine = this->gold_mines[0];
129-
gold_mine->SetGoldReserve(100);
129+
gold_mine->value = 100;
130130
int64_t player_id = static_cast<int64_t>(PlayerId::PLAYER1);
131131
villager->SetMineTarget(Vec2D(2, 2));
132132

@@ -152,7 +152,7 @@ TEST_F(GoldManagerTest, AddMineRequest) {
152152
TEST_F(GoldManagerTest, SplitGoldTest) {
153153
// Reassigning the GoldMine gold to have 16 gold units
154154
auto gold_mine = this->gold_mines[0];
155-
gold_mine->SetGoldReserve(16);
155+
gold_mine->value = 16;
156156

157157
// Making a villager each for player 1 and player 2
158158
// Since both villagers start at the same position, they will reach the mine
@@ -178,15 +178,15 @@ TEST_F(GoldManagerTest, SplitGoldTest) {
178178
this->player_gold[0] + 8);
179179
ASSERT_EQ(gold_manager->GetBalance(PlayerId::PLAYER2),
180180
this->player_gold[1] + 8);
181-
ASSERT_EQ(gold_mine->GetGoldReserve(), 0);
181+
ASSERT_EQ(gold_mine->value, 0);
182182

183183
// Updating the player gold in the test
184184
this->player_gold[0] += 8;
185185
this->player_gold[1] += 8;
186186

187187
// Reassigning gold manager to have an odd number and checking if the
188188
// remaining gold is removed
189-
gold_mine->SetGoldReserve(28);
189+
gold_mine->value = 28;
190190

191191
// Creating an additional player 2 villager and resetting the first 2
192192
// villagers
@@ -221,5 +221,5 @@ TEST_F(GoldManagerTest, SplitGoldTest) {
221221
this->player_gold[1] + 18);
222222

223223
// Checking if the extra 1 gold coin is removed
224-
ASSERT_EQ(gold_mine->GetGoldReserve(), 0);
224+
ASSERT_EQ(gold_mine->value, 0);
225225
}

test/state/soldier_test.cpp

Lines changed: 28 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
#include "gmock/gmock.h"
33
#include "state/actor/soldier.h"
44
#include "state/actor/villager.h"
5-
#include "state/gold_manager/gold_manager.h"
5+
#include "state/mocks/gold_manager_mock.h"
66
#include "gtest/gtest.h"
77

88
using namespace std;
@@ -20,13 +20,7 @@ class SoldierTest : public Test {
2020
int64_t element_size = 10;
2121
unique_ptr<Map> map;
2222

23-
array<int64_t, 2> player_gold;
24-
int64_t soldier_kill_reward_gold;
25-
int64_t villager_kill_reward_gold;
26-
int64_t factory_kill_reward_gold;
27-
int64_t max_gold;
28-
29-
unique_ptr<GoldManager> gold_manager;
23+
unique_ptr<GoldManagerMock> gold_manager;
3024
unique_ptr<PathPlanner> path_planner;
3125
unique_ptr<Soldier> soldier;
3226

@@ -41,23 +35,7 @@ class SoldierTest : public Test {
4135
}};
4236

4337
map = make_unique<Map>(map_matrix, map_size, element_size);
44-
45-
for (int i = 0; i < (int)PlayerId::PLAYER_COUNT; ++i) {
46-
player_gold[i] = 5000; // Start balance
47-
}
48-
49-
this->max_gold = 10000;
50-
this->soldier_kill_reward_gold = SOLDIER_KILL_REWARD_AMOUNT;
51-
this->villager_kill_reward_gold = VILLAGER_KILL_REWARD_AMOUNT;
52-
this->factory_kill_reward_gold = FACTORY_KILL_REWARD_AMOUNT;
53-
54-
std::vector<std::unique_ptr<GoldMine>> gold_mines;
55-
56-
this->gold_manager = make_unique<GoldManager>(
57-
player_gold, max_gold, soldier_kill_reward_gold,
58-
villager_kill_reward_gold, factory_kill_reward_gold, VILLAGER_COST,
59-
SOLDIER_COST, FACTORY_COST, MINING_REWARD, std::move(gold_mines));
60-
this->path_planner = make_unique<PathPlanner>(map.get());
38+
gold_manager = make_unique<GoldManagerMock>();
6139

6240
this->soldier =
6341
make_unique<Soldier>(1, PlayerId::PLAYER1, ActorType::SOLDIER, 100,
@@ -120,8 +98,13 @@ TEST_F(SoldierTest, MoveToDeadState) {
12098
DoubleVec2D(15, 15), gold_manager.get(), path_planner.get(),
12199
10, 10, attack_damage);
122100

101+
// Making soldier attack the other soldier
123102
this->soldier->Attack(target_soldier);
124103

104+
// Expect calls to GoldManager for killing unit
105+
EXPECT_CALL(*gold_manager, RewardKill(target_soldier));
106+
107+
// Soldier continuously attacking the other soldier until he dies
125108
while (target_soldier->GetHp() != 0) {
126109
this->soldier->Update();
127110
target_soldier->Update();
@@ -135,7 +118,7 @@ TEST_F(SoldierTest, MoveToDeadState) {
135118
TEST_F(SoldierTest, SoldierKillReward) {
136119
int64_t initial_hp = 100;
137120
int64_t attack_damage = 10;
138-
int64_t initial_gold = player_gold[0];
121+
int64_t initial_gold = 100;
139122

140123
auto *target_soldier =
141124
new Soldier(2, PlayerId::PLAYER2, ActorType::SOLDIER, initial_hp, 100,
@@ -144,28 +127,31 @@ TEST_F(SoldierTest, SoldierKillReward) {
144127

145128
this->soldier->Attack(target_soldier);
146129

130+
// Expecting call to gold manager to reward kill of soldier
131+
EXPECT_CALL(*gold_manager, RewardKill(target_soldier));
132+
147133
while (target_soldier->GetHp() != 0) {
148134
this->soldier->Update();
149135
target_soldier->Update();
150136
this->soldier->LateUpdate();
151137
target_soldier->LateUpdate();
152138
}
153-
154-
ASSERT_EQ(gold_manager->GetBalance(PlayerId::PLAYER1),
155-
(initial_gold + soldier_kill_reward_gold));
156139
}
157140

158141
TEST_F(SoldierTest, PursuitAndKill) {
159142
int64_t initial_hp = 100;
160143
int64_t attack_damage = 10;
161-
162144
auto *target_soldier =
163145
new Soldier(2, PlayerId::PLAYER2, ActorType::SOLDIER, initial_hp, 100,
164-
DoubleVec2D(10, 40), gold_manager.get(), path_planner.get(),
146+
DoubleVec2D(15, 15), gold_manager.get(), path_planner.get(),
165147
10, 10, attack_damage);
166148

167149
this->soldier->SetAttackTarget(target_soldier);
168150

151+
// Expecting call to gold manager to reward the soldier for killing target
152+
// soldier
153+
EXPECT_CALL(*gold_manager, RewardKill(target_soldier));
154+
169155
while (target_soldier->GetHp() != 0) {
170156
this->soldier->Update();
171157
target_soldier->Update();
@@ -177,13 +163,20 @@ TEST_F(SoldierTest, PursuitAndKill) {
177163
}
178164

179165
TEST_F(SoldierTest, SimultaneousKill) {
180-
auto target_soldier = make_unique<Soldier>(
181-
2, PlayerId::PLAYER2, ActorType::SOLDIER, 100, 100, DoubleVec2D(35, 45),
182-
gold_manager.get(), path_planner.get(), 10, 10, 10);
166+
auto *target_soldier =
167+
new Soldier(2, PlayerId::PLAYER2, ActorType::SOLDIER, 100, 100,
168+
DoubleVec2D(15, 15), gold_manager.get(), path_planner.get(),
169+
10, 10, 10);
183170

184-
soldier->Attack(target_soldier.get());
171+
// Both soldiers attacking each other
172+
soldier->Attack(target_soldier);
185173
target_soldier->Attack(soldier.get());
186174

175+
176+
// Expecting call to gold manager to reward gold to each soldier for killing the other
177+
EXPECT_CALL(*gold_manager, RewardKill(target_soldier));
178+
EXPECT_CALL(*gold_manager, RewardKill(soldier.get()));
179+
187180
while (target_soldier->GetHp() != 0) {
188181
this->soldier->Update();
189182
target_soldier->Update();

test/state/villager_test.cpp

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,6 @@ class VillagerTest : public Test {
2121
int64_t element_size = 10;
2222
unique_ptr<Map> map;
2323

24-
array<int64_t, 2> player_gold;
25-
int64_t soldier_kill_reward_gold;
26-
int64_t villager_kill_reward_gold;
27-
int64_t factory_kill_reward_gold;
28-
int64_t max_gold;
29-
3024
unique_ptr<GoldManagerMock> gold_manager;
3125
unique_ptr<PathPlanner> path_planner;
3226
unique_ptr<Villager> villager;
@@ -49,15 +43,6 @@ class VillagerTest : public Test {
4943
}};
5044

5145
map = make_unique<Map>(map_matrix, map_size, element_size);
52-
for (int i = 0; i < (int)PlayerId::PLAYER_COUNT; ++i) {
53-
player_gold[i] = 5000; // Start balance
54-
}
55-
56-
this->max_gold = 10000;
57-
this->soldier_kill_reward_gold = SOLDIER_KILL_REWARD_AMOUNT;
58-
this->villager_kill_reward_gold = VILLAGER_KILL_REWARD_AMOUNT;
59-
this->factory_kill_reward_gold = FACTORY_KILL_REWARD_AMOUNT;
60-
6146
this->gold_manager = make_unique<GoldManagerMock>();
6247

6348
this->path_planner = make_unique<PathPlanner>(map.get());

0 commit comments

Comments
 (0)