etrobocon2018 feat.KatLab  770af34cce41ae9c30c41303275e1add2daae0c3 (with uncommitted changes)
 全て クラス 名前空間 ファイル 関数 変数 列挙型 列挙値 フレンド マクロ定義 ページ
ExplorerTest.cpp
[詳解]
1 
5 #include "Explorer.h"
6 #include <gtest/gtest.h>
7 
8 namespace etrobocon2018_test {
9 
10  // ブロック置き場ノードリストの初期値を返す
11  TEST(ExplorerTest, getInitialValueOfBlockAreaNodeListTest)
12  {
13  Explorer obj;
14 
15  auto actual = obj.getBlockAreaNodeList();
16 
17  ASSERT_EQ(nullptr, actual);
18  }
19 
20  // ブロック置き場ノードリストの設定値を返す
21  TEST(ExplorerTest, getValueOfBlockAreaNodeListTest)
22  {
23  Explorer obj;
24  std::vector<Node> expectedList
25  = { Node{}, Node{ 1 }, Node{ 2 }, Node{ 3 }, Node{ 4 }, Node{ 5 },
26  Node{ 6 }, Node{ 7 }, Node{ 8 }, Node{ 9 }, Node{ 10 }, Node{ 11 },
27  Node{ 12 }, Node{ 13 }, Node{ 14 }, Node{ 15 } };
28  std::vector<std::vector<int>> expectedPositionList = { { 0, 0 }, { 1, 0 }, { 2, 0 }, { 3, 0 },
29 
30  { 0, 1 }, { 1, 1 }, { 2, 1 }, { 3, 1 },
31 
32  { 0, 2 }, { 1, 2 }, { 2, 2 }, { 3, 2 },
33 
34  { 0, 3 }, { 1, 3 }, { 2, 3 }, { 3, 3 } };
35 
36  obj.createBlockArea();
37  auto actual = obj.getBlockAreaNodeList();
38 
39  ASSERT_EQ(expectedList.size(), actual->size());
40 
41  for(unsigned int i = 0; i < expectedList.size(); i++) {
42  ASSERT_EQ(expectedList[i].getNodeID(), actual->at(i)->getNodeID());
43  ASSERT_EQ(expectedPositionList[i][0], actual->at(i)->getPositionX());
44  ASSERT_EQ(expectedPositionList[i][1], actual->at(i)->getPositionY());
45  }
46  }
47 
48  TEST(ExplorerTest, checkNodeHadBlockTest)
49  {
50  Explorer obj;
51  obj.createBlockArea();
52 
53  bool actual = obj.hasBlock(0);
54  ASSERT_FALSE(actual);
55 
56  obj.setHasBlockIn(0);
57  actual = obj.hasBlock(0);
58  ASSERT_TRUE(actual);
59  }
60 
61  // ノード0からノード1のルートを返す
62  TEST(ExplorerTest, searchRouteFrom0To1Test)
63  {
64  Explorer obj;
65  unsigned long int expectedSize = 2;
66  std::vector<int> expectedList = { 0, 1 };
67 
68  obj.createBlockArea();
69  auto actual = obj.searchRoute(0, 1);
70 
71  for(unsigned int i = 0; i < expectedSize; i++) {
72  EXPECT_EQ(obj.getBlockAreaNodeList()->at(actual[i])->getNodeID(), expectedList[i]);
73  }
74 
75  ASSERT_EQ(expectedSize, actual.size());
76  }
77 
78  // ノード1からノード0のルートを返す
79  TEST(ExplorerTest, searchRouteFrom1To0Test)
80  {
81  Explorer obj;
82  unsigned long int expectedSize = 2;
83  std::vector<int> expectedList = { 1, 0 };
84 
85  obj.createBlockArea();
86  auto actual = obj.searchRoute(1, 0);
87 
88  for(unsigned int i = 0; i < expectedSize; i++) {
89  EXPECT_EQ(obj.getBlockAreaNodeList()->at(actual[i])->getNodeID(), expectedList[i]);
90  }
91 
92  ASSERT_EQ(expectedSize, actual.size());
93  }
94 
95  // ノード8からノード9のルートを返す
96  TEST(ExplorerTest, searchRouteFrom8To9Test)
97  {
98  Explorer obj;
99  unsigned long int expectedSize = 2;
100  std::vector<int> expectedList = { 8, 9 };
101 
102  obj.createBlockArea();
103  auto actual = obj.searchRoute(8, 9);
104 
105  for(unsigned int i = 0; i < expectedSize; i++) {
106  EXPECT_EQ(obj.getBlockAreaNodeList()->at(actual[i])->getNodeID(), expectedList[i]);
107  }
108 
109  ASSERT_EQ(expectedSize, actual.size());
110  }
111 
112  // ノード11からノード10のルートを返す
113  TEST(ExplorerTest, searchRouteFrom11To10Test)
114  {
115  Explorer obj;
116  unsigned long int expectedSize = 2;
117  std::vector<int> expectedList = { 11, 10 };
118 
119  obj.createBlockArea();
120  auto actual = obj.searchRoute(11, 10);
121 
122  for(unsigned int i = 0; i < expectedSize; i++) {
123  EXPECT_EQ(obj.getBlockAreaNodeList()->at(actual[i])->getNodeID(), expectedList[i]);
124  }
125 
126  ASSERT_EQ(expectedSize, actual.size());
127  }
128 
129  // ノード0からノード2のルートを返す
130  TEST(ExplorerTest, searchRouteFrom0To2Test)
131  {
132  Explorer obj;
133  unsigned long int expectedSize = 3;
134  std::vector<int> expectedList = { 0, 1, 2 };
135 
136  obj.createBlockArea();
137  auto actual = obj.searchRoute(0, 2);
138 
139  for(unsigned int i = 0; i < expectedSize; i++) {
140  EXPECT_EQ(obj.getBlockAreaNodeList()->at(actual[i])->getNodeID(), expectedList[i]);
141  }
142 
143  ASSERT_EQ(expectedSize, actual.size());
144  }
145 
146  // ノード2からノード0のルートを返す
147  TEST(ExplorerTest, searchRouteFrom2To0Test)
148  {
149  Explorer obj;
150  unsigned long int expectedSize = 3;
151  std::vector<int> expectedList = { 2, 1, 0 };
152 
153  obj.createBlockArea();
154  auto actual = obj.searchRoute(2, 0);
155 
156  for(unsigned int i = 0; i < expectedSize; i++) {
157  EXPECT_EQ(obj.getBlockAreaNodeList()->at(actual[i])->getNodeID(), expectedList[i]);
158  }
159 
160  ASSERT_EQ(expectedSize, actual.size());
161  }
162 
163  // ノード11からノード5の最短ルートを返す
164  TEST(ExplorerTest, searchShortestRouteFrom11To5Test)
165  {
166  Explorer obj;
167  unsigned long int expectedSize = 4;
168  std::vector<int> expectedList = { 11, 10, 9, 5 };
169 
170  obj.createBlockArea();
171  auto actual = obj.searchRoute(11, 5);
172 
173  for(unsigned int i = 0; i < expectedSize; i++) {
174  EXPECT_EQ(obj.getBlockAreaNodeList()->at(actual[i])->getNodeID(), expectedList[i]);
175  }
176 
177  ASSERT_EQ(expectedSize, actual.size());
178  }
179 
180  // ノード11からノード5のノード6迂回ルートを返す
181  TEST(ExplorerTest, searchRouteFrom11To5Circumventing6Test)
182  {
183  Explorer obj;
184  unsigned long int expectedSize = 4;
185  std::vector<int> expectedList = { 11, 10, 9, 5 };
186 
187  obj.createBlockArea();
188  obj.getBlockAreaNodeList()->at(6)->setHasBlock(true);
189  auto actual = obj.searchRoute(11, 5);
190 
191  for(unsigned int i = 0; i < expectedSize; i++) {
192  EXPECT_EQ(obj.getBlockAreaNodeList()->at(actual[i])->getNodeID(), expectedList[i]);
193  }
194 
195  ASSERT_EQ(expectedSize, actual.size());
196  }
197 
198  // ノード11からノード5のノード6とノード10迂回ルートを返す
199  TEST(ExplorerTest, searchRouteFrom11To5Circumventing6And10Test)
200  {
201  Explorer obj;
202  std::vector<int> expected = { 11, 15, 14, 13, 9, 5 };
203 
204  obj.createBlockArea();
205  obj.getBlockAreaNodeList()->at(6)->setHasBlock(true);
206  obj.getBlockAreaNodeList()->at(10)->setHasBlock(true);
207  auto actual = obj.searchRoute(11, 5);
208 
209  for(unsigned int i = 0; i < expected.size(); i++) {
210  EXPECT_EQ(obj.getBlockAreaNodeList()->at(actual[i])->getNodeID(), expected[i]);
211  }
212 
213  ASSERT_EQ(expected.size(), actual.size());
214  }
215 
216  // ノード13からノード6のノード10迂回ルートを返す
217  TEST(ExplorerTest, searchRouteFrom13To6Circumventing10Test)
218  {
219  Explorer obj;
220  std::vector<int> expected = { 13, 9, 5, 6 };
221 
222  obj.createBlockArea();
223  obj.getBlockAreaNodeList()->at(6)->setHasBlock(true);
224  obj.getBlockAreaNodeList()->at(7)->setHasBlock(true);
225  obj.getBlockAreaNodeList()->at(10)->setHasBlock(true);
226  obj.getBlockAreaNodeList()->at(11)->setHasBlock(true);
227  auto actual = obj.searchRoute(13, 6);
228 
229  for(unsigned int i = 0; i < expected.size(); i++) {
230  EXPECT_EQ(obj.getBlockAreaNodeList()->at(actual[i])->getNodeID(), expected[i]);
231  }
232 
233  ASSERT_EQ(expected.size(), actual.size());
234  }
235 
236  // ノード11からノード5のノード6とノード10とノード9迂回ルートを返す
237  TEST(ExplorerTest, searchRouteFrom11To5Circumventing6And9And10Test)
238  {
239  Explorer obj;
240  std::vector<int> expected = { 11, 7, 3, 2, 1, 5 };
241 
242  obj.createBlockArea();
243  obj.getBlockAreaNodeList()->at(6)->setHasBlock(true);
244  obj.getBlockAreaNodeList()->at(9)->setHasBlock(true);
245  obj.getBlockAreaNodeList()->at(10)->setHasBlock(true);
246  auto actual = obj.searchRoute(11, 5);
247 
248  for(unsigned int i = 0; i < expected.size(); i++) {
249  EXPECT_EQ(obj.getBlockAreaNodeList()->at(actual[i])->getNodeID(), expected[i]);
250  }
251 
252  ASSERT_EQ(expected.size(), actual.size());
253  }
254 
255  // 簡単なシナリオルートを返す
256  TEST(ExplorerTest, searchRouteInSenarioTest)
257  {
258  Explorer obj;
259  // 8->Blue, 9->Red, 11->Yellow, 15->Green
260  std::vector<int> expectedCartingBlue = { 8, 12, 13, 14, 10 };
261  std::vector<int> expectedMovingToRed = { 14, 13, 9 };
262  std::vector<int> expectedCartingRed = { 9, 5, 6 };
263  std::vector<int> expectedMovingToYellow = { 5, 1, 2, 3, 7, 11 };
264  std::vector<int> expectedCartingYellow = { 11, 7, 3, 2, 1, 5, 9 };
265  std::vector<int> expectedMovingToGreen = { 5, 4, 8, 12, 13, 14, 15 };
266  std::vector<int> expectedCartingGreen = { 15, 14, 13, 12, 8, 4, 5 };
267  std::vector<int> expectedMovingTo11 = { 4, 0, 1, 2, 3, 7, 11 };
268 
269  obj.createBlockArea();
270  obj.resetBlockArea();
271  obj.setHasBlockIn(8);
272  obj.setHasBlockIn(9);
273  obj.setHasBlockIn(11);
274  obj.setHasBlockIn(15);
275 
276  // Blue 8->10
277  auto actualCartingBlue = obj.searchRoute(8, 10);
278 
279  for(unsigned int i = 0; i < expectedCartingBlue.size(); i++) {
280  EXPECT_EQ(obj.getBlockAreaNodeList()->at(actualCartingBlue[i])->getNodeID(),
281  expectedCartingBlue[i]);
282  }
283  EXPECT_EQ(expectedCartingBlue.size(), actualCartingBlue.size());
284 
285  obj.resetBlockArea();
286  obj.setHasBlockIn(9);
287  obj.setHasBlockIn(10);
288  obj.setHasBlockIn(11);
289  obj.setHasBlockIn(15);
290 
291  // 14->9
292  auto actualMovingToRed = obj.searchRoute(14, 9);
293  for(unsigned int i = 0; i < expectedMovingToRed.size(); i++) {
294  EXPECT_EQ(obj.getBlockAreaNodeList()->at(actualMovingToRed[i])->getNodeID(),
295  expectedMovingToRed[i]);
296  }
297  EXPECT_EQ(expectedMovingToRed.size(), actualMovingToRed.size());
298 
299  obj.resetBlockArea();
300  obj.setHasBlockIn(9);
301  obj.setHasBlockIn(10);
302  obj.setHasBlockIn(11);
303  obj.setHasBlockIn(15);
304 
305  // Red 9->6
306  auto actualCartingRed = obj.searchRoute(9, 6);
307  for(unsigned int i = 0; i < expectedCartingRed.size(); i++) {
308  EXPECT_EQ(obj.getBlockAreaNodeList()->at(actualCartingRed[i])->getNodeID(),
309  expectedCartingRed[i]);
310  }
311  EXPECT_EQ(expectedCartingRed.size(), actualCartingRed.size());
312 
313  obj.resetBlockArea();
314  obj.setHasBlockIn(6);
315  obj.setHasBlockIn(10);
316  obj.setHasBlockIn(11);
317  obj.setHasBlockIn(15);
318 
319  // 5->11
320  auto actualMovingToYellow = obj.searchRoute(5, 11);
321  for(unsigned int i = 0; i < expectedMovingToYellow.size(); i++) {
322  EXPECT_EQ(obj.getBlockAreaNodeList()->at(actualMovingToYellow[i])->getNodeID(),
323  expectedMovingToYellow[i]);
324  }
325  EXPECT_EQ(expectedMovingToYellow.size(), actualMovingToYellow.size());
326 
327  obj.resetBlockArea();
328  obj.setHasBlockIn(6);
329  obj.setHasBlockIn(10);
330  obj.setHasBlockIn(11);
331  obj.setHasBlockIn(15);
332 
333  // Yellow 11->9
334  auto actualCartingYellow = obj.searchRoute(11, 9);
335  for(unsigned int i = 0; i < expectedCartingYellow.size(); i++) {
336  EXPECT_EQ(obj.getBlockAreaNodeList()->at(actualCartingYellow[i])->getNodeID(),
337  expectedCartingYellow[i]);
338  }
339  EXPECT_EQ(expectedCartingYellow.size(), actualCartingYellow.size());
340 
341  obj.resetBlockArea();
342  obj.setHasBlockIn(6);
343  obj.setHasBlockIn(9);
344  obj.setHasBlockIn(10);
345  obj.setHasBlockIn(15);
346 
347  // 5->15
348  auto actualMovingToGreen = obj.searchRoute(5, 15);
349  for(unsigned int i = 0; i < expectedMovingToGreen.size(); i++) {
350  EXPECT_EQ(obj.getBlockAreaNodeList()->at(actualMovingToGreen[i])->getNodeID(),
351  expectedMovingToGreen[i]);
352  }
353  EXPECT_EQ(expectedMovingToGreen.size(), actualMovingToGreen.size());
354 
355  obj.resetBlockArea();
356  obj.setHasBlockIn(6);
357  obj.setHasBlockIn(9);
358  obj.setHasBlockIn(10);
359  obj.setHasBlockIn(15);
360 
361  // Green 15->5
362  auto actualCartingGreen = obj.searchRoute(15, 5);
363  for(unsigned int i = 0; i < expectedCartingGreen.size(); i++) {
364  EXPECT_EQ(obj.getBlockAreaNodeList()->at(actualCartingGreen[i])->getNodeID(),
365  expectedCartingGreen[i]);
366  }
367  EXPECT_EQ(expectedCartingYellow.size(), actualCartingGreen.size());
368 
369  obj.resetBlockArea();
370  obj.setHasBlockIn(5);
371  obj.setHasBlockIn(6);
372  obj.setHasBlockIn(9);
373  obj.setHasBlockIn(10);
374 
375  // 4->11
376  auto actualMovingTo11 = obj.searchRoute(4, 11);
377  for(unsigned int i = 0; i < expectedMovingTo11.size(); i++) {
378  EXPECT_EQ(obj.getBlockAreaNodeList()->at(actualMovingTo11[i])->getNodeID(),
379  expectedMovingTo11[i]);
380  }
381  EXPECT_EQ(expectedMovingTo11.size(), actualMovingTo11.size());
382  }
383 
384 } // namespace etrobocon2018_test
Definition: Node.h:142
void createBlockArea()
Definition: Explorer.cpp:3
std::vector< Node * > * getBlockAreaNodeList()
Definition: Explorer.cpp:136
bool hasBlock(std::int8_t id)
Definition: Explorer.cpp:50
void setHasBlockIn(std::int8_t blockID)
Definition: Explorer.cpp:44
TEST(AIAnswerArrayTest, construct)
std::vector< int > searchRoute(std::int8_t start, std::int8_t end)
Definition: Explorer.cpp:56
ルート探索クラス
void resetBlockArea()
Definition: Explorer.cpp:33