etrobocon2018 feat.KatLab  770af34cce41ae9c30c41303275e1add2daae0c3 (with uncommitted changes)
 全て クラス 名前空間 ファイル 関数 変数 列挙型 列挙値 フレンド マクロ定義 ページ
クラス | 関数
etrobocon2018_test 名前空間

クラス

class  BlockStrategyTest
 
class  DistinguisherTest
 
class  LeftCourseTest
 
class  LifterTest
 
class  LineTracerWalkerTest
 
class  NormalCourseTest
 
class  TEST_CLASS
 
class  RightCourseTest
 
class  test_SpeedControl
 
class  UserInterfaceTest
 

関数

 TEST (AIAnswerArrayTest, construct)
 
 TEST (AIAnswerArrayTest, constructSpecifiedSize)
 
 TEST (AIAnswerArrayTest, constructSpecifiedType)
 
 TEST (AIAnswerArrayTest, sizeTest)
 
 TEST (AIAnswerArrayTest, positionTest)
 
 TEST (AIAnswerArrayTest, atTest)
 
 TEST (AIAnswerArrayTest, atTestDouble)
 
 TEST (AIAnswerArrayTest, operatorTest)
 
 TEST (AIAnswerArrayTest, castTest)
 
 TEST (AIAnswerArrayTest, probsTest)
 
 TEST (AIAnswerArrayTest, handwritingTest)
 
 TEST (ColorBlockTest, createColorBlock)
 
 TEST (ColorBlockPlaceTest, createColorBlockPlace)
 
 TEST (ColorBlockPlaceTest, setColorBlock)
 
 TEST (ColorBlockPlaceTest, connectColorBlockPlace)
 
 TEST (ColorBlockPlaceTest, dynamicCreateColorBlockPlace)
 
 TEST (BlockSolverTest, getChangeDirection)
 
 TEST (BlockSolverTest, move)
 
 TEST (BlockSolverTest, move2)
 
 TEST (BlockSolverTest, runrun)
 
 TEST_F (BlockStrategyTest, createColorBlockPlace)
 
 TEST_F (BlockStrategyTest, connectColorBlockPlace)
 
 TEST_F (BlockStrategyTest, putColorBlockPlace)
 
 TEST_F (BlockStrategyTest, getDirection)
 
 TEST (DistanceTest, getDistanceTotalTest1)
 
 TEST (DistanceTest, getDistanceCurrentTest1)
 
 TEST (DistanceTest, getDistanceCurrentTest2)
 
 TEST_F (DistinguisherTest, getColorWhiteTest2)
 
 TEST_F (DistinguisherTest, getColorBlackTest1)
 
 TEST_F (DistinguisherTest, getColorBlackTest2)
 
 TEST (EtRobocon2018Test, CreateTest)
 
 TEST (ExplorerTest, getInitialValueOfBlockAreaNodeListTest)
 
 TEST (ExplorerTest, getValueOfBlockAreaNodeListTest)
 
 TEST (ExplorerTest, checkNodeHadBlockTest)
 
 TEST (ExplorerTest, searchRouteFrom0To1Test)
 
 TEST (ExplorerTest, searchRouteFrom1To0Test)
 
 TEST (ExplorerTest, searchRouteFrom8To9Test)
 
 TEST (ExplorerTest, searchRouteFrom11To10Test)
 
 TEST (ExplorerTest, searchRouteFrom0To2Test)
 
 TEST (ExplorerTest, searchRouteFrom2To0Test)
 
 TEST (ExplorerTest, searchShortestRouteFrom11To5Test)
 
 TEST (ExplorerTest, searchRouteFrom11To5Circumventing6Test)
 
 TEST (ExplorerTest, searchRouteFrom11To5Circumventing6And10Test)
 
 TEST (ExplorerTest, searchRouteFrom13To6Circumventing10Test)
 
 TEST (ExplorerTest, searchRouteFrom11To5Circumventing6And9And10Test)
 
 TEST (ExplorerTest, searchRouteInSenarioTest)
 
 TEST (FirstCodeTest, get0WhenNoneUpAndDownAnyDigit)
 
 TEST (FirstCodeTest, get10000WhenOnceUp5thDigit)
 
 TEST (FirstCodeTest, get1000WhenOnceUp4thDigit)
 
 TEST (FirstCodeTest, get100WhenOnceUp3rdDigit)
 
 TEST (FirstCodeTest, get10WhenOnceUp2ndDigit)
 
 TEST (FirstCodeTest, get1WhenOnceUp1stDigit)
 
 TEST (FirstCodeTest, get0When10thUp5thDigit)
 
 TEST (FirstCodeTest, get0WhenOnceUpAndDown1stDigita)
 
 TEST (FirstCodeTest, get90000WhenOnceDown5thDigit)
 
 TEST (FirstCodeTest, get0When10thDown5thDigit)
 
 TEST (FirstCodeTest, get12345WhenOnceDown5thDigit)
 
 TEST (FirstCodeTest, get5WhenDoNotChangeLeftAndRightAnyDigitNumber)
 
 TEST (FirstCodeTest, get4WhenOnceChangeRightDigitNumber)
 
 TEST (FirstCodeTest, get5When5thChangeRightDigitNumber)
 
 TEST (FirstCodeTest, get5WhenOnceChangeLeftDigitNumberAfterTwiceChangeRightDigitNumber)
 
 TEST (FirstCodeTest, get1WhenOnceChangeLeftDigitNumber)
 
 TEST (InitialPositionCodeDecoderTest, getInitialPositionCodeListTest1)
 
 TEST (InitialPositionCodeDecoderTest, getInitialPositionPowerBlockCodeTest1)
 
 TEST (InitialPositionCodeDecoderTest, returnInitialPositionCodeListByNegativeIntegerTest)
 
 TEST (InitialPositionCodeDecoderTest, decodePowerBlockCodeTest1)
 
 TEST (InitialPositionCodeDecoderTest, decodeFirstColorBlockOfCodeTest1)
 
 TEST (InitialPositionCodeDecoderTest, decodeSecondColorBlockOfCodeTest1)
 
 TEST (InitialPositionCodeDecoderTest, decodeThirdColorBlockOfCodeTest1)
 
 TEST (InitialPositionCodeDecoderTest, decodeFourthColorBlockOfCodeTest1)
 
 TEST (InitialPositionCodeDecoderTest, decodeRandomCodeTest)
 
 TEST_F (LeftCourseTest, runTest)
 
 TEST (LeftNormalCourseTest, CreateTest)
 
 TEST_F (LifterTest, setDefaultCountTest)
 
 TEST_F (LifterTest, getCurrentAngleTest1)
 
 TEST_F (LifterTest, getCurrentAngleTest2)
 
 TEST_F (LifterTest, limitPwmTest1)
 
 TEST_F (LifterTest, limitPwmTest2)
 
 TEST_F (LifterTest, limitPwmTest3)
 
 TEST_F (LifterTest, limitPwmTest4)
 
 TEST_F (LifterTest, liftUpTest1)
 
 TEST_F (LifterTest, liftUpTest2)
 
 TEST_F (LifterTest, liftDownTest1)
 
 TEST_F (LifterTest, liftDownTest2)
 
 TEST_F (LifterTest, defaultSetTest1)
 
 TEST_F (LifterTest, defaultSetTest2)
 
 TEST_F (LineTracerWalkerTest, runLineTest)
 
 TEST_F (LineTracerWalkerTest, setForwardTest)
 
 TEST (LPF, sensorTest)
 
 TEST (MotorAngleTest, absoluteAngleMeanTestPositive)
 
 TEST (MotorAngleTest, absoluteAngleMeanTestNegative)
 
 TEST (MotorAngleTest, absoluteAngleMeanTestZero)
 
 TEST (MotorAngleTest, relativeAngleMeanTestPositive)
 
 TEST (MotorAngleTest, relativeAngleMeanNegative)
 
 TEST (MotorAngleTest, relativeAngleMeanZero)
 
 TEST (MotorAngleTest, angularDifferenceTestPositive)
 
 TEST (MotorAngleTest, angularDifferenceTestNegative)
 
 TEST (MotorAngleTest, angularDifferenceTestZero)
 
 TEST (MotorAngleTest, absoluteValueOfAngleTest)
 
 TEST (NavigatorTest, resetTest)
 
 TEST (NodeTest, getInitialValueOfNodeIDTest)
 
 TEST (NodeTest, getInitialValueOfBlockExistsTest)
 
 TEST (NodeTest, getInitialValueOfPositionTest)
 
 TEST (NodeTest, getValueOfNodeIDTest)
 
 TEST (NodeTest, initializeValueOfNodeIDTest)
 
 TEST (NodeTest, getValueOfBlockExistsTest)
 
 TEST (NodeTest, getValueOfPositionTest)
 
 TEST (NodeTest, getValueOfNeighborListTest)
 
 TEST (NodeTest, getValueOf3NeighborListTest)
 
 TEST (NodeTest, getValueOfNeighborListOf3x3Test)
 
 TEST (NodeTest, getValueOfNeighborListOf4x4Test)
 
 TEST (NodeTest, getValueOfNeighborListOfETRobocon2018Test)
 
 TEST (NodeTest, getValueOfNeighborListOfETRobocon2017Test)
 
 TEST_F (NormalCourseTest, stopTest)
 
 TEST (PidTest, CalculateTest1)
 
 TEST (detectBarrierTest, CalculateTest2)
 
 TEST (PidTest, limitOutputTest1)
 
 TEST (PidTest, limitOutputTest2)
 
 TEST (PidTest, limitOutputTest3)
 
 TEST (RightNormalCourseTest, CreateTest)
 
 TEST (RightNormalCourseTest, runTest)
 
 TEST (SelectorTest, getBlockPositionListTest)
 
 TEST (SelectorTest, searchRouteByExplorerTest)
 
 TEST (SelectorTest, searchNode8Test)
 
 TEST (SelectorTest, searchNode9Test)
 
 TEST (SelectorTest, searchNode1Test)
 
 TEST (SelectorTest, searchNode10Test)
 
 TEST (SelectorTest, searchNode6Test)
 
 TEST (SelectorTest, searchNode0Test)
 
 TEST (SelectorTest, checkWhetherThereIsMovedBlock)
 
 TEST (SelectorTest, checkNextOperationIsAllFalseInInitialStageTest)
 
 TEST (SelectorTest, checkNextOperationIsAllFalseWithoutSetNextWhenNextIsSetTest)
 
 TEST (SelectorTest, checkThereAreNotNodeInInitialRouteTest)
 
 TEST (SelectorTest, getSomeNodeInRouteWhenRouteIsSetTest)
 
 TEST (SelectorTest, getNextPositionInCenterIfColorSetInNodeIDTest)
 
 TEST (SelectorTest, checkPushingAndPoppingByPseudoStackTest)
 
 TEST (SelectorTest, searchNodeInSenarioTest)
 
 TEST (SelectorTest, searchRouteInSenarioTest)
 
 TEST (SelectorTest, searchRouteWhenPathBlocked)
 
 TEST (SelectorTest, searchRouteWhenNextMovedPositionIsBuried)
 
 TEST (SelectorTest, searchRouteWhenNextOfNextOfNextMovedPositionIsBuried)
 
 TEST (SelectorTest, searchRouteWhenEachNextMovedPositionsIsLooped)
 
 TEST (SelectorTest, searchRouteWhenAllNodeInitialPositionsIsFromCenterQuadirilateralTest)
 
void straight (SelfLocalization &sl, int kyori, int &l, int &r)
 
void curve (SelfLocalization &sl, float sub_degree, int &l, int &r)
 
 TEST (SelfLocalizationTest, CalculateTest1)
 
 TEST (SelfLocalizationTest, calculateBetweenEv3AndBorder1)
 
 TEST (SelfLocalizationTest, calculateBetweenEv3AndBorder2)
 
 TEST (SelfLocalizationTest, calculateBetweenEv3AndBorder3)
 
 TEST (SelfLocalizationTest, calculateBetweenEv3AndBorder4)
 
 TEST (SelfLocalizationTest, calculateBetweenEv3AndBorder5)
 
 TEST (SelfLocalizationTest, calculateCurrentAngleTest1)
 
 TEST (SelfLocalizationTest, calculateCurrentAngleTest2)
 
 TEST (SelfLocalizationTest, calculateCurrentAngleTest3)
 
 TEST (SelfLocalizationTest, isOverNormalVectorTest1)
 
 TEST (SelfLocalizationTest, isOverNormalVectorTest2)
 
 TEST (SelfLocalizationTest, isOverNormalVectorTest3)
 
 TEST (SelfLocalizationTest, isOverNormalVectorTest4)
 
 TEST (SpeedControlTest, calculateSpeedForPidTest1)
 
 TEST (SpeedControlTest, calculateSpeedForPidTest2)
 
 TEST (SpeedControlTest, calcDistance4msTest1)
 
 TEST (TurnControlTest, CreateTest)
 
 TEST_F (UserInterfaceTest, setBrightnessWithColorTest)
 
 TEST_F (UserInterfaceTest, setBrightnessTest)
 
 TEST (WalkerTest, CreateTest)
 
 TEST (CoordinateTest, updateTest)
 
 TEST (CoordinateTest, updateTest2)
 
 TEST (CoordinateTest, resetTest)
 
 TEST (WheelOdometryTest, velocityTest)
 
 TEST (WheelOdometryTest, velocityTestHuge)
 
 TEST (WheelOdometryTest, angularVelocityTest)
 
 TEST (WheelOdometryTest, resetTest)
 
 TEST (WheelOdometryTest, updateTest)
 
 TEST (WheelOdometryTest, updateCoordinateTest)
 
 TEST (WheelOdometryTest, getRotationAngleTest)
 
 TEST (WheelOdometryTest, getCoordinateTest)
 
 TEST (WheelOdometryTest, getPointXTest)
 
 TEST (WheelOdometryTest, getPointYTest)
 

詳解

SelfLocalizationTest.cpp

DistinguisherTest.cpp

ExplorerTest.cpp

FirstCodeTest.cpp

InitialPositionCodeDecoderTest.cpp

LifterTest.cpp

NodeTest.cpp

PidTest.cpp

SelectorTest.cpp

SpeedControlTest.cpp

関数詳解

void etrobocon2018_test::curve ( SelfLocalization sl,
float  sub_degree,
int &  l,
int &  r 
)

SelfLocalizationTest.cpp24 行目に定義があります。

25  {
26  int angle_one = -3;
27  if(sub_degree < 0) angle_one = 3;
28  sub_degree = sub_degree / 90;
29  for(int i = 0; i < 120 * std::abs(sub_degree); i++) {
30  l += angle_one;
31  sl.update(l, r);
32  }
33  }
void update(std::int32_t left_motor_sl, std::int32_t right_motor_sl)

呼び出し関係図:

被呼び出し関係図:

void etrobocon2018_test::straight ( SelfLocalization sl,
int  kyori,
int &  l,
int &  r 
)

SelfLocalizationTest.cpp15 行目に定義があります。

16  {
17  for(int i = 0; i < kyori; i++) {
18  l += 10;
19  r += 10;
20  sl.update(l, r);
21  }
22  }
void update(std::int32_t left_motor_sl, std::int32_t right_motor_sl)

呼び出し関係図:

被呼び出し関係図:

etrobocon2018_test::TEST ( MotorAngleTest  ,
absoluteAngleMeanTestPositive   
)

MotorAngleTest.cpp8 行目に定義があります。

9  {
10  MotorAngle angle;
11  std::int32_t left = 10;
12  std::int32_t right = 20;
13 
14  float mean = (left + right) / 2.0f;
15  ASSERT_FLOAT_EQ(mean, angle.absoluteAngleMean(left, right));
16  }
float absoluteAngleMean(std::int32_t left_motor, std::int32_t right_motor)
左右モータの絶対角度の平均値を計算する
Definition: MotorAngle.cpp:39

呼び出し関係図:

etrobocon2018_test::TEST ( CoordinateTest  ,
updateTest   
)

WheelOdometryTest.cpp9 行目に定義があります。

10  {
11  Coordinate coordinate;
12  coordinate.update(10.0f, 5.0f);
13  ASSERT_FLOAT_EQ(5.0f / 2.0f, coordinate.arg);
14  ASSERT_FLOAT_EQ(10.0f, coordinate.radius);
15  ASSERT_FLOAT_EQ(10.0f * std::cos(5.0f / 2.0f), coordinate.x);
16  ASSERT_FLOAT_EQ(10.0f * std::sin(5.0f / 2.0f), coordinate.y);
17  }
float radius
Definition: WheelOdometry.h:17
void update(float distance, float angle)
走行体の位置情報を更新する
走行体の位置情報をまとめた構造体
Definition: WheelOdometry.h:16

呼び出し関係図:

etrobocon2018_test::TEST ( NavigatorTest  ,
resetTest   
)

NavigatorTest.cpp9 行目に定義があります。

10  {
11  Navigator navigator;
12  navigator.move(10);
13  }
void move(float distance, std::int8_t pwm=20)
指定した距離まで走行体を移動させる
Definition: Navigator.cpp:48

呼び出し関係図:

etrobocon2018_test::TEST ( AIAnswerArrayTest  ,
construct   
)

AIAnswerArrayTest.cpp10 行目に定義があります。

11  {
13  }
etrobocon2018_test::TEST ( ExplorerTest  ,
getInitialValueOfBlockAreaNodeListTest   
)

ExplorerTest.cpp11 行目に定義があります。

12  {
13  Explorer obj;
14 
15  auto actual = obj.getBlockAreaNodeList();
16 
17  ASSERT_EQ(nullptr, actual);
18  }
std::vector< Node * > * getBlockAreaNodeList()
Definition: Explorer.cpp:136

呼び出し関係図:

etrobocon2018_test::TEST ( LPF  ,
sensorTest   
)

LPFTest.cpp11 行目に定義があります。

12  {
13  LPF filter;
14  std::int32_t sensor = 24; // This is 適当
15 
16  // 前回のセンサ値がない場合は、入力値をそのまま返す
17  ASSERT_EQ(static_cast<float>(sensor), filter.sensor(sensor));
18 
19  // フィルタ処理
20 <<<<<<< HEAD
21  std::int32_t current_sensor = 77; // This is 適当
22  float expected = 0.9 * sensor + 0.1 * current_sensor;
23 =======
24  std::uint8_t current_sensor = 77; // This is 適当
25  std::uint8_t expected = 0.9 * sensor + 0.1 * current_sensor;
26 >>>>>>> 751b48e58956ffd3ea049220ab92d433957e4fe9
27  ASSERT_EQ(expected, filter.sensor(current_sensor));
28  }
float sensor(std::int32_t current_sensor)
現在のセンサ値にフィルタ処理を実行する
Definition: LPF.cpp:9
LPF(Low-Pass Filter)をまとめたクラス
Definition: LPF.h:14

呼び出し関係図:

etrobocon2018_test::TEST ( NodeTest  ,
getInitialValueOfNodeIDTest   
)

NodeTest.cpp11 行目に定義があります。

12  {
13  Node obj;
14  std::int8_t expected = 0;
15 
16  auto actual = obj.getNodeID();
17 
18  ASSERT_EQ(expected, actual);
19  }
Definition: Node.h:142
std::int8_t getNodeID()
Definition: Node.cpp:18

呼び出し関係図:

etrobocon2018_test::TEST ( SelectorTest  ,
getBlockPositionListTest   
)

SelectorTest.cpp11 行目に定義があります。

12  {
13  Selector obj;
14  std::vector<std::int8_t> expected{ { 0, 1, 2, 3 } };
15 
16  obj.setBlockPositionList(expected);
17  auto actual = obj.getBlockPositionList();
18 
19  ASSERT_EQ(expected, actual);
20  }
std::vector< std::int8_t > getBlockPositionList()
Definition: Selector.cpp:203
void setBlockPositionList(std::vector< std::int8_t > list)
Definition: Selector.cpp:196
ブロック選択クラス
Definition: Selector.h:113

呼び出し関係図:

etrobocon2018_test::TEST ( AIAnswerArrayTest  ,
constructSpecifiedSize   
)

AIAnswerArrayTest.cpp15 行目に定義があります。

16  {
18  }
etrobocon2018_test::TEST ( LeftNormalCourseTest  ,
CreateTest   
)

LeftNormalCourseTest.cpp15 行目に定義があります。

etrobocon2018_test::TEST ( TurnControlTest  ,
CreateTest   
)

TurnControlTest.cpp15 行目に定義があります。

15 { TurnControl tc; }
etrobocon2018_test::TEST ( WalkerTest  ,
CreateTest   
)

WalkerTest.cpp15 行目に定義があります。

15 { Walker walker; }
Definition: Walker.h:7
etrobocon2018_test::TEST ( DistanceTest  ,
getDistanceTotalTest1   
)

DistanceTest.cpp15 行目に定義があります。

16  {
17  Distance ds;
18  int l, r;
19 
20  l = 10;
21  r = 20;
22 
23  ASSERT_EQ(ds.getDistanceTotal(l, r), (l + r) / 2);
24  }
etrobocon2018_test::TEST ( EtRobocon2018Test  ,
CreateTest   
)

EtRobocon2018Test.cpp15 行目に定義があります。

16  {
17  EtRobocon2018 et;
18  // et.start(1);
19  }
etrobocon2018_test::TEST ( RightNormalCourseTest  ,
CreateTest   
)

RightNormalCourseTest.cpp15 行目に定義があります。

etrobocon2018_test::TEST ( SpeedControlTest  ,
calculateSpeedForPidTest1   
)

SpeedControlTest.cpp16 行目に定義があります。

17  {
18  SpeedControl sp;
19  int value;
20 
21  sp.setPid(2.0, 4.8, 0.024, 150.0);
22  value = sp.calculateSpeedForPid(0, 0);
23 
24  ASSERT_LE(value, 100);
25  }
std::int32_t calculateSpeedForPid(std::int32_t curAngleL, std::int32_t curAngleR)
void setPid(double p_gain_, double i_gain_, double d_gain_, double target_)
Definition: Pid.cpp:40
PID制御による速度制御クラス
Definition: SpeedControl.h:18

呼び出し関係図:

etrobocon2018_test::TEST ( FirstCodeTest  ,
get0WhenNoneUpAndDownAnyDigit   
)

FirstCodeTest.cpp16 行目に定義があります。

17  {
18  FirstCode obj;
19 
20  int expected = obj.getFirstCode();
21 
22  ASSERT_EQ(expected, 0);
23  }
int32_t getFirstCode()
Definition: FirstCode.cpp:41
初期位置コードクラス
Definition: FirstCode.h:14

呼び出し関係図:

etrobocon2018_test::TEST ( ColorBlockTest  ,
createColorBlock   
)

BlockAreaTest.cpp17 行目に定義があります。

18  {
19  ColorBlock block{};
20  block.color = GameColor::RED;
21 
22  ASSERT_EQ(block.color, GameColor::RED);
23  }
etrobocon2018_test::TEST ( RightNormalCourseTest  ,
runTest   
)

RightNormalCourseTest.cpp17 行目に定義があります。

18  {
20  for(int i = 0; i < 13000; i++) {
21  rnc.statusCheck(i, i);
22  rnc.runNormalCourse(30, 30, 30, 30);
23  }
24  }
bool statusCheck(int32_t countL, int32_t countR)
bool runNormalCourse(int16_t target_brightness, int16_t black, int16_t white, int16_t gray)

呼び出し関係図:

etrobocon2018_test::TEST ( InitialPositionCodeDecoderTest  ,
getInitialPositionCodeListTest1   
)

InitialPositionCodeDecoderTest.cpp17 行目に定義があります。

18  {
20  std::vector<std::int8_t> expected = {0, 0, 0, 0};
21 
22  auto actual = obj.getInitialPositionCodeList();
23 
24  ASSERT_EQ(expected, actual);
25  }
std::vector< std::int8_t > getInitialPositionCodeList()

呼び出し関係図:

etrobocon2018_test::TEST ( MotorAngleTest  ,
absoluteAngleMeanTestNegative   
)

MotorAngleTest.cpp18 行目に定義があります。

19  {
20  MotorAngle angle;
21  std::int32_t left = -10;
22  std::int32_t right = 30;
23 
24  float mean = (left + right) / 2.0f;
25  ASSERT_FLOAT_EQ(mean, angle.absoluteAngleMean(left, right));
26 
27  left = 20;
28  right = -50;
29  mean = (left + right) / 2.0f;
30  ASSERT_FLOAT_EQ(mean, angle.absoluteAngleMean(left, right));
31  }
float absoluteAngleMean(std::int32_t left_motor, std::int32_t right_motor)
左右モータの絶対角度の平均値を計算する
Definition: MotorAngle.cpp:39

呼び出し関係図:

etrobocon2018_test::TEST ( CoordinateTest  ,
updateTest2   
)

WheelOdometryTest.cpp19 行目に定義があります。

20  {
21  Coordinate coordinate;
22  coordinate.update(10.0f, 5.0f);
23  float radius = 10.0f + 5.0f;
24  float arg = 5.0f / 2.0f + 10.0f / 2.0f;
25  float x = 10.0f * std::cos(5.0f / 2.0f);
26  float y = 10.0f * std::sin(5.0f / 2.0f);
27  ASSERT_FLOAT_EQ(x, coordinate.x);
28  ASSERT_FLOAT_EQ(y, coordinate.y);
29 
30  coordinate.update(5.0f, 10.0f);
31  ASSERT_FLOAT_EQ(arg, coordinate.arg);
32  ASSERT_FLOAT_EQ(radius, coordinate.radius);
33  ASSERT_FLOAT_EQ(5.0f * std::cos(arg) + x, coordinate.x);
34  ASSERT_FLOAT_EQ(5.0f * std::sin(arg) + y, coordinate.y);
35  }
float radius
Definition: WheelOdometry.h:17
void update(float distance, float angle)
走行体の位置情報を更新する
走行体の位置情報をまとめた構造体
Definition: WheelOdometry.h:16

呼び出し関係図:

etrobocon2018_test::TEST ( AIAnswerArrayTest  ,
constructSpecifiedType   
)

AIAnswerArrayTest.cpp20 行目に定義があります。

etrobocon2018_test::TEST ( ExplorerTest  ,
getValueOfBlockAreaNodeListTest   
)

ExplorerTest.cpp21 行目に定義があります。

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  }
Definition: Node.h:142
void createBlockArea()
Definition: Explorer.cpp:3
std::vector< Node * > * getBlockAreaNodeList()
Definition: Explorer.cpp:136

呼び出し関係図:

etrobocon2018_test::TEST ( NodeTest  ,
getInitialValueOfBlockExistsTest   
)

NodeTest.cpp22 行目に定義があります。

23  {
24  Node obj;
25 
26  auto actual = obj.hasBlock();
27 
28  ASSERT_FALSE(actual);
29  }
Definition: Node.h:142
bool hasBlock()
Definition: Node.cpp:28

呼び出し関係図:

etrobocon2018_test::TEST ( SelectorTest  ,
searchRouteByExplorerTest   
)

SelectorTest.cpp23 行目に定義があります。

24  {
25  Selector obj;
26  std::vector<int> expected{ { 11, 7, 3, 2, 1, 5 } };
27  std::vector<std::int8_t> nodeHadBlockList{{6, 9, 10}};
28 
29 
30  obj.prepareSearching(nodeHadBlockList);
31  auto actual = obj.searchRoute(11, 5);
32 
33  for(unsigned int i = 0; i < actual.size(); i++) {
34  EXPECT_EQ(actual[i], expected[i]);
35  }
36 
37  ASSERT_EQ(expected.size(), actual.size());
38  }
void prepareSearching(std::vector< std::int8_t > list)
Definition: Selector.cpp:233
std::vector< int > searchRoute(std::int8_t start, std::int8_t end)
Definition: Selector.cpp:242
ブロック選択クラス
Definition: Selector.h:113

呼び出し関係図:

etrobocon2018_test::TEST ( PidTest  ,
CalculateTest1   
)

PidTest.cpp24 行目に定義があります。

25  {
26  TEST_CLASS pid;
27 
28  // コンストラクタの引数targetに30を入れる
29  pid.setPid(0.5, 0.5, 0.5, 30.0);
30  // calculateにtarget以下の値を入力する
31  pid.calculate(20.0);
32  // アウトプットは負の数になる
33  ASSERT_LT(pid.get_output(), 0.0);
34  }

呼び出し関係図:

etrobocon2018_test::TEST ( ColorBlockPlaceTest  ,
createColorBlockPlace   
)

BlockAreaTest.cpp25 行目に定義があります。

26  {
27  ColorBlockPlace blockPlace00(GameColor::RED, 0);
28  ASSERT_EQ(blockPlace00.getPlaceCord(), 0);
29  ASSERT_EQ(blockPlace00.getColor(), GameColor::RED);
30  }

呼び出し関係図:

etrobocon2018_test::TEST ( AIAnswerArrayTest  ,
sizeTest   
)

AIAnswerArrayTest.cpp26 行目に定義があります。

27  {
29  ASSERT_EQ(6, array.size());
30 
32  ASSERT_EQ(1, list.size());
33  }
constexpr std::uint8_t size() noexcept
配列のサイズを返す
Definition: AIAnswerArray.h:25

呼び出し関係図:

etrobocon2018_test::TEST ( FirstCodeTest  ,
get10000WhenOnceUp5thDigit   
)

FirstCodeTest.cpp26 行目に定義があります。

27  {
28  FirstCode obj;
29 
30  obj.upDigit(5);
31  int expected = obj.getFirstCode();
32 
33  ASSERT_EQ(expected, 10000);
34  }
void upDigit(int8_t)
Definition: FirstCode.cpp:19
int32_t getFirstCode()
Definition: FirstCode.cpp:41
初期位置コードクラス
Definition: FirstCode.h:14

呼び出し関係図:

etrobocon2018_test::TEST ( DistanceTest  ,
getDistanceCurrentTest1   
)

DistanceTest.cpp26 行目に定義があります。

27  {
28  Distance ds;
29  int l, r, step_l, step_r;
30 
31  l = 10;
32  r = 20;
33  ds.getDistanceTotal(l, r);
34  ds.resetDistance(l, r);
35  step_l = 20;
36  step_r = 10;
37 
38  ASSERT_EQ(ds.getDistanceCurrent(l + step_l, r + step_r), (step_l + step_r) / 2);
39  }
etrobocon2018_test::TEST ( InitialPositionCodeDecoderTest  ,
getInitialPositionPowerBlockCodeTest1   
)

InitialPositionCodeDecoderTest.cpp28 行目に定義があります。

29  {
31  int8_t expected = 0;
32 
33  auto actual = obj.getInitialPositionPowerBlockCode();
34 
35  ASSERT_EQ(expected, actual);
36  }

呼び出し関係図:

etrobocon2018_test::TEST ( SpeedControlTest  ,
calculateSpeedForPidTest2   
)

SpeedControlTest.cpp28 行目に定義があります。

29  {
30  SpeedControl sp;
31  int value, r, l;
32  r = l = 0;
33  sp.setPid(2.0, 4.8, 0.024, 150.0);
34  for(int i = 0; i < 25; i++) {
35  if(i == 24) {
36  r = l += 10000;
37  }
38  value = sp.calculateSpeedForPid(r, l);
39  l = r += i * 10;
40  }
41 
42  ASSERT_GE(value, -100);
43  }
std::int32_t calculateSpeedForPid(std::int32_t curAngleL, std::int32_t curAngleR)
void setPid(double p_gain_, double i_gain_, double d_gain_, double target_)
Definition: Pid.cpp:40
PID制御による速度制御クラス
Definition: SpeedControl.h:18

呼び出し関係図:

etrobocon2018_test::TEST ( BlockSolverTest  ,
getChangeDirection   
)

BlockSolverTest.cpp31 行目に定義があります。

32  {
33  Controller controller;
34  Walker walker{ controller };
35  BlockSolver blockSolver{ controller, walker, 01233, 40 };
36  ASSERT_EQ(static_cast<int>(blockSolver.nowDirection), 2);
37  blockSolver.nowDirection = blockSolver.getChangeDirection(1);
38  ASSERT_EQ(static_cast<int>(blockSolver.nowDirection), 3);
39  blockSolver.nowDirection = blockSolver.getChangeDirection(1);
40  ASSERT_EQ(static_cast<int>(blockSolver.nowDirection), 0);
41  blockSolver.nowDirection = blockSolver.getChangeDirection(-1);
42  ASSERT_EQ(static_cast<int>(blockSolver.nowDirection), 3);
43  blockSolver.nowDirection = blockSolver.getChangeDirection(-1);
44  ASSERT_EQ(static_cast<int>(blockSolver.nowDirection), 2);
45  blockSolver.nowDirection = blockSolver.getChangeDirection(-1);
46  ASSERT_EQ(static_cast<int>(blockSolver.nowDirection), 1);
47  blockSolver.nowDirection = blockSolver.getChangeDirection(2);
48  ASSERT_EQ(static_cast<int>(blockSolver.nowDirection), 3);
49  }
Definition: Walker.h:7
etrobocon2018_test::TEST ( NodeTest  ,
getInitialValueOfPositionTest   
)

NodeTest.cpp32 行目に定義があります。

33  {
34  Node obj;
35  std::int8_t expectedX = 0;
36  std::int8_t expectedY = 0;
37 
38  auto actualX = obj.getPositionX();
39  auto actualY = obj.getPositionY();
40 
41  ASSERT_EQ(expectedX, actualX);
42  ASSERT_EQ(expectedY, actualY);
43  }
std::int8_t getPositionX()
Definition: Node.cpp:39
Definition: Node.h:142
std::int8_t getPositionY()
Definition: Node.cpp:44

呼び出し関係図:

etrobocon2018_test::TEST ( ColorBlockPlaceTest  ,
setColorBlock   
)

BlockAreaTest.cpp32 行目に定義があります。

33  {
34  std::shared_ptr<ColorBlock> colorBlock0 = std::make_shared<ColorBlock>();
35  ColorBlockPlace blockPlace00(GameColor::RED, 0);
36  blockPlace00.block = colorBlock0;
37  ASSERT_EQ(blockPlace00.block->color, GameColor::UNKNOWN);
38  blockPlace00.block->color = GameColor::BLUE;
39  ASSERT_EQ(blockPlace00.block->color, GameColor::BLUE);
40  }
etrobocon2018_test::TEST ( MotorAngleTest  ,
absoluteAngleMeanTestZero   
)

MotorAngleTest.cpp33 行目に定義があります。

34  {
35  MotorAngle angle;
36  std::int32_t left = 0;
37  std::int32_t right = 0;
38 
39  float mean = (left + right) / 2.0f;
40  ASSERT_FLOAT_EQ(mean, angle.absoluteAngleMean(left, right));
41  }
float absoluteAngleMean(std::int32_t left_motor, std::int32_t right_motor)
左右モータの絶対角度の平均値を計算する
Definition: MotorAngle.cpp:39

呼び出し関係図:

etrobocon2018_test::TEST ( SelfLocalizationTest  ,
CalculateTest1   
)

SelfLocalizationTest.cpp35 行目に定義があります。

36  {
37  SelfLocalization sl(0, 0, false);
38 
39  sl.update(100, 200);
40 
41  ASSERT_GE(sl.getPointX(), 10.0);
42  ASSERT_GE(sl.getPointY(), 2.0);
43  }

呼び出し関係図:

etrobocon2018_test::TEST ( AIAnswerArrayTest  ,
positionTest   
)

AIAnswerArrayTest.cpp35 行目に定義があります。

36  {
38  ASSERT_EQ(0, array.position());
39 
40  array.push_back(1);
41  ASSERT_EQ(1, array.position());
42 
43  array.push_back(20);
44  ASSERT_EQ(2, array.position());
45  }
constexpr std::uint8_t position() noexcept
配列の要素を指し示すポインタを返す
Definition: AIAnswerArray.h:28
void push_back(const T &value) noexcept
配列の要素を入れる
Definition: AIAnswerArray.h:38

呼び出し関係図:

etrobocon2018_test::TEST ( CoordinateTest  ,
resetTest   
)

WheelOdometryTest.cpp37 行目に定義があります。

38  {
39  Coordinate coordinate;
40  coordinate.update(10.0, 5.0);
41  coordinate.reset();
42  ASSERT_FLOAT_EQ(0.0, coordinate.arg);
43  ASSERT_FLOAT_EQ(0.0, coordinate.radius);
44  ASSERT_FLOAT_EQ(0.0, coordinate.x);
45  ASSERT_FLOAT_EQ(0.0, coordinate.y);
46  }
float radius
Definition: WheelOdometry.h:17
void reset()
走行体の位置情報を初期化する
void update(float distance, float angle)
走行体の位置情報を更新する
走行体の位置情報をまとめた構造体
Definition: WheelOdometry.h:16

呼び出し関係図:

etrobocon2018_test::TEST ( FirstCodeTest  ,
get1000WhenOnceUp4thDigit   
)

FirstCodeTest.cpp37 行目に定義があります。

38  {
39  FirstCode obj;
40 
41  obj.upDigit(4);
42  int expected = obj.getFirstCode();
43 
44  ASSERT_EQ(expected, 1000);
45  }
void upDigit(int8_t)
Definition: FirstCode.cpp:19
int32_t getFirstCode()
Definition: FirstCode.cpp:41
初期位置コードクラス
Definition: FirstCode.h:14

呼び出し関係図:

etrobocon2018_test::TEST ( detectBarrierTest  ,
CalculateTest2   
)

PidTest.cpp37 行目に定義があります。

38  {
39  TEST_CLASS pid;
40 
41  // コンストラクタの引数targetに30を入れる
42  pid.setPid(0.5, 0.5, 0.5, 30.0);
43  // calculateにtarget以下の値を入力する
44  pid.calculate(50.0);
45  // アウトプットは正の数になる
46  ASSERT_GT(pid.get_output(), 0.0);
47  }

呼び出し関係図:

etrobocon2018_test::TEST ( InitialPositionCodeDecoderTest  ,
returnInitialPositionCodeListByNegativeIntegerTest   
)

InitialPositionCodeDecoderTest.cpp39 行目に定義があります。

40  {
42  std::vector<std::int8_t> expected = {0, 0, 0, 0};
43 
44  obj.decode(-1);
45  auto actual = obj.getInitialPositionCodeList();
46 
47  ASSERT_EQ(expected, actual);
48  }
std::vector< std::int8_t > getInitialPositionCodeList()

呼び出し関係図:

etrobocon2018_test::TEST ( DistanceTest  ,
getDistanceCurrentTest2   
)

DistanceTest.cpp41 行目に定義があります。

42  {
43  Distance ds;
44  int l, r;
45 
46  l = 100;
47  r = 200;
48  ds.getDistanceTotal(l, r);
49  ds.resetDistance(l, r);
50 
51  ASSERT_EQ(ds.getDistanceTotal(l, r), (l + r) / 2);
52  }
etrobocon2018_test::TEST ( SelectorTest  ,
searchNode8Test   
)

SelectorTest.cpp41 行目に定義があります。

42  {
43  Selector obj;
44  std::vector<std::int8_t> blockList{ { 0, 1, 2, 8 } };
45  std::int8_t expected = 8;
46 
47  obj.setBlockPositionList(blockList);
48  auto actual = obj.searchBlockPosition(8);
49 
50  ASSERT_EQ(expected, actual);
51  }
void setBlockPositionList(std::vector< std::int8_t > list)
Definition: Selector.cpp:196
ブロック選択クラス
Definition: Selector.h:113
std::int8_t searchBlockPosition(std::int8_t currentPosition)
Definition: Selector.cpp:118

呼び出し関係図:

etrobocon2018_test::TEST ( ColorBlockPlaceTest  ,
connectColorBlockPlace   
)

BlockAreaTest.cpp42 行目に定義があります。

43  {
44  std::shared_ptr<ColorBlockPlace> blockPlace00
45  = std::make_shared<ColorBlockPlace>(GameColor::RED, 0);
46  std::shared_ptr<ColorBlockPlace> blockPlace01
47  = std::make_shared<ColorBlockPlace>(GameColor::YELLOW, 1);
48 
49  blockPlace00->black_line[Direction::NORTH] = blockPlace01;
50  blockPlace01->black_line[Direction::SOUTH] = blockPlace00;
51  ASSERT_EQ(blockPlace00->black_line[Direction::NORTH]->getColor(), GameColor::YELLOW);
52  ASSERT_EQ(blockPlace01->black_line[Direction::SOUTH]->getColor(), GameColor::RED);
53  }
etrobocon2018_test::TEST ( MotorAngleTest  ,
relativeAngleMeanTestPositive   
)

MotorAngleTest.cpp43 行目に定義があります。

44  {
45  MotorAngle angle;
46  std::int32_t left = 10;
47  std::int32_t right = 10;
48  float mean = (left + right) / 2.0f;
49 
50  ASSERT_FLOAT_EQ(mean, angle.relativeAngleMean(left, right));
51 
52  std::int32_t left2 = 20;
53  std::int32_t right2 = 30;
54  float mean2 = ((left2 - left) + (right2 - right)) / 2.0f;
55 
56  ASSERT_FLOAT_EQ(mean2, angle.relativeAngleMean(left2, right2));
57  }
float relativeAngleMean(std::int32_t current_left_motor, std::int32_t current_right_motor)
左右モータの相対角度の平均値を計算する
Definition: MotorAngle.cpp:51

呼び出し関係図:

etrobocon2018_test::TEST ( SelfLocalizationTest  ,
calculateBetweenEv3AndBorder1   
)

SelfLocalizationTest.cpp45 行目に定義があります。

46  {
47  SelfLocalization sl(0, 0, true);
48  float distance = sl.calculate_between_ev3_and_border(0.0, 0.0, 10.0, 10.0, 0.0, 0.0);
49  ASSERT_FLOAT_EQ(distance, 0.0);
50  }

呼び出し関係図:

etrobocon2018_test::TEST ( NodeTest  ,
getValueOfNodeIDTest   
)

NodeTest.cpp46 行目に定義があります。

47  {
48  Node obj;
49  std::int8_t expected = 10;
50 
51  obj.setNodeID(10);
52  auto actual = obj.getNodeID();
53 
54  ASSERT_EQ(expected, actual);
55  }
void setNodeID(std::int8_t nodeNumber)
Definition: Node.cpp:13
Definition: Node.h:142
std::int8_t getNodeID()
Definition: Node.cpp:18

呼び出し関係図:

etrobocon2018_test::TEST ( AIAnswerArrayTest  ,
atTest   
)

AIAnswerArrayTest.cpp47 行目に定義があります。

48  {
50  ASSERT_EQ(0, array.at(0));
51 
52  array.push_back(100);
53  ASSERT_EQ(100, array.at(0));
54 
55  array.push_back(200);
56  ASSERT_EQ(200, array.at(1));
57  }
constexpr T at(const std::uint8_t i) noexcept
Definition: AIAnswerArray.h:50
void push_back(const T &value) noexcept
配列の要素を入れる
Definition: AIAnswerArray.h:38

呼び出し関係図:

etrobocon2018_test::TEST ( ExplorerTest  ,
checkNodeHadBlockTest   
)

ExplorerTest.cpp48 行目に定義があります。

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  }
void createBlockArea()
Definition: Explorer.cpp:3
bool hasBlock(std::int8_t id)
Definition: Explorer.cpp:50
void setHasBlockIn(std::int8_t blockID)
Definition: Explorer.cpp:44

呼び出し関係図:

etrobocon2018_test::TEST ( WheelOdometryTest  ,
velocityTest   
)

WheelOdometryTest.cpp48 行目に定義があります。

49  {
50  MotorAngle motor_angle;
51  float transform = 3.14f * 99.0f / 2.0f / 180.0f / 0.04f;
52  float angle = motor_angle.relativeAngleMean(5, 5);
53 
54  WheelOdometry odometry;
55  ASSERT_FLOAT_EQ(transform * angle, odometry.velocity(5, 5));
56  }
float relativeAngleMean(std::int32_t current_left_motor, std::int32_t current_right_motor)
左右モータの相対角度の平均値を計算する
Definition: MotorAngle.cpp:51
float velocity(std::int32_t left_motor, std::int32_t right_motor)
走行体の旋回速度を求める

呼び出し関係図:

etrobocon2018_test::TEST ( FirstCodeTest  ,
get100WhenOnceUp3rdDigit   
)

FirstCodeTest.cpp48 行目に定義があります。

49  {
50  FirstCode obj;
51 
52  obj.upDigit(3);
53  int expected = obj.getFirstCode();
54 
55  ASSERT_EQ(expected, 100);
56  }
void upDigit(int8_t)
Definition: FirstCode.cpp:19
int32_t getFirstCode()
Definition: FirstCode.cpp:41
初期位置コードクラス
Definition: FirstCode.h:14

呼び出し関係図:

etrobocon2018_test::TEST ( PidTest  ,
limitOutputTest1   
)

PidTest.cpp50 行目に定義があります。

51  {
52  TEST_CLASS pid;
53 
54  // コンストラクタの引数targetに30を入れる
55  pid.setPid(0.5, 0.5, 0.5, 30.0);
56  // calculateにtarget以上の値を入力する
57  pid.calculate(300.0);
58  // アウトプットは100.0になる
59  double output = pid.limitOutput(pid.get_output());
60  ASSERT_GE(output, 100.0);
61  }

呼び出し関係図:

etrobocon2018_test::TEST ( InitialPositionCodeDecoderTest  ,
decodePowerBlockCodeTest1   
)

InitialPositionCodeDecoderTest.cpp51 行目に定義があります。

52  {
54  std::int32_t codeList = 1;
55  int8_t expected = 1;
56 
57  obj.decode(codeList);
58  auto actual = obj.getInitialPositionPowerBlockCode();
59 
60  ASSERT_EQ(expected, actual);
61  }

呼び出し関係図:

etrobocon2018_test::TEST ( BlockSolverTest  ,
move   
)

BlockSolverTest.cpp51 行目に定義があります。

52  {
53  Controller controller;
54  Walker walker{ controller };
55  BlockSolver blockSolver{ controller, walker, 01233, 40 };
56  blockSolver.moveDirection(9);
57  ASSERT_EQ(static_cast<int>(blockSolver.nowDirection), 2);
58  blockSolver.moveDirection(10);
59  ASSERT_EQ(static_cast<int>(blockSolver.nowDirection), 2);
60  blockSolver.moveDirection(6);
61  ASSERT_EQ(static_cast<int>(blockSolver.nowDirection), 1);
62  blockSolver.moveDirection(5);
63  ASSERT_EQ(static_cast<int>(blockSolver.nowDirection), 0);
64  blockSolver.moveDirection(6);
65  ASSERT_EQ(static_cast<int>(blockSolver.nowDirection), 2);
66  }
Definition: Walker.h:7
etrobocon2018_test::TEST ( SelfLocalizationTest  ,
calculateBetweenEv3AndBorder2   
)

SelfLocalizationTest.cpp52 行目に定義があります。

53  {
54  SelfLocalization sl(0, 0, true);
55  float distance = sl.calculate_between_ev3_and_border(-50.0, 80.0, 127.0, 91.0, -85.0, 70.0);
56  ASSERT_NEAR(distance, 7.809, 0.001);
57  }

呼び出し関係図:

etrobocon2018_test::TEST ( SelectorTest  ,
searchNode9Test   
)

SelectorTest.cpp54 行目に定義があります。

55  {
56  Selector obj;
57  std::vector<std::int8_t> blockList{ { 0, 1, 2, 9 } };
58  std::int8_t expected = 9;
59 
60  obj.setBlockPositionList(blockList);
61  auto actual = obj.searchBlockPosition(8);
62 
63  ASSERT_EQ(expected, actual);
64  }
void setBlockPositionList(std::vector< std::int8_t > list)
Definition: Selector.cpp:196
ブロック選択クラス
Definition: Selector.h:113
std::int8_t searchBlockPosition(std::int8_t currentPosition)
Definition: Selector.cpp:118

呼び出し関係図:

etrobocon2018_test::TEST ( ColorBlockPlaceTest  ,
dynamicCreateColorBlockPlace   
)

BlockAreaTest.cpp55 行目に定義があります。

56  {
57  std::array<GameColor, 16> colorArray{ GameColor::RED, GameColor::YELLOW, GameColor::BLUE,
58  GameColor::GREEN, GameColor::BLUE, GameColor::GREEN,
59  GameColor::RED, GameColor::YELLOW, GameColor::RED,
60  GameColor::YELLOW, GameColor::BLUE, GameColor::GREEN,
61  GameColor::BLUE, GameColor::GREEN, GameColor::RED,
62  GameColor::YELLOW };
63 
64  std::array<std::shared_ptr<ColorBlockPlace>, 16> colorBlockPlaceArray;
65  for(std::int8_t i = 0; i < 16; i++) {
66  std::shared_ptr<ColorBlockPlace> blockPlace
67  = std::make_shared<ColorBlockPlace>(colorArray[i], i);
68  colorBlockPlaceArray[i] = blockPlace;
69  }
70  }
etrobocon2018_test::TEST ( SpeedControlTest  ,
calcDistance4msTest1   
)

SpeedControlTest.cpp56 行目に定義があります。

57  {
58  test_SpeedControl sp;
59  int value;
60  float circle;
61 
62  circle = 2 * 3.14 * 81;
63  value = sp.calcDistance4ms(0, 0);
64  value += sp.calcDistance4ms(90, 90);
65  value += sp.calcDistance4ms(180, 180);
66  value += sp.calcDistance4ms(270, 270);
67  value += sp.calcDistance4ms(360, 360);
68 
69  ASSERT_EQ(value, (int)circle);
70  }

呼び出し関係図:

etrobocon2018_test::TEST ( WheelOdometryTest  ,
velocityTestHuge   
)

WheelOdometryTest.cpp58 行目に定義があります。

59  {
60  MotorAngle motor_angle;
61  float transform = 3.14f * 99.0f / 2.0f / 180.0f / 0.04f;
62  float angle = motor_angle.relativeAngleMean(140, 140);
63 
64  WheelOdometry odometry;
65  ASSERT_FLOAT_EQ(transform * angle, odometry.velocity(140, 140));
66  }
float relativeAngleMean(std::int32_t current_left_motor, std::int32_t current_right_motor)
左右モータの相対角度の平均値を計算する
Definition: MotorAngle.cpp:51
float velocity(std::int32_t left_motor, std::int32_t right_motor)
走行体の旋回速度を求める

呼び出し関係図:

etrobocon2018_test::TEST ( NodeTest  ,
initializeValueOfNodeIDTest   
)

NodeTest.cpp58 行目に定義があります。

59  {
60  std::int8_t expected = 9;
61 
62  Node obj(9);
63  auto actual = obj.getNodeID();
64 
65  ASSERT_EQ(expected, actual);
66  }
Definition: Node.h:142

呼び出し関係図:

etrobocon2018_test::TEST ( SelfLocalizationTest  ,
calculateBetweenEv3AndBorder3   
)

SelfLocalizationTest.cpp59 行目に定義があります。

60  {
61  SelfLocalization sl(0, 0, true);
62  float distance = sl.calculate_between_ev3_and_border(2.0, 1.0, 6.0, 7.0, 3.0, 4.0);
63  ASSERT_NEAR(distance, -0.83205, 0.001);
64  }

呼び出し関係図:

etrobocon2018_test::TEST ( MotorAngleTest  ,
relativeAngleMeanNegative   
)

MotorAngleTest.cpp59 行目に定義があります。

60  {
61  MotorAngle angle;
62  std::int32_t left = -10;
63  std::int32_t right = -20;
64  float mean = (left + right) / 2.0f;
65  ASSERT_FLOAT_EQ(mean, angle.relativeAngleMean(left, right));
66 
67  std::int32_t left2 = -20;
68  std::int32_t right2 = -30;
69  float mean2 = ((left2 - left) + (right2 - right)) / 2.0f;
70 
71  ASSERT_FLOAT_EQ(mean2, angle.relativeAngleMean(left2, right2));
72  }
float relativeAngleMean(std::int32_t current_left_motor, std::int32_t current_right_motor)
左右モータの相対角度の平均値を計算する
Definition: MotorAngle.cpp:51

呼び出し関係図:

etrobocon2018_test::TEST ( FirstCodeTest  ,
get10WhenOnceUp2ndDigit   
)

FirstCodeTest.cpp59 行目に定義があります。

60  {
61  FirstCode obj;
62 
63  obj.upDigit(2);
64  int expected = obj.getFirstCode();
65 
66  ASSERT_EQ(expected, 10);
67  }
void upDigit(int8_t)
Definition: FirstCode.cpp:19
int32_t getFirstCode()
Definition: FirstCode.cpp:41
初期位置コードクラス
Definition: FirstCode.h:14

呼び出し関係図:

etrobocon2018_test::TEST ( AIAnswerArrayTest  ,
atTestDouble   
)

AIAnswerArrayTest.cpp59 行目に定義があります。

60  {
62  ASSERT_DOUBLE_EQ(0.0, array.at(0));
63 
64  array.push_back(1.2);
65  ASSERT_DOUBLE_EQ(1.2, array.at(0));
66  }
constexpr T at(const std::uint8_t i) noexcept
Definition: AIAnswerArray.h:50
void push_back(const T &value) noexcept
配列の要素を入れる
Definition: AIAnswerArray.h:38

呼び出し関係図:

etrobocon2018_test::TEST ( ExplorerTest  ,
searchRouteFrom0To1Test   
)

ExplorerTest.cpp62 行目に定義があります。

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  }
void createBlockArea()
Definition: Explorer.cpp:3
std::vector< Node * > * getBlockAreaNodeList()
Definition: Explorer.cpp:136
std::vector< int > searchRoute(std::int8_t start, std::int8_t end)
Definition: Explorer.cpp:56

呼び出し関係図:

etrobocon2018_test::TEST ( InitialPositionCodeDecoderTest  ,
decodeFirstColorBlockOfCodeTest1   
)

InitialPositionCodeDecoderTest.cpp64 行目に定義があります。

65  {
67  std::int32_t codeList = 65538;
68  std::vector<std::int8_t> expected = {1, 0, 0, 0};
69 
70  obj.decode(codeList);
71  auto actual = obj.getInitialPositionCodeList();
72 
73  ASSERT_EQ(expected.at(0), actual.at(0));
74  }
std::vector< std::int8_t > getInitialPositionCodeList()

呼び出し関係図:

etrobocon2018_test::TEST ( PidTest  ,
limitOutputTest2   
)

PidTest.cpp64 行目に定義があります。

65  {
66  TEST_CLASS pid;
67 
68  // コンストラクタの引数targetに300を入れる
69  pid.setPid(0.5, 0.5, 0.5, 300.0);
70  // calculateにtarget以下の値を入力する
71  pid.calculate(30.0);
72  // アウトプットは-100.0になる
73  double output = pid.limitOutput(pid.get_output());
74  ASSERT_GE(output, -100.0);
75  }

呼び出し関係図:

etrobocon2018_test::TEST ( SelfLocalizationTest  ,
calculateBetweenEv3AndBorder4   
)

SelfLocalizationTest.cpp66 行目に定義があります。

67  {
68  SelfLocalization sl(0, 0, true);
69  float distance = sl.calculate_between_ev3_and_border(0.0, 0.0, 10.0, 0.0, 3.0, 0.0);
70  ASSERT_NEAR(distance, 0.0, 0.001);
71  }

呼び出し関係図:

etrobocon2018_test::TEST ( BlockSolverTest  ,
move2   
)

BlockSolverTest.cpp67 行目に定義があります。

68  {
69  Controller controller;
70  Walker walker{ controller };
71  BlockSolver blockSolver{ controller, walker, 01233, 40 };
72  blockSolver.moveDirection(9);
73  ASSERT_EQ(static_cast<int>(blockSolver.nowDirection), 2);
74  blockSolver.moveDirection(8);
75  ASSERT_EQ(static_cast<int>(blockSolver.nowDirection), 0);
76  blockSolver.moveDirection(4);
77  ASSERT_EQ(static_cast<int>(blockSolver.nowDirection), 1);
78  blockSolver.moveDirection(5);
79  ASSERT_EQ(static_cast<int>(blockSolver.nowDirection), 2);
80  }
Definition: Walker.h:7
etrobocon2018_test::TEST ( SelectorTest  ,
searchNode1Test   
)

SelectorTest.cpp67 行目に定義があります。

68  {
69  Selector obj;
70  std::vector<std::int8_t> blockList{ { 1, 2, 3, 7 } };
71  std::int8_t expected = 1;
72 
73  obj.setBlockPositionList(blockList);
74  auto actual = obj.searchBlockPosition(8);
75 
76  ASSERT_EQ(expected, actual);
77  }
void setBlockPositionList(std::vector< std::int8_t > list)
Definition: Selector.cpp:196
ブロック選択クラス
Definition: Selector.h:113
std::int8_t searchBlockPosition(std::int8_t currentPosition)
Definition: Selector.cpp:118

呼び出し関係図:

etrobocon2018_test::TEST ( AIAnswerArrayTest  ,
operatorTest   
)

AIAnswerArrayTest.cpp68 行目に定義があります。

69  {
71  ASSERT_EQ(0, array[0]);
72 
73  array.push_back(100);
74  ASSERT_EQ(100, array[0]);
75 
76  array.push_back(200);
77  ASSERT_EQ(200, array[1]);
78  }
void push_back(const T &value) noexcept
配列の要素を入れる
Definition: AIAnswerArray.h:38

呼び出し関係図:

etrobocon2018_test::TEST ( NodeTest  ,
getValueOfBlockExistsTest   
)

NodeTest.cpp69 行目に定義があります。

70  {
71  Node obj;
72 
73  obj.setHasBlock(true);
74  auto actual = obj.hasBlock();
75 
76  ASSERT_TRUE(actual);
77  }
Definition: Node.h:142
void setHasBlock(bool exists)
Definition: Node.cpp:23
bool hasBlock()
Definition: Node.cpp:28

呼び出し関係図:

etrobocon2018_test::TEST ( WheelOdometryTest  ,
angularVelocityTest   
)

WheelOdometryTest.cpp69 行目に定義があります。

70  {
71  MotorAngle motor_angle;
72  float transform = 99.0f / 2.0f / 147.5f / 0.04f;
73  float angle = motor_angle.angularDifference(2, 5);
74 
75  WheelOdometry odometry;
76  ASSERT_FLOAT_EQ(transform * angle, odometry.angularVelocity(2, 5));
77  }
float angularVelocity(std::int32_t left_motor, std::int32_t right_motor)
走行体の旋回角速度を求める
float angularDifference(std::int32_t left_motor, std::int32_t right_motor)
左右モータ角度の差を計算する(右手系/反時計回りが正)
Definition: MotorAngle.cpp:72

呼び出し関係図:

etrobocon2018_test::TEST ( FirstCodeTest  ,
get1WhenOnceUp1stDigit   
)

FirstCodeTest.cpp70 行目に定義があります。

71  {
72  FirstCode obj;
73 
74  obj.upDigit(1);
75  int expected = obj.getFirstCode();
76 
77  ASSERT_EQ(expected, 1);
78  }
void upDigit(int8_t)
Definition: FirstCode.cpp:19
int32_t getFirstCode()
Definition: FirstCode.cpp:41
初期位置コードクラス
Definition: FirstCode.h:14

呼び出し関係図:

etrobocon2018_test::TEST ( SelfLocalizationTest  ,
calculateBetweenEv3AndBorder5   
)

SelfLocalizationTest.cpp73 行目に定義があります。

74  {
75  SelfLocalization sl(0, 0, true);
76  float distance = sl.calculate_between_ev3_and_border(0.0, 0.0, 0.0, 10.0, 0.0, 3.0);
77  ASSERT_NEAR(distance, 0.0, 0.001);
78  }

呼び出し関係図:

etrobocon2018_test::TEST ( MotorAngleTest  ,
relativeAngleMeanZero   
)

MotorAngleTest.cpp74 行目に定義があります。

75  {
76  MotorAngle angle;
77  ASSERT_FLOAT_EQ(0.0f, angle.relativeAngleMean(0, 0));
78  ASSERT_FLOAT_EQ(0.0f, angle.relativeAngleMean(0, 0));
79  }
float relativeAngleMean(std::int32_t current_left_motor, std::int32_t current_right_motor)
左右モータの相対角度の平均値を計算する
Definition: MotorAngle.cpp:51

呼び出し関係図:

etrobocon2018_test::TEST ( InitialPositionCodeDecoderTest  ,
decodeSecondColorBlockOfCodeTest1   
)

InitialPositionCodeDecoderTest.cpp77 行目に定義があります。

78  {
80  std::int32_t codeList = 135171;
81  std::vector<std::int8_t> expected = {2, 1, 0, 0};
82 
83  obj.decode(codeList);
84  auto actual = obj.getInitialPositionCodeList();
85 
86  ASSERT_EQ(expected.at(1), actual.at(1));
87  }
std::vector< std::int8_t > getInitialPositionCodeList()

呼び出し関係図:

etrobocon2018_test::TEST ( PidTest  ,
limitOutputTest3   
)

PidTest.cpp78 行目に定義があります。

79  {
80  TEST_CLASS pid;
81 
82  // コンストラクタの引数targetに30を入れる
83  pid.setPid(0.5, 0.5, 0.5, 30.0);
84  // calculateにtarget以下の値を入力する
85  pid.calculate(30.0);
86  // アウトプットは0になる
87  double output = pid.limitOutput(pid.get_output());
88  ASSERT_DOUBLE_EQ(output, 0.0);
89  }

呼び出し関係図:

etrobocon2018_test::TEST ( ExplorerTest  ,
searchRouteFrom1To0Test   
)

ExplorerTest.cpp79 行目に定義があります。

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  }
void createBlockArea()
Definition: Explorer.cpp:3
std::vector< Node * > * getBlockAreaNodeList()
Definition: Explorer.cpp:136
std::vector< int > searchRoute(std::int8_t start, std::int8_t end)
Definition: Explorer.cpp:56

呼び出し関係図:

etrobocon2018_test::TEST ( WheelOdometryTest  ,
resetTest   
)

WheelOdometryTest.cpp79 行目に定義があります。

80  {
81  WheelOdometry odometry;
82  odometry.update(10.0f, 5.0f);
83  const Coordinate& coordinate = odometry.reset();
84  ASSERT_FLOAT_EQ(0.0f, coordinate.radius);
85  ASSERT_FLOAT_EQ(0.0f, coordinate.arg);
86  ASSERT_FLOAT_EQ(0.0f, coordinate.x);
87  ASSERT_FLOAT_EQ(0.0f, coordinate.y);
88  }
float radius
Definition: WheelOdometry.h:17
const Coordinate & update(std::int32_t left_motor, std::int32_t right_motor)
走行体の位置情報を更新する
const Coordinate & reset()
走行体の位置情報を初期化する
走行体の位置情報をまとめた構造体
Definition: WheelOdometry.h:16

呼び出し関係図:

etrobocon2018_test::TEST ( AIAnswerArrayTest  ,
castTest   
)

AIAnswerArrayTest.cpp80 行目に定義があります。

81  {
83  ASSERT_EQ(0, array.cast(0));
84  }
constexpr T cast(int i)

呼び出し関係図:

etrobocon2018_test::TEST ( SelfLocalizationTest  ,
calculateCurrentAngleTest1   
)

SelfLocalizationTest.cpp80 行目に定義があります。

81  {
82  SelfLocalization sl(0, 0, false);
83  int l, r;
84  l = r = 0;
85 
86  straight(sl, 20, l, r);
87  curve(sl, 45, l, r);
88 
89  sl.calculate_current_angle();
90 
91  ASSERT_EQ(sl.current_angle_degree, 69);
92  }
void straight(SelfLocalization &sl, int kyori, int &l, int &r)
void curve(SelfLocalization &sl, float sub_degree, int &l, int &r)

呼び出し関係図:

etrobocon2018_test::TEST ( NodeTest  ,
getValueOfPositionTest   
)

NodeTest.cpp80 行目に定義があります。

81  {
82  Node obj;
83  std::int8_t expectedX = 5;
84  std::int8_t expectedY = 8;
85 
86  obj.setPosition(5, 8);
87  auto actualX = obj.getPositionX();
88  auto actualY = obj.getPositionY();
89 
90  ASSERT_EQ(expectedX, actualX);
91  ASSERT_EQ(expectedY, actualY);
92  }
void setPosition(std::int8_t x, std::int8_t y)
Definition: Node.cpp:33
std::int8_t getPositionX()
Definition: Node.cpp:39
Definition: Node.h:142
std::int8_t getPositionY()
Definition: Node.cpp:44

呼び出し関係図:

etrobocon2018_test::TEST ( SelectorTest  ,
searchNode10Test   
)

SelectorTest.cpp80 行目に定義があります。

81  {
82  Selector obj;
83  std::vector<std::int8_t> blockList{ { 0, 2, 10, 14 } };
84  std::int8_t expected = 10;
85 
86  obj.setBlockPositionList(blockList);
87  auto actual = obj.searchBlockPosition(8);
88 
89  ASSERT_EQ(expected, actual);
90  }
void setBlockPositionList(std::vector< std::int8_t > list)
Definition: Selector.cpp:196
ブロック選択クラス
Definition: Selector.h:113
std::int8_t searchBlockPosition(std::int8_t currentPosition)
Definition: Selector.cpp:118

呼び出し関係図:

etrobocon2018_test::TEST ( BlockSolverTest  ,
runrun   
)

BlockSolverTest.cpp81 行目に定義があります。

82  {
83  Controller controller;
84  Walker walker{ controller };
85  BlockSolver blockSolver{ controller, walker, 84722, 40 };
86  blockSolver.run();
87  }
Definition: Walker.h:7
etrobocon2018_test::TEST ( MotorAngleTest  ,
angularDifferenceTestPositive   
)

MotorAngleTest.cpp81 行目に定義があります。

82  {
83  MotorAngle angle;
84  std::int32_t left = 10;
85  std::int32_t right = 20;
86 
87  ASSERT_FLOAT_EQ(right - left, angle.angularDifference(left, right));
88  }
float angularDifference(std::int32_t left_motor, std::int32_t right_motor)
左右モータ角度の差を計算する(右手系/反時計回りが正)
Definition: MotorAngle.cpp:72

呼び出し関係図:

etrobocon2018_test::TEST ( FirstCodeTest  ,
get0When10thUp5thDigit   
)

FirstCodeTest.cpp81 行目に定義があります。

82  {
83  FirstCode obj;
84 
85  for(int i = 0; i < 10; i++) {
86  obj.upDigit(5);
87  }
88  int expected = obj.getFirstCode();
89 
90  ASSERT_EQ(expected, 0);
91  }
void upDigit(int8_t)
Definition: FirstCode.cpp:19
int32_t getFirstCode()
Definition: FirstCode.cpp:41
初期位置コードクラス
Definition: FirstCode.h:14

呼び出し関係図:

etrobocon2018_test::TEST ( AIAnswerArrayTest  ,
probsTest   
)

AIAnswerArrayTest.cpp86 行目に定義があります。

87  {
89  array.push_back({1, 0, 1, 1, 0, 1});
90  array.handwriting();
91 
92  ASSERT_EQ(1.0, array.probs[2]);
93  }
std::array< float, 8 > probs
Definition: AIAnswerArray.h:22
std::int8_t handwriting() noexcept
Definition: AIAnswerArray.h:55
void push_back(const T &value) noexcept
配列の要素を入れる
Definition: AIAnswerArray.h:38

呼び出し関係図:

etrobocon2018_test::TEST ( InitialPositionCodeDecoderTest  ,
decodeThirdColorBlockOfCodeTest1   
)

InitialPositionCodeDecoderTest.cpp90 行目に定義があります。

91  {
93  std::int32_t codeList = 205060;
94  std::vector<std::int8_t> expected = {3, 2, 1, 0};
95 
96  obj.decode(codeList);
97  auto actual = obj.getInitialPositionCodeList();
98 
99  ASSERT_EQ(expected.at(2), actual.at(2));
100  }
std::vector< std::int8_t > getInitialPositionCodeList()

呼び出し関係図:

etrobocon2018_test::TEST ( WheelOdometryTest  ,
updateTest   
)

WheelOdometryTest.cpp90 行目に定義があります。

91  {
92  MotorAngle motor_angle;
93  float transform = 3.14f * 99.0f / 2.0f / 180.0f;
94  float angle = motor_angle.relativeAngleMean(2, 5);
95  float expected_distance = transform * angle;
96 
97  transform = 99.0f / 2.0f / 147.5f;
98  angle = motor_angle.angularDifference(2, 5);
99  float expected_angle = transform * angle;
100 
101  WheelOdometry odometry;
102  const Coordinate& coordinate = odometry.update(2, 5);
103  ASSERT_FLOAT_EQ(expected_distance, coordinate.radius);
104  ASSERT_FLOAT_EQ(expected_angle / 2.0f, coordinate.arg);
105  ASSERT_FLOAT_EQ(expected_distance * std::cos(expected_angle / 2.0f), coordinate.x);
106  ASSERT_FLOAT_EQ(expected_distance * std::sin(expected_angle / 2.0f), coordinate.y);
107  }
float relativeAngleMean(std::int32_t current_left_motor, std::int32_t current_right_motor)
左右モータの相対角度の平均値を計算する
Definition: MotorAngle.cpp:51
float angularDifference(std::int32_t left_motor, std::int32_t right_motor)
左右モータ角度の差を計算する(右手系/反時計回りが正)
Definition: MotorAngle.cpp:72
float radius
Definition: WheelOdometry.h:17
const Coordinate & update(std::int32_t left_motor, std::int32_t right_motor)
走行体の位置情報を更新する
走行体の位置情報をまとめた構造体
Definition: WheelOdometry.h:16

呼び出し関係図:

etrobocon2018_test::TEST ( MotorAngleTest  ,
angularDifferenceTestNegative   
)

MotorAngleTest.cpp90 行目に定義があります。

91  {
92  MotorAngle angle;
93  std::int32_t left = -10;
94  std::int32_t right = -20;
95 
96  ASSERT_FLOAT_EQ(right - left, angle.angularDifference(left, right));
97  }
float angularDifference(std::int32_t left_motor, std::int32_t right_motor)
左右モータ角度の差を計算する(右手系/反時計回りが正)
Definition: MotorAngle.cpp:72

呼び出し関係図:

etrobocon2018_test::TEST ( SelectorTest  ,
searchNode6Test   
)

SelectorTest.cpp93 行目に定義があります。

94  {
95  Selector obj;
96  std::vector<std::int8_t> blockList{ { 6, 7, 10, 11 } };
97  std::int8_t expected = 6;
98 
99  obj.addMovedBlockPosition(10);
100  obj.setBlockPositionList(blockList);
101  auto actual = obj.searchBlockPosition(13);
102 
103  ASSERT_EQ(expected, actual);
104  }
void setBlockPositionList(std::vector< std::int8_t > list)
Definition: Selector.cpp:196
void addMovedBlockPosition(std::int8_t position)
Definition: Selector.cpp:208
ブロック選択クラス
Definition: Selector.h:113
std::int8_t searchBlockPosition(std::int8_t currentPosition)
Definition: Selector.cpp:118

呼び出し関係図:

etrobocon2018_test::TEST ( SelfLocalizationTest  ,
calculateCurrentAngleTest2   
)

SelfLocalizationTest.cpp94 行目に定義があります。

95  {
96  SelfLocalization sl(0, 0, false);
97  int l, r;
98  l = r = 0;
99 
100  straight(sl, 20, l, r);
101  curve(sl, -45, l, r);
102 
103  sl.calculate_current_angle();
104 
105  ASSERT_EQ(sl.current_angle_degree, -69);
106  }
void straight(SelfLocalization &sl, int kyori, int &l, int &r)
void curve(SelfLocalization &sl, float sub_degree, int &l, int &r)

呼び出し関係図:

etrobocon2018_test::TEST ( FirstCodeTest  ,
get0WhenOnceUpAndDown1stDigita   
)

FirstCodeTest.cpp94 行目に定義があります。

95  {
96  FirstCode obj;
97 
98  obj.upDigit(1);
99  obj.downDigit(1);
100  int expected = obj.getFirstCode();
101 
102  ASSERT_EQ(expected, 0);
103  }
void upDigit(int8_t)
Definition: FirstCode.cpp:19
int32_t getFirstCode()
Definition: FirstCode.cpp:41
void downDigit(int8_t)
Definition: FirstCode.cpp:30
初期位置コードクラス
Definition: FirstCode.h:14

呼び出し関係図:

etrobocon2018_test::TEST ( NodeTest  ,
getValueOfNeighborListTest   
)

NodeTest.cpp95 行目に定義があります。

96  {
97  Node nodeA;
98  Node nodeB;
99  nodeA.setNodeID(1);
100  nodeB.setNodeID(2);
101  std::vector<Node*> expected = {&nodeA, &nodeB};
102  Node obj{&expected};
103 
104  auto actual = obj.getNeighbors();
105 
106  ASSERT_EQ(&expected, actual);
107  ASSERT_EQ(expected.at(0), actual->at(0));
108 
109  expected.at(0)->setNodeID(3);
110  ASSERT_EQ(&expected, actual);
111  ASSERT_EQ(expected.at(0), actual->at(0));
112  ASSERT_EQ(expected.at(0)->getNodeID(), actual->at(0)->getNodeID());
113  }
void setNodeID(std::int8_t nodeNumber)
Definition: Node.cpp:13
Definition: Node.h:142
std::vector< Node * > * getNeighbors()
Definition: Node.cpp:8

呼び出し関係図:

etrobocon2018_test::TEST ( ExplorerTest  ,
searchRouteFrom8To9Test   
)

ExplorerTest.cpp96 行目に定義があります。

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  }
void createBlockArea()
Definition: Explorer.cpp:3
std::vector< Node * > * getBlockAreaNodeList()
Definition: Explorer.cpp:136
std::vector< int > searchRoute(std::int8_t start, std::int8_t end)
Definition: Explorer.cpp:56

呼び出し関係図:

etrobocon2018_test::TEST ( AIAnswerArrayTest  ,
handwritingTest   
)

AIAnswerArrayTest.cpp96 行目に定義があります。

97  {
99  array.push_back({0, 0, 1, 1, 1, 1});
100 
101  ASSERT_EQ(0, array.handwriting());
102 
103  AI_Answer::array<int> array1;
104  array1.push_back({0, 0, 0, 1, 0, 1});
105  ASSERT_EQ(1, array1.handwriting());
106 
107  AI_Answer::array<int> array2;
108  array2.push_back({1, 0, 1, 1, 0, 1});
109  ASSERT_EQ(2, array2.handwriting());
110 
111  AI_Answer::array<int> array3;
112  array3.push_back({1, 0, 0, 1, 1, 1});
113  ASSERT_EQ(3, array3.handwriting());
114 
115  AI_Answer::array<int> array4;
116  array4.push_back({1, 1, 1, 0, 1, 1});
117  ASSERT_EQ(4, array4.handwriting());
118 
119  AI_Answer::array<int> array5;
120  array5.push_back({1, 1, 0, 1, 1, 1});
121  ASSERT_EQ(5, array5.handwriting());
122 
123  AI_Answer::array<int> array6;
124  array6.push_back({1, 1, 1, 1, 1, 1});
125  ASSERT_EQ(6, array6.handwriting());
126 
127  AI_Answer::array<int> array7;
128  array7.push_back({1, 0, 0, 1, 0, 1});
129  ASSERT_EQ(7, array7.handwriting());
130  }
std::int8_t handwriting() noexcept
Definition: AIAnswerArray.h:55
void push_back(const T &value) noexcept
配列の要素を入れる
Definition: AIAnswerArray.h:38

呼び出し関係図:

etrobocon2018_test::TEST ( MotorAngleTest  ,
angularDifferenceTestZero   
)

MotorAngleTest.cpp99 行目に定義があります。

100  {
101  MotorAngle angle;
102  ASSERT_FLOAT_EQ(0.0f, angle.angularDifference(0, 0));
103  }
float angularDifference(std::int32_t left_motor, std::int32_t right_motor)
左右モータ角度の差を計算する(右手系/反時計回りが正)
Definition: MotorAngle.cpp:72

呼び出し関係図:

etrobocon2018_test::TEST ( InitialPositionCodeDecoderTest  ,
decodeFourthColorBlockOfCodeTest1   
)

InitialPositionCodeDecoderTest.cpp103 行目に定義があります。

104  {
106  std::int32_t codeList = 274965;
107  std::vector<std::int8_t> expected = {4, 3, 2, 1};
108 
109  obj.decode(codeList);
110  auto actual = obj.getInitialPositionCodeList();
111 
112  ASSERT_EQ(expected.at(3), actual.at(3));
113  }
std::vector< std::int8_t > getInitialPositionCodeList()

呼び出し関係図:

etrobocon2018_test::TEST ( MotorAngleTest  ,
absoluteValueOfAngleTest   
)

MotorAngleTest.cpp105 行目に定義があります。

106  {
107  MotorAngle angle;
108  ASSERT_EQ(10, angle.absoluteValueOfAngle(10));
109  ASSERT_EQ(10, angle.absoluteValueOfAngle(-10));
110  }
std::int32_t absoluteValueOfAngle(std::int32_t motor)
モータ角度の絶対値を計算する
Definition: MotorAngle.cpp:83

呼び出し関係図:

etrobocon2018_test::TEST ( FirstCodeTest  ,
get90000WhenOnceDown5thDigit   
)

FirstCodeTest.cpp106 行目に定義があります。

107  {
108  FirstCode obj;
109 
110  obj.downDigit(5);
111  int expected = obj.getFirstCode();
112 
113  ASSERT_EQ(expected, 90000);
114  }
int32_t getFirstCode()
Definition: FirstCode.cpp:41
void downDigit(int8_t)
Definition: FirstCode.cpp:30
初期位置コードクラス
Definition: FirstCode.h:14

呼び出し関係図:

etrobocon2018_test::TEST ( SelectorTest  ,
searchNode0Test   
)

SelectorTest.cpp107 行目に定義があります。

108  {
109  Selector obj;
110  std::vector<std::int8_t> blockList{ { 0, 2, 3, 15 } };
111  std::int8_t expected = 0;
112 
113  obj.setBlockPositionList(blockList);
114  auto actual = obj.searchBlockPosition(8);
115 
116  ASSERT_EQ(expected, actual);
117  }
void setBlockPositionList(std::vector< std::int8_t > list)
Definition: Selector.cpp:196
ブロック選択クラス
Definition: Selector.h:113
std::int8_t searchBlockPosition(std::int8_t currentPosition)
Definition: Selector.cpp:118

呼び出し関係図:

etrobocon2018_test::TEST ( SelfLocalizationTest  ,
calculateCurrentAngleTest3   
)

SelfLocalizationTest.cpp108 行目に定義があります。

109  {
110  SelfLocalization sl(0, 0, false);
111  int l, r;
112  l = r = 0;
113 
114  straight(sl, 20, l, r);
115  curve(sl, 90, l, r);
116  straight(sl, 20, l, r);
117  curve(sl, -90, l, r);
118 
119  sl.calculate_current_angle();
120 
121  ASSERT_EQ(sl.current_angle_degree, 0);
122  }
void straight(SelfLocalization &sl, int kyori, int &l, int &r)
void curve(SelfLocalization &sl, float sub_degree, int &l, int &r)

呼び出し関係図:

etrobocon2018_test::TEST ( WheelOdometryTest  ,
updateCoordinateTest   
)

WheelOdometryTest.cpp109 行目に定義があります。

110  {
111  WheelOdometry odometry;
112  MotorAngle motor_angle;
113  ASSERT_FLOAT_EQ(0.0, odometry.getCoordinate().radius);
114  ASSERT_FLOAT_EQ(0.0, odometry.getCoordinate().arg);
115 
116  float transform = 3.14f * 99.0f / 2.0f / 180.0f;
117  float angle = motor_angle.relativeAngleMean(2, 5);
118  float expected_distance = transform * angle;
119  odometry.update(2, 5);
120 
121  ASSERT_FLOAT_EQ(expected_distance, odometry.getCoordinate().radius);
122  odometry.update(4, 10);
123  ASSERT_FLOAT_EQ(2 * expected_distance, odometry.getCoordinate().radius);
124  odometry.update(6, 15);
125  ASSERT_FLOAT_EQ(3 * expected_distance, odometry.getCoordinate().radius);
126  }
float relativeAngleMean(std::int32_t current_left_motor, std::int32_t current_right_motor)
左右モータの相対角度の平均値を計算する
Definition: MotorAngle.cpp:51
const Coordinate & getCoordinate()
走行体の位置情報を返す
float radius
Definition: WheelOdometry.h:17
const Coordinate & update(std::int32_t left_motor, std::int32_t right_motor)
走行体の位置情報を更新する

呼び出し関係図:

etrobocon2018_test::TEST ( ExplorerTest  ,
searchRouteFrom11To10Test   
)

ExplorerTest.cpp113 行目に定義があります。

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  }
void createBlockArea()
Definition: Explorer.cpp:3
std::vector< Node * > * getBlockAreaNodeList()
Definition: Explorer.cpp:136
std::vector< int > searchRoute(std::int8_t start, std::int8_t end)
Definition: Explorer.cpp:56

呼び出し関係図:

etrobocon2018_test::TEST ( InitialPositionCodeDecoderTest  ,
decodeRandomCodeTest   
)

InitialPositionCodeDecoderTest.cpp116 行目に定義があります。

117  {
119 
120  std::vector<std::int32_t> power16 = {1, 16, 16*16, 16*16*16, 16*16*16*16};
121  // 乱数を生成する
122  std::mt19937 mt{ std::random_device{}() };
123  // カラーブロックの乱数範囲を定める
124  std::uniform_int_distribution<std::int8_t> distC(1, 15);
125  // パワーブロックの乱数範囲を定める
126  std::uniform_int_distribution<std::int8_t> distP(1, 8);
127 
128  for(int i = 0; i < 100; i++) {
129  std::vector<std::int8_t> expectedC = {distC(mt), distC(mt), distC(mt), distC(mt)};
130  std::int8_t expectedP = distP(mt);
131  std::int32_t expected =
132  expectedC[0] * power16[4] +
133  expectedC[1] * power16[3] +
134  expectedC[2] * power16[2] +
135  expectedC[3] * power16[1] +
136  expectedP * power16[0];
137 
138  obj.decode(expected);
139  auto actual = obj.getInitialPositionCode();
140  auto actualC = obj.getInitialPositionCodeList();
141  auto actualP = obj.getInitialPositionPowerBlockCode();
142 
143  EXPECT_EQ(expected, actual);
144  EXPECT_EQ(expectedC, actualC);
145  EXPECT_EQ(expectedP, actualP);
146  }
147  }
std::vector< std::int8_t > getInitialPositionCodeList()

呼び出し関係図:

etrobocon2018_test::TEST ( NodeTest  ,
getValueOf3NeighborListTest   
)

NodeTest.cpp116 行目に定義があります。

117  {
118  Node node1(1);
119  Node node2(2);
120  Node node3(3);
121 
122  std::vector<Node*> neighbors1 = {&node2};
123  std::vector<Node*> neighbors2 = {&node1, &node3};
124  std::vector<Node*> neighbors3 = {&node2};
125 
126  node1.setNeighbors(&neighbors1);
127  node2.setNeighbors(&neighbors2);
128  node3.setNeighbors(&neighbors3);
129 
130  auto actual1 = node1.getNeighbors();
131  auto actual2 = node2.getNeighbors();
132  auto actual3 = node3.getNeighbors();
133 
134  ASSERT_EQ(&neighbors1, actual1);
135  ASSERT_EQ(&neighbors2, actual2);
136  ASSERT_EQ(&neighbors3, actual3);
137 
138  ASSERT_EQ(&node1, actual1->at(0)->getNeighbors()->at(0));
139  ASSERT_EQ(&node2, actual2->at(0)->getNeighbors()->at(0));
140  ASSERT_EQ(&node2, actual2->at(1)->getNeighbors()->at(0));
141  ASSERT_EQ(&node3, actual3->at(0)->getNeighbors()->at(1));
142  }
Definition: Node.h:142

呼び出し関係図:

etrobocon2018_test::TEST ( FirstCodeTest  ,
get0When10thDown5thDigit   
)

FirstCodeTest.cpp117 行目に定義があります。

118  {
119  FirstCode obj;
120 
121  for(int i = 0; i < 10; i++) {
122  obj.downDigit(5);
123  }
124  int expected = obj.getFirstCode();
125 
126  ASSERT_EQ(expected, 0);
127  }
int32_t getFirstCode()
Definition: FirstCode.cpp:41
void downDigit(int8_t)
Definition: FirstCode.cpp:30
初期位置コードクラス
Definition: FirstCode.h:14

呼び出し関係図:

etrobocon2018_test::TEST ( SelectorTest  ,
checkWhetherThereIsMovedBlock   
)

SelectorTest.cpp120 行目に定義があります。

121  {
122  Selector obj;
123 
124  ASSERT_FALSE(obj.isAlreadyMovedNode(1));
125  ASSERT_FALSE(obj.isAlreadyMovedNode(10));
126 
127  obj.addMovedBlockPosition(1);
128 
129  ASSERT_TRUE(obj.isAlreadyMovedNode(1));
130  ASSERT_FALSE(obj.isAlreadyMovedNode(10));
131 
132  obj.addMovedBlockPosition(10);
133 
134  ASSERT_TRUE(obj.isAlreadyMovedNode(1));
135  ASSERT_TRUE(obj.isAlreadyMovedNode(10));
136  }
bool isAlreadyMovedNode(std::int8_t position)
Definition: Selector.cpp:177
void addMovedBlockPosition(std::int8_t position)
Definition: Selector.cpp:208
ブロック選択クラス
Definition: Selector.h:113

呼び出し関係図:

etrobocon2018_test::TEST ( SelfLocalizationTest  ,
isOverNormalVectorTest1   
)

SelfLocalizationTest.cpp124 行目に定義があります。

125  {
126  SelfLocalization sl(0, 0, false);
127  sl.init_normal_vector(0.0, 0.0, 100.0, 100.0, 0.0, 0.0);
128  ASSERT_EQ(sl.is_over_normal_vector(10.0, 10.0), false);
129  }

呼び出し関係図:

etrobocon2018_test::TEST ( WheelOdometryTest  ,
getRotationAngleTest   
)

WheelOdometryTest.cpp128 行目に定義があります。

129  {
130  WheelOdometry odometry;
131  float transform = 99.0f / 147.5f;
132  float angle = (5.0f + 5.0f) / 2.0f;
133 
134  ASSERT_FLOAT_EQ(transform * angle, odometry.getRotationAngle(-5, 5));
135 
136  float angle2 = (2.0f + 2.0f) / 2.0f;
137 
138  ASSERT_FLOAT_EQ(transform * angle2, odometry.getRotationAngle(-2, 2));
139  }
float getRotationAngle(std::int32_t left_motor, std::int32_t right_motor)
走行体の回転角度を返す

呼び出し関係図:

etrobocon2018_test::TEST ( ExplorerTest  ,
searchRouteFrom0To2Test   
)

ExplorerTest.cpp130 行目に定義があります。

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  }
void createBlockArea()
Definition: Explorer.cpp:3
std::vector< Node * > * getBlockAreaNodeList()
Definition: Explorer.cpp:136
std::vector< int > searchRoute(std::int8_t start, std::int8_t end)
Definition: Explorer.cpp:56

呼び出し関係図:

etrobocon2018_test::TEST ( FirstCodeTest  ,
get12345WhenOnceDown5thDigit   
)

FirstCodeTest.cpp130 行目に定義があります。

131  {
132  FirstCode obj;
133  int set[5];
134  set[0] = 5;
135  set[1] = 4;
136  set[2] = 3;
137  set[3] = 2;
138  set[4] = 1;
139 
140  for(int i = 0; i < 5; i++) {
141  for(int j = 0; j < set[i]; j++) {
142  obj.upDigit(i + 1);
143  }
144  }
145  int expected = obj.getFirstCode();
146 
147  ASSERT_EQ(expected, 12345);
148  }
void upDigit(int8_t)
Definition: FirstCode.cpp:19
int32_t getFirstCode()
Definition: FirstCode.cpp:41
初期位置コードクラス
Definition: FirstCode.h:14

呼び出し関係図:

etrobocon2018_test::TEST ( SelfLocalizationTest  ,
isOverNormalVectorTest2   
)

SelfLocalizationTest.cpp131 行目に定義があります。

132  {
133  SelfLocalization sl(0, 0, false);
134  sl.init_normal_vector(0.0, 0.0, 100.0, 100.0, 0.0, 0.0);
135  ASSERT_EQ(sl.is_over_normal_vector(101.0, 101.0), true);
136  }

呼び出し関係図:

etrobocon2018_test::TEST ( SelfLocalizationTest  ,
isOverNormalVectorTest3   
)

SelfLocalizationTest.cpp138 行目に定義があります。

139  {
140  SelfLocalization sl(0, 0, false);
141  sl.init_normal_vector(0.0, 0.0, 100.0, 100.0, 0.0, 0.0);
142  ASSERT_EQ(sl.is_over_normal_vector(99.0, 101.0), true);
143  }

呼び出し関係図:

etrobocon2018_test::TEST ( SelectorTest  ,
checkNextOperationIsAllFalseInInitialStageTest   
)

SelectorTest.cpp139 行目に定義があります。

140  {
141  Selector obj;
142 
143  ASSERT_FALSE(obj.isEvacuatingWithNext());
144  ASSERT_FALSE(obj.isMovingWithNext());
145  ASSERT_FALSE(obj.isCarryingWithNext());
146  }
bool isCarryingWithNext()
Definition: Selector.cpp:289
bool isEvacuatingWithNext()
Definition: Selector.cpp:279
bool isMovingWithNext()
Definition: Selector.cpp:284
ブロック選択クラス
Definition: Selector.h:113

呼び出し関係図:

etrobocon2018_test::TEST ( WheelOdometryTest  ,
getCoordinateTest   
)

WheelOdometryTest.cpp141 行目に定義があります。

142  {
143  WheelOdometry odometry;
144  const Coordinate& coordinate = odometry.getCoordinate();
145 
146  ASSERT_FLOAT_EQ(0.0f, coordinate.radius);
147  ASSERT_FLOAT_EQ(0.0f, coordinate.arg);
148  ASSERT_FLOAT_EQ(0.0f, coordinate.x);
149  ASSERT_FLOAT_EQ(0.0f, coordinate.y);
150  }
const Coordinate & getCoordinate()
走行体の位置情報を返す
float radius
Definition: WheelOdometry.h:17
走行体の位置情報をまとめた構造体
Definition: WheelOdometry.h:16

呼び出し関係図:

etrobocon2018_test::TEST ( NodeTest  ,
getValueOfNeighborListOf3x3Test   
)

NodeTest.cpp145 行目に定義があります。

146  {
147  std::vector<Node*> blockAreaNodePtrList(9);
148  std::vector<Node> blockAreaNodeList(9);
149 
150  for (std::int8_t i = 0; i < 9; i++)
151  {
152  Node currentNode(i);
153  blockAreaNodeList[i] = currentNode;
154  blockAreaNodePtrList[i] = &blockAreaNodeList[i];
155  }
156  std::vector<Node*>* blockAreaNodePtrListPtr = &blockAreaNodePtrList;
157 
158 
159  std::vector<Node*> neighborsOfNode0;
160  std::vector<Node*> neighborsOfNode1;
161  std::vector<Node*> neighborsOfNode2;
162 
163  std::vector<Node*> neighborsOfNode3;
164  std::vector<Node*> neighborsOfNode4;
165  std::vector<Node*> neighborsOfNode5;
166 
167  std::vector<Node*> neighborsOfNode6;
168  std::vector<Node*> neighborsOfNode7;
169  std::vector<Node*> neighborsOfNode8;
170 
171 
172  int numbers0[2] = {1, 3};
173  for (int i = 0; i < 2; i++)
174  {
175  neighborsOfNode0.push_back(blockAreaNodePtrListPtr->at(numbers0[i]));
176  }
177  int numbers1[3] = {0, 2, 4};
178  for (int i = 0; i < 3; i++)
179  {
180  neighborsOfNode1.push_back(blockAreaNodePtrListPtr->at(numbers1[i]));
181  }
182  int numbers2[2] = {1, 5};
183  for (int i = 0; i < 2; i++)
184  {
185  neighborsOfNode2.push_back(blockAreaNodePtrListPtr->at(numbers2[i]));
186  }
187 
188 
189  int numbers3[3] = {0, 4, 6};
190  for (int i = 0; i < 3; i++)
191  {
192  neighborsOfNode3.push_back(blockAreaNodePtrListPtr->at(numbers3[i]));
193  }
194  int numbers4[4] = {1, 3, 5, 7};
195  for (int i = 0; i < 4; i++)
196  {
197  neighborsOfNode4.push_back(blockAreaNodePtrListPtr->at(numbers4[i]));
198  }
199  int numbers5[3] = {2, 4, 8};
200  for (int i = 0; i < 3; i++)
201  {
202  neighborsOfNode5.push_back(blockAreaNodePtrListPtr->at(numbers5[i]));
203  }
204 
205 
206  int numbers6[2] = {3, 7};
207  for (int i = 0; i < 2; i++)
208  {
209  neighborsOfNode6.push_back(blockAreaNodePtrListPtr->at(numbers6[i]));
210  }
211  int numbers7[3] = {4, 6, 8};
212  for (int i = 0; i < 3; i++)
213  {
214  neighborsOfNode7.push_back(blockAreaNodePtrListPtr->at(numbers7[i]));
215  }
216  int numbers8[2] = {5, 7};
217  for (int i = 0; i < 2; i++)
218  {
219  neighborsOfNode8.push_back(blockAreaNodePtrListPtr->at(numbers8[i]));
220  }
221 
222 
223  blockAreaNodePtrListPtr->at(0)->setNeighbors(&neighborsOfNode0);
224  blockAreaNodePtrListPtr->at(1)->setNeighbors(&neighborsOfNode1);
225  blockAreaNodePtrListPtr->at(2)->setNeighbors(&neighborsOfNode2);
226 
227  blockAreaNodePtrListPtr->at(3)->setNeighbors(&neighborsOfNode3);
228  blockAreaNodePtrListPtr->at(4)->setNeighbors(&neighborsOfNode4);
229  blockAreaNodePtrListPtr->at(5)->setNeighbors(&neighborsOfNode5);
230 
231  blockAreaNodePtrListPtr->at(6)->setNeighbors(&neighborsOfNode6);
232  blockAreaNodePtrListPtr->at(7)->setNeighbors(&neighborsOfNode7);
233  blockAreaNodePtrListPtr->at(8)->setNeighbors(&neighborsOfNode8);
234 
235 
236  ASSERT_EQ(blockAreaNodePtrListPtr->at(0)->getNodeID(), blockAreaNodeList[1].getNeighbors()->at(0)->getNodeID());
237 
238  ASSERT_EQ(&blockAreaNodeList[0], blockAreaNodeList[1].getNeighbors()->at(0));
239  ASSERT_EQ(&blockAreaNodeList[0], neighborsOfNode1[0]);
240  ASSERT_EQ(blockAreaNodeList[1].getNodeID(), blockAreaNodeList[0].getNeighbors()->at(0)->getNodeID());
241  ASSERT_EQ(&blockAreaNodeList[1], blockAreaNodeList[0].getNeighbors()->at(0));
242 
243  // 中央は4方の隣接ノードと等しい
244  ASSERT_EQ(blockAreaNodePtrListPtr->at(4), blockAreaNodePtrListPtr->at(1)->getNeighbors()->at(2));
245  ASSERT_EQ(blockAreaNodePtrListPtr->at(4), blockAreaNodePtrListPtr->at(3)->getNeighbors()->at(1));
246  ASSERT_EQ(blockAreaNodePtrListPtr->at(4), blockAreaNodePtrListPtr->at(5)->getNeighbors()->at(1));
247  ASSERT_EQ(blockAreaNodePtrListPtr->at(4), blockAreaNodePtrListPtr->at(7)->getNeighbors()->at(0));
248 
249  // 中央は4隅の隣接ノードの隣接ノードと等しい
250  ASSERT_EQ(blockAreaNodePtrListPtr->at(4), blockAreaNodePtrListPtr->at(0)->getNeighbors()->at(0)->getNeighbors()->at(2));
251  ASSERT_EQ(blockAreaNodePtrListPtr->at(4), blockAreaNodePtrListPtr->at(2)->getNeighbors()->at(1)->getNeighbors()->at(1));
252  ASSERT_EQ(blockAreaNodePtrListPtr->at(4), blockAreaNodePtrListPtr->at(6)->getNeighbors()->at(0)->getNeighbors()->at(1));
253  ASSERT_EQ(blockAreaNodePtrListPtr->at(4), blockAreaNodePtrListPtr->at(8)->getNeighbors()->at(1)->getNeighbors()->at(0));
254  }
Definition: Node.h:142

呼び出し関係図:

etrobocon2018_test::TEST ( SelfLocalizationTest  ,
isOverNormalVectorTest4   
)

SelfLocalizationTest.cpp145 行目に定義があります。

146  {
147  SelfLocalization sl(0, 0, false);
148  sl.init_normal_vector(0.0, 0.0, 100.0, 100.0, 0.0, 0.0);
149  ASSERT_EQ(sl.is_over_normal_vector(101.0, 99.0), true);
150  }

呼び出し関係図:

etrobocon2018_test::TEST ( ExplorerTest  ,
searchRouteFrom2To0Test   
)

ExplorerTest.cpp147 行目に定義があります。

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  }
void createBlockArea()
Definition: Explorer.cpp:3
std::vector< Node * > * getBlockAreaNodeList()
Definition: Explorer.cpp:136
std::vector< int > searchRoute(std::int8_t start, std::int8_t end)
Definition: Explorer.cpp:56

呼び出し関係図:

etrobocon2018_test::TEST ( SelectorTest  ,
checkNextOperationIsAllFalseWithoutSetNextWhenNextIsSetTest   
)

SelectorTest.cpp149 行目に定義があります。

150  {
151  Selector obj;
152 
154  ASSERT_TRUE(obj.isEvacuatingWithNext());
155  ASSERT_FALSE(obj.isMovingWithNext());
156  ASSERT_FALSE(obj.isCarryingWithNext());
157 
159  ASSERT_FALSE(obj.isEvacuatingWithNext());
160  ASSERT_TRUE(obj.isMovingWithNext());
161  ASSERT_FALSE(obj.isCarryingWithNext());
162 
164  ASSERT_FALSE(obj.isEvacuatingWithNext());
165  ASSERT_FALSE(obj.isMovingWithNext());
166  ASSERT_TRUE(obj.isCarryingWithNext());
167  }
bool isCarryingWithNext()
Definition: Selector.cpp:289
bool isEvacuatingWithNext()
Definition: Selector.cpp:279
bool isMovingWithNext()
Definition: Selector.cpp:284
void setNext(NextOperationOfSearchingRouteIs next)
Definition: Selector.cpp:253
ブロック選択クラス
Definition: Selector.h:113

呼び出し関係図:

etrobocon2018_test::TEST ( FirstCodeTest  ,
get5WhenDoNotChangeLeftAndRightAnyDigitNumber   
)

FirstCodeTest.cpp151 行目に定義があります。

152  {
153  FirstCode obj;
154 
155  int expected = obj.getDigit();
156 
157  ASSERT_EQ(expected, 5);
158  }
初期位置コードクラス
Definition: FirstCode.h:14
int8_t getDigit()
Definition: FirstCode.cpp:54

呼び出し関係図:

etrobocon2018_test::TEST ( WheelOdometryTest  ,
getPointXTest   
)

WheelOdometryTest.cpp152 行目に定義があります。

153  {
154  WheelOdometry odometry;
155  const Coordinate& coordinate = odometry.update(2, 5);
156 
157  ASSERT_FLOAT_EQ(coordinate.x, odometry.getPointX());
158  }
float getPointX()
走行体の位置x座標を返す
const Coordinate & update(std::int32_t left_motor, std::int32_t right_motor)
走行体の位置情報を更新する
走行体の位置情報をまとめた構造体
Definition: WheelOdometry.h:16

呼び出し関係図:

etrobocon2018_test::TEST ( WheelOdometryTest  ,
getPointYTest   
)

WheelOdometryTest.cpp160 行目に定義があります。

161  {
162  WheelOdometry odometry;
163  const Coordinate& coordinate = odometry.update(2, 5);
164 
165  ASSERT_FLOAT_EQ(coordinate.y, odometry.getPointY());
166  }
const Coordinate & update(std::int32_t left_motor, std::int32_t right_motor)
走行体の位置情報を更新する
float getPointY()
走行体の位置y座標を返す
走行体の位置情報をまとめた構造体
Definition: WheelOdometry.h:16

呼び出し関係図:

etrobocon2018_test::TEST ( FirstCodeTest  ,
get4WhenOnceChangeRightDigitNumber   
)

FirstCodeTest.cpp161 行目に定義があります。

162  {
163  FirstCode obj;
164 
165  obj.changeRightDigit();
166  int expected = obj.getDigit();
167 
168  ASSERT_EQ(expected, 4);
169  }
void changeRightDigit()
Definition: FirstCode.cpp:59
初期位置コードクラス
Definition: FirstCode.h:14
int8_t getDigit()
Definition: FirstCode.cpp:54

呼び出し関係図:

etrobocon2018_test::TEST ( ExplorerTest  ,
searchShortestRouteFrom11To5Test   
)

ExplorerTest.cpp164 行目に定義があります。

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  }
void createBlockArea()
Definition: Explorer.cpp:3
std::vector< Node * > * getBlockAreaNodeList()
Definition: Explorer.cpp:136
std::vector< int > searchRoute(std::int8_t start, std::int8_t end)
Definition: Explorer.cpp:56

呼び出し関係図:

etrobocon2018_test::TEST ( SelectorTest  ,
checkThereAreNotNodeInInitialRouteTest   
)

SelectorTest.cpp170 行目に定義があります。

171  {
172  Selector obj;
173  unsigned int expected = 0;
174 
175  // あってもなくても関係なし
176  obj.setBlockPositionList(std::vector<std::int8_t>({ 1, 2, 3 }));
177 
178  auto actual = obj.extractRoute();
179 
180  ASSERT_EQ(expected, actual.size());
181  }
void setBlockPositionList(std::vector< std::int8_t > list)
Definition: Selector.cpp:196
std::vector< int > extractRoute()
Definition: Selector.cpp:347
ブロック選択クラス
Definition: Selector.h:113

呼び出し関係図:

etrobocon2018_test::TEST ( FirstCodeTest  ,
get5When5thChangeRightDigitNumber   
)

FirstCodeTest.cpp172 行目に定義があります。

173  {
174  FirstCode obj;
175 
176  for(int i = 0; i < 5; i++) {
177  obj.changeRightDigit();
178  }
179  int expected = obj.getDigit();
180 
181  ASSERT_EQ(expected, 5);
182  }
void changeRightDigit()
Definition: FirstCode.cpp:59
初期位置コードクラス
Definition: FirstCode.h:14
int8_t getDigit()
Definition: FirstCode.cpp:54

呼び出し関係図:

etrobocon2018_test::TEST ( ExplorerTest  ,
searchRouteFrom11To5Circumventing6Test   
)

ExplorerTest.cpp181 行目に定義があります。

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  }
void createBlockArea()
Definition: Explorer.cpp:3
std::vector< Node * > * getBlockAreaNodeList()
Definition: Explorer.cpp:136
std::vector< int > searchRoute(std::int8_t start, std::int8_t end)
Definition: Explorer.cpp:56

呼び出し関係図:

etrobocon2018_test::TEST ( SelectorTest  ,
getSomeNodeInRouteWhenRouteIsSetTest   
)

SelectorTest.cpp184 行目に定義があります。

185  {
186  Selector obj;
187  std::vector<int> expectedList = { 0, 1, 2, 3, 7, 11, 15, 14, 13, 12, 8, 4, 5, 6, 10, 9 };
188 
189  obj.updateRoute(expectedList);
190  auto actual = obj.extractRoute();
191 
192  ASSERT_EQ(expectedList.size(), actual.size());
193  for(unsigned int i = 0; i < actual.size(); i++) EXPECT_EQ(expectedList[i], actual[i]);
194 
195  expectedList = { 8, 9, 10, 11 };
196  obj.updateRoute(expectedList);
197  actual = obj.extractRoute();
198 
199  ASSERT_EQ(expectedList.size(), actual.size());
200  for(unsigned int i = 0; i < actual.size(); i++) EXPECT_EQ(expectedList[i], actual[i]);
201  }
void updateRoute(std::vector< int > route)
Definition: Selector.cpp:334
std::vector< int > extractRoute()
Definition: Selector.cpp:347
ブロック選択クラス
Definition: Selector.h:113

呼び出し関係図:

etrobocon2018_test::TEST ( FirstCodeTest  ,
get5WhenOnceChangeLeftDigitNumberAfterTwiceChangeRightDigitNumber   
)

FirstCodeTest.cpp185 行目に定義があります。

186  {
187  FirstCode obj;
188 
189  obj.changeRightDigit();
190  obj.changeRightDigit();
191  obj.changeLeftDigit();
192  int expected = obj.getDigit();
193 
194  ASSERT_EQ(expected, 4);
195  }
void changeRightDigit()
Definition: FirstCode.cpp:59
void changeLeftDigit()
Definition: FirstCode.cpp:68
初期位置コードクラス
Definition: FirstCode.h:14
int8_t getDigit()
Definition: FirstCode.cpp:54

呼び出し関係図:

etrobocon2018_test::TEST ( FirstCodeTest  ,
get1WhenOnceChangeLeftDigitNumber   
)

FirstCodeTest.cpp198 行目に定義があります。

199  {
200  FirstCode obj;
201 
202  obj.changeLeftDigit();
203  int expected = obj.getDigit();
204 
205  ASSERT_EQ(expected, 1);
206  }
void changeLeftDigit()
Definition: FirstCode.cpp:68
初期位置コードクラス
Definition: FirstCode.h:14
int8_t getDigit()
Definition: FirstCode.cpp:54

呼び出し関係図:

etrobocon2018_test::TEST ( ExplorerTest  ,
searchRouteFrom11To5Circumventing6And10Test   
)

ExplorerTest.cpp199 行目に定義があります。

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  }
void createBlockArea()
Definition: Explorer.cpp:3
std::vector< Node * > * getBlockAreaNodeList()
Definition: Explorer.cpp:136
std::vector< int > searchRoute(std::int8_t start, std::int8_t end)
Definition: Explorer.cpp:56

呼び出し関係図:

etrobocon2018_test::TEST ( SelectorTest  ,
getNextPositionInCenterIfColorSetInNodeIDTest   
)

SelectorTest.cpp204 行目に定義があります。

205  {
206  Selector obj;
207 
209  ASSERT_EQ(10, actual);
210 
212  ASSERT_EQ(6, actual);
213 
215  ASSERT_EQ(9, actual);
216 
218  ASSERT_EQ(5, actual);
219 
221  ASSERT_EQ(-1, actual);
222  }
std::int8_t getPositionOfCenterQuadirilateral(BlockColor color)
Definition: Selector.cpp:304
ブロック選択クラス
Definition: Selector.h:113

呼び出し関係図:

etrobocon2018_test::TEST ( ExplorerTest  ,
searchRouteFrom13To6Circumventing10Test   
)

ExplorerTest.cpp217 行目に定義があります。

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  }
void createBlockArea()
Definition: Explorer.cpp:3
std::vector< Node * > * getBlockAreaNodeList()
Definition: Explorer.cpp:136
std::vector< int > searchRoute(std::int8_t start, std::int8_t end)
Definition: Explorer.cpp:56

呼び出し関係図:

etrobocon2018_test::TEST ( SelectorTest  ,
checkPushingAndPoppingByPseudoStackTest   
)

SelectorTest.cpp225 行目に定義があります。

226  {
227  Selector obj;
228 
232 
233  auto actual = obj.popEvacuatedBlockPosition();
234  ASSERT_EQ(30, actual);
235  actual = obj.popEvacuatedBlockPosition();
236  ASSERT_EQ(20, actual);
237 
239 
240  actual = obj.popEvacuatedBlockPosition();
241  ASSERT_EQ(40, actual);
242  actual = obj.popEvacuatedBlockPosition();
243  ASSERT_EQ(10, actual);
244  }
std::int8_t popEvacuatedBlockPosition()
Definition: Selector.cpp:220
void pushEvacuatedBlockPosition(std::int8_t position)
Definition: Selector.cpp:214
ブロック選択クラス
Definition: Selector.h:113

呼び出し関係図:

etrobocon2018_test::TEST ( ExplorerTest  ,
searchRouteFrom11To5Circumventing6And9And10Test   
)

ExplorerTest.cpp237 行目に定義があります。

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  }
void createBlockArea()
Definition: Explorer.cpp:3
std::vector< Node * > * getBlockAreaNodeList()
Definition: Explorer.cpp:136
std::vector< int > searchRoute(std::int8_t start, std::int8_t end)
Definition: Explorer.cpp:56

呼び出し関係図:

etrobocon2018_test::TEST ( SelectorTest  ,
searchNodeInSenarioTest   
)

SelectorTest.cpp247 行目に定義があります。

248  {
249  Selector obj;
250  std::vector<std::int8_t> blockList{ { 8, 9, 11, 15 } };
251 
252  obj.setBlockPositionList(blockList);
253 
254  // 8を探す
255  auto actual8 = obj.searchBlockPosition(8);
256  ASSERT_EQ(8, actual8);
257 
258  // 9を探す
259  blockList = { 9, 10, 11, 15 };
260  obj.setBlockPositionList(blockList);
261  obj.addMovedBlockPosition(10);
262  auto actual9 = obj.searchBlockPosition(14);
263  ASSERT_EQ(9, actual9);
264 
265  // 11を探す
266  blockList = { 6, 10, 11, 15 };
267  obj.setBlockPositionList(blockList);
268  obj.addMovedBlockPosition(6);
269  auto actual11 = obj.searchBlockPosition(5);
270  ASSERT_EQ(11, actual11);
271 
272  // 15を探す
273  blockList = { 6, 9, 10, 15 };
274  obj.setBlockPositionList(blockList);
275  obj.addMovedBlockPosition(5);
276  auto actual15 = obj.searchBlockPosition(15);
277  ASSERT_EQ(15, actual15);
278  }
void setBlockPositionList(std::vector< std::int8_t > list)
Definition: Selector.cpp:196
void addMovedBlockPosition(std::int8_t position)
Definition: Selector.cpp:208
ブロック選択クラス
Definition: Selector.h:113
std::int8_t searchBlockPosition(std::int8_t currentPosition)
Definition: Selector.cpp:118

呼び出し関係図:

etrobocon2018_test::TEST ( ExplorerTest  ,
searchRouteInSenarioTest   
)

ExplorerTest.cpp256 行目に定義があります。

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  }
void createBlockArea()
Definition: Explorer.cpp:3
std::vector< Node * > * getBlockAreaNodeList()
Definition: Explorer.cpp:136
void setHasBlockIn(std::int8_t blockID)
Definition: Explorer.cpp:44
std::vector< int > searchRoute(std::int8_t start, std::int8_t end)
Definition: Explorer.cpp:56
void resetBlockArea()
Definition: Explorer.cpp:33

呼び出し関係図:

etrobocon2018_test::TEST ( NodeTest  ,
getValueOfNeighborListOf4x4Test   
)

NodeTest.cpp257 行目に定義があります。

258  {
259  Node node0;
260  Node node1(1);
261  Node node2(2);
262  Node node3(3);
263  Node node4(4);
264  Node node5(5);
265  Node node6(6);
266  Node node7(7);
267  Node node8(8);
268  Node node9(9);
269  Node node10(10);
270  Node node11(11);
271  Node node12(12);
272  Node node13(13);
273  Node node14(14);
274  Node node15(15);
275 
276  std::vector<Node*> neighbors0 = {&node1, &node4};
277  std::vector<Node*> neighbors1 = {&node0, &node2, &node5};
278  std::vector<Node*> neighbors2 = {&node1, &node3, &node6};
279  std::vector<Node*> neighbors3 = {&node2, &node7};
280  std::vector<Node*> neighbors4 = {&node0, &node5, &node8};
281  std::vector<Node*> neighbors5 = {&node1, &node4, &node6, &node9};
282  std::vector<Node*> neighbors6 = {&node2, &node5, &node7, &node10};
283  std::vector<Node*> neighbors7 = {&node3, &node6, &node11};
284  std::vector<Node*> neighbors8 = {&node4, &node9, &node12};
285  std::vector<Node*> neighbors9 = {&node5, &node8, &node10, &node13};
286  std::vector<Node*> neighbors10 = {&node6, &node9, &node11, &node14};
287  std::vector<Node*> neighbors11 = {&node7, &node10, &node15};
288  std::vector<Node*> neighbors12 = {&node8, &node13};
289  std::vector<Node*> neighbors13 = {&node9, &node12, &node14};
290  std::vector<Node*> neighbors14 = {&node10, &node13, &node15};
291  std::vector<Node*> neighbors15 = {&node11, &node14};
292 
293  node0.setNeighbors(&neighbors0);
294  node1.setNeighbors(&neighbors1);
295  node2.setNeighbors(&neighbors2);
296  node3.setNeighbors(&neighbors3);
297  node4.setNeighbors(&neighbors4);
298  node5.setNeighbors(&neighbors5);
299  node6.setNeighbors(&neighbors6);
300  node7.setNeighbors(&neighbors7);
301  node8.setNeighbors(&neighbors8);
302  node9.setNeighbors(&neighbors9);
303  node10.setNeighbors(&neighbors10);
304  node11.setNeighbors(&neighbors11);
305  node12.setNeighbors(&neighbors12);
306  node13.setNeighbors(&neighbors13);
307  node14.setNeighbors(&neighbors14);
308  node15.setNeighbors(&neighbors15);
309 
310  auto actual0 = node0.getNeighbors();
311  auto actual1 = node1.getNeighbors();
312  auto actual2 = node2.getNeighbors();
313  auto actual3 = node3.getNeighbors();
314  auto actual4 = node4.getNeighbors();
315  auto actual5 = node5.getNeighbors();
316  auto actual6 = node6.getNeighbors();
317  auto actual7 = node7.getNeighbors();
318  auto actual8 = node8.getNeighbors();
319  auto actual9 = node9.getNeighbors();
320  auto actual10 = node10.getNeighbors();
321  auto actual11 = node11.getNeighbors();
322  auto actual12 = node12.getNeighbors();
323  auto actual13 = node13.getNeighbors();
324  auto actual14 = node14.getNeighbors();
325  auto actual15 = node15.getNeighbors();
326 
327  ASSERT_EQ(&neighbors0, actual0);
328  ASSERT_EQ(&neighbors1, actual1);
329  ASSERT_EQ(&neighbors2, actual2);
330  ASSERT_EQ(&neighbors3, actual3);
331  ASSERT_EQ(&neighbors4, actual4);
332  ASSERT_EQ(&neighbors5, actual5);
333  ASSERT_EQ(&neighbors6, actual6);
334  ASSERT_EQ(&neighbors7, actual7);
335  ASSERT_EQ(&neighbors8, actual8);
336  ASSERT_EQ(&neighbors9, actual9);
337  ASSERT_EQ(&neighbors10, actual10);
338  ASSERT_EQ(&neighbors11, actual11);
339  ASSERT_EQ(&neighbors12, actual12);
340  ASSERT_EQ(&neighbors13, actual13);
341  ASSERT_EQ(&neighbors14, actual14);
342  ASSERT_EQ(&neighbors15, actual15);
343  }
Definition: Node.h:142
std::vector< Node * > * getNeighbors()
Definition: Node.cpp:8
void setNeighbors(std::vector< Node * > *nodes)
Definition: Node.cpp:3

呼び出し関係図:

etrobocon2018_test::TEST ( SelectorTest  ,
searchRouteInSenarioTest   
)

SelectorTest.cpp281 行目に定義があります。

282  {
283  Selector obj;
284  std::vector<std::int8_t> blockList{ { 8, 9, 11, 15 } };
285  // 8->Blue, 9->Red, 11->Yellow, 15->Green
286  std::vector<int> expectedMovingToBlue = { 8 };
287  std::vector<int> expectedCarryingBlue = { 8, 12, 13, 14, 10 };
288  std::vector<int> expectedMovingToRed = { 14, 13, 9 };
289  std::vector<int> expectedCarryingRed = { 9, 5, 6 };
290  std::vector<int> expectedMovingToYellow = { 5, 1, 2, 3, 7, 11 };
291  std::vector<int> expectedCarryingYellow = { 11, 7, 3, 2, 1, 5, 9 };
292  std::vector<int> expectedMovingToGreen = { 5, 4, 8, 12, 13, 14, 15 };
293  std::vector<int> expectedCarryingGreen = { 15, 14, 13, 12, 8, 4, 5 };
294  std::vector<int> expectedMovingTo11 = { 4, 0, 1, 2, 3, 7, 11 };
295 
296  obj.setBlockPositionList(blockList);
297 
298  // 8に移動する
299  auto actualMovingToBlue = obj.exploreNextOperation(8, Selector::Undefined);
300 
301  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
302  ASSERT_EQ(expectedMovingToBlue.size(), actualMovingToBlue.size());
303  for(unsigned int i = 0; i < actualMovingToBlue.size(); i++)
304  EXPECT_EQ(actualMovingToBlue[i], expectedMovingToBlue[i]);
305  ASSERT_FALSE(obj.isEvacuatingWithNext());
306  ASSERT_TRUE(obj.isMovingWithNext());
307  ASSERT_FALSE(obj.isCarryingWithNext());
308  ASSERT_FALSE(obj.isBackstepping());
309  ASSERT_EQ(8, obj.getBlockPositionList()[0]);
310  ASSERT_EQ(9, obj.getBlockPositionList()[1]);
311  ASSERT_EQ(11, obj.getBlockPositionList()[2]);
312  ASSERT_EQ(15, obj.getBlockPositionList()[3]);
313  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
314 
315  // 10に運搬する
316  auto actualCarryingBlue = obj.exploreNextOperation(8, Selector::Blue);
317 
318  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
319  ASSERT_EQ(expectedCarryingBlue.size(), actualCarryingBlue.size());
320  for(unsigned int i = 0; i < actualCarryingBlue.size(); i++)
321  EXPECT_EQ(actualCarryingBlue[i], expectedCarryingBlue[i]);
322  ASSERT_FALSE(obj.isEvacuatingWithNext());
323  ASSERT_FALSE(obj.isMovingWithNext());
324  ASSERT_TRUE(obj.isCarryingWithNext());
325  ASSERT_TRUE(obj.isBackstepping());
326  ASSERT_EQ(10, obj.getBlockPositionList()[0]);
327  ASSERT_EQ(9, obj.getBlockPositionList()[1]);
328  ASSERT_EQ(11, obj.getBlockPositionList()[2]);
329  ASSERT_EQ(15, obj.getBlockPositionList()[3]);
330  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
331 
332  // 9に移動する
333  auto actualMovingToRed = obj.exploreNextOperation(14, Selector::Undefined);
334 
335  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
336  ASSERT_EQ(expectedMovingToRed.size(), actualMovingToRed.size());
337  for(unsigned int i = 0; i < actualMovingToRed.size(); i++)
338  EXPECT_EQ(actualMovingToRed[i], expectedMovingToRed[i]);
339  ASSERT_FALSE(obj.isEvacuatingWithNext());
340  ASSERT_TRUE(obj.isMovingWithNext());
341  ASSERT_FALSE(obj.isCarryingWithNext());
342  ASSERT_FALSE(obj.isBackstepping());
343  ASSERT_EQ(10, obj.getBlockPositionList()[0]);
344  ASSERT_EQ(9, obj.getBlockPositionList()[1]);
345  ASSERT_EQ(11, obj.getBlockPositionList()[2]);
346  ASSERT_EQ(15, obj.getBlockPositionList()[3]);
347  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
348 
349  // 6に運搬する
350  auto actualCarryingRed = obj.exploreNextOperation(9, Selector::Red);
351 
352  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
353  ASSERT_EQ(expectedCarryingRed.size(), actualCarryingRed.size());
354  for(unsigned int i = 0; i < actualCarryingRed.size(); i++)
355  EXPECT_EQ(actualCarryingRed[i], expectedCarryingRed[i]);
356  ASSERT_FALSE(obj.isEvacuatingWithNext());
357  ASSERT_FALSE(obj.isMovingWithNext());
358  ASSERT_TRUE(obj.isCarryingWithNext());
359  ASSERT_TRUE(obj.isBackstepping());
360  ASSERT_EQ(10, obj.getBlockPositionList()[0]);
361  ASSERT_EQ(6, obj.getBlockPositionList()[1]);
362  ASSERT_EQ(11, obj.getBlockPositionList()[2]);
363  ASSERT_EQ(15, obj.getBlockPositionList()[3]);
364  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
365 
366  // 11に移動する
367  auto actualMovingToYellow = obj.exploreNextOperation(5, Selector::Undefined);
368 
369  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
370  ASSERT_EQ(expectedMovingToYellow.size(), actualMovingToYellow.size());
371  for(unsigned int i = 0; i < actualMovingToYellow.size(); i++)
372  EXPECT_EQ(actualMovingToYellow[i], expectedMovingToYellow[i]);
373  ASSERT_FALSE(obj.isEvacuatingWithNext());
374  ASSERT_TRUE(obj.isMovingWithNext());
375  ASSERT_FALSE(obj.isCarryingWithNext());
376  ASSERT_FALSE(obj.isBackstepping());
377  ASSERT_EQ(10, obj.getBlockPositionList()[0]);
378  ASSERT_EQ(6, obj.getBlockPositionList()[1]);
379  ASSERT_EQ(11, obj.getBlockPositionList()[2]);
380  ASSERT_EQ(15, obj.getBlockPositionList()[3]);
381  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
382 
383  // 9に運搬する
384  auto actualCarryingYellow = obj.exploreNextOperation(11, Selector::Yellow);
385 
386  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
387  ASSERT_EQ(expectedCarryingYellow.size(), actualCarryingYellow.size());
388  for(unsigned int i = 0; i < actualCarryingYellow.size(); i++)
389  EXPECT_EQ(actualCarryingYellow[i], expectedCarryingYellow[i]);
390  ASSERT_FALSE(obj.isEvacuatingWithNext());
391  ASSERT_FALSE(obj.isMovingWithNext());
392  ASSERT_TRUE(obj.isCarryingWithNext());
393  ASSERT_TRUE(obj.isBackstepping());
394  ASSERT_EQ(10, obj.getBlockPositionList()[0]);
395  ASSERT_EQ(6, obj.getBlockPositionList()[1]);
396  ASSERT_EQ(9, obj.getBlockPositionList()[2]);
397  ASSERT_EQ(15, obj.getBlockPositionList()[3]);
398  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
399 
400  // 15に移動する
401  auto actualMovingToGreen = obj.exploreNextOperation(5, Selector::Undefined);
402 
403  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
404  ASSERT_EQ(expectedMovingToGreen.size(), actualMovingToGreen.size());
405  for(unsigned int i = 0; i < actualMovingToGreen.size(); i++)
406  EXPECT_EQ(actualMovingToGreen[i], expectedMovingToGreen[i]);
407  ASSERT_FALSE(obj.isEvacuatingWithNext());
408  ASSERT_TRUE(obj.isMovingWithNext());
409  ASSERT_FALSE(obj.isCarryingWithNext());
410  ASSERT_FALSE(obj.isBackstepping());
411  ASSERT_EQ(10, obj.getBlockPositionList()[0]);
412  ASSERT_EQ(6, obj.getBlockPositionList()[1]);
413  ASSERT_EQ(9, obj.getBlockPositionList()[2]);
414  ASSERT_EQ(15, obj.getBlockPositionList()[3]);
415  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
416 
417  // 5に運搬する
418  auto actualCarryingGreen = obj.exploreNextOperation(15, Selector::Green);
419 
420  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
421  ASSERT_EQ(expectedCarryingGreen.size(), actualCarryingGreen.size());
422  for(unsigned int i = 0; i < actualCarryingGreen.size(); i++)
423  EXPECT_EQ(actualCarryingGreen[i], expectedCarryingGreen[i]);
424  ASSERT_FALSE(obj.isEvacuatingWithNext());
425  ASSERT_FALSE(obj.isMovingWithNext());
426  ASSERT_TRUE(obj.isCarryingWithNext());
427  ASSERT_TRUE(obj.isBackstepping());
428  ASSERT_EQ(10, obj.getBlockPositionList()[0]);
429  ASSERT_EQ(6, obj.getBlockPositionList()[1]);
430  ASSERT_EQ(9, obj.getBlockPositionList()[2]);
431  ASSERT_EQ(5, obj.getBlockPositionList()[3]);
432  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
433 
434  // 11に移動する
435  auto actualMovingTo11 = obj.exploreNextOperation(4, Selector::Undefined);
436 
437  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
438  ASSERT_EQ(expectedMovingTo11.size(), actualMovingTo11.size());
439  for(unsigned int i = 0; i < actualMovingTo11.size(); i++)
440  EXPECT_EQ(actualMovingTo11[i], expectedMovingTo11[i]);
441  ASSERT_FALSE(obj.isEvacuatingWithNext());
442  ASSERT_TRUE(obj.isMovingWithNext());
443  ASSERT_FALSE(obj.isCarryingWithNext());
444  ASSERT_FALSE(obj.isBackstepping());
445  ASSERT_EQ(10, obj.getBlockPositionList()[0]);
446  ASSERT_EQ(6, obj.getBlockPositionList()[1]);
447  ASSERT_EQ(9, obj.getBlockPositionList()[2]);
448  ASSERT_EQ(5, obj.getBlockPositionList()[3]);
449  ASSERT_TRUE(obj.isAlreadyAllBlockMoved());
450  }
bool isBackstepping()
Definition: Selector.cpp:294
std::vector< std::int8_t > getBlockPositionList()
Definition: Selector.cpp:203
bool isCarryingWithNext()
Definition: Selector.cpp:289
void setBlockPositionList(std::vector< std::int8_t > list)
Definition: Selector.cpp:196
bool isEvacuatingWithNext()
Definition: Selector.cpp:279
bool isMovingWithNext()
Definition: Selector.cpp:284
std::vector< int > exploreNextOperation(std::int8_t currentPosition, BlockColor color)
Definition: Selector.cpp:3
bool isAlreadyAllBlockMoved()
Definition: Selector.cpp:183
bool isBacksteppingBeforeNextOperation()
Definition: Selector.cpp:299
ブロック選択クラス
Definition: Selector.h:113

呼び出し関係図:

etrobocon2018_test::TEST ( NodeTest  ,
getValueOfNeighborListOfETRobocon2018Test   
)

NodeTest.cpp346 行目に定義があります。

347  {
348  std::vector<std::vector<int>> neighborsIDList = {
349  {1, 4},
350  {0, 2, 5},
351  {1, 3, 6},
352  {2, 7},
353  {0, 5, 8},
354  {1, 4, 6, 9},
355  {2, 5, 7, 10},
356  {3, 6, 11},
357  {4, 9, 12},
358  {5, 8, 10, 13},
359  {6, 9, 11, 14},
360  {7, 10, 15},
361  {8, 13},
362  {9, 12, 14},
363  {10, 13, 15},
364  {11, 14}};
365  int nodeCount = neighborsIDList.size();
366 
367  std::vector<Node> nodes(nodeCount);
368  std::vector<Node*> nodePtrs(nodeCount);
369  for (int i = 0; i < nodeCount; i++)
370  {
371  nodes[i].setNodeID(i);
372  nodePtrs[i] = &nodes[i];
373  }
374 
375  std::vector<std::vector<Node*>> neighbors(nodeCount);
376  for (int i = 0; i < nodeCount; i++)
377  {
378  for (int nodeID : neighborsIDList[i])
379  {
380  neighbors[i].push_back(nodePtrs[nodeID]);
381  }
382  }
383  for (int i = 0; i < nodeCount; i++)
384  {
385  nodePtrs[i]->setNeighbors(&neighbors[i]);
386  }
387 
388  auto actual0 = nodePtrs[0]->getNeighbors();
389  auto actual1 = nodePtrs[1]->getNeighbors();
390  auto actual2 = nodePtrs[2]->getNeighbors();
391  auto actual3 = nodePtrs[3]->getNeighbors();
392  auto actual4 = nodePtrs[4]->getNeighbors();
393  auto actual5 = nodePtrs[5]->getNeighbors();
394  auto actual6 = nodePtrs[6]->getNeighbors();
395  auto actual7 = nodePtrs[7]->getNeighbors();
396  auto actual8 = nodePtrs[8]->getNeighbors();
397  auto actual9 = nodePtrs[9]->getNeighbors();
398  auto actual10 = nodePtrs[10]->getNeighbors();
399  auto actual11 = nodePtrs[11]->getNeighbors();
400  auto actual12 = nodePtrs[12]->getNeighbors();
401  auto actual13 = nodePtrs[13]->getNeighbors();
402  auto actual14 = nodePtrs[14]->getNeighbors();
403  auto actual15 = nodePtrs[15]->getNeighbors();
404 
405  ASSERT_EQ(&neighbors[0], actual0);
406  ASSERT_EQ(&neighbors[1], actual1);
407  ASSERT_EQ(&neighbors[2], actual2);
408  ASSERT_EQ(&neighbors[3], actual3);
409  ASSERT_EQ(&neighbors[4], actual4);
410  ASSERT_EQ(&neighbors[5], actual5);
411  ASSERT_EQ(&neighbors[6], actual6);
412  ASSERT_EQ(&neighbors[7], actual7);
413  ASSERT_EQ(&neighbors[8], actual8);
414  ASSERT_EQ(&neighbors[9], actual9);
415  ASSERT_EQ(&neighbors[10], actual10);
416  ASSERT_EQ(&neighbors[11], actual11);
417  ASSERT_EQ(&neighbors[12], actual12);
418  ASSERT_EQ(&neighbors[13], actual13);
419  ASSERT_EQ(&neighbors[14], actual14);
420  ASSERT_EQ(&neighbors[15], actual15);
421 
422  ASSERT_EQ(&neighbors[10], actual0->at(1)->getNeighbors()->at(1)->getNeighbors()->at(2)->getNeighbors()->at(3)->getNeighbors());
423  }
etrobocon2018_test::TEST ( NodeTest  ,
getValueOfNeighborListOfETRobocon2017Test   
)

NodeTest.cpp426 行目に定義があります。

427  {
428  std::vector<std::vector<int>> neighborsIDList = {
429  {1, 4, 9},
430  {0, 2, 4, 5},
431  {1, 3, 5, 6},
432  {2, 6, 10},
433  {0, 1, 7, 9},
434  {1, 2, 7, 8},
435  {2, 3, 8, 9},
436  {4, 5, 11, 12},
437  {5, 6, 13, 14},
438  {0, 4, 11},
439  {3, 6, 14},
440  {7, 9, 12},
441  {7, 11, 13},
442  {8, 12, 14},
443  {8, 10, 13}};
444  int nodeCount = neighborsIDList.size();
445 
446  std::vector<Node> nodes(nodeCount);
447  std::vector<Node*> nodePtrs(nodeCount);
448  for (int i = 0; i < nodeCount; i++)
449  {
450  nodes[i].setNodeID(i);
451  nodePtrs[i] = &nodes[i];
452  }
453 
454  std::vector<std::vector<Node*>> neighbors(nodeCount);
455  for (int i = 0; i < nodeCount; i++)
456  {
457  for (int nodeID : neighborsIDList[i])
458  {
459  neighbors[i].push_back(nodePtrs[nodeID]);
460  }
461  }
462  for (int i = 0; i < nodeCount; i++)
463  {
464  nodePtrs[i]->setNeighbors(&neighbors[i]);
465  }
466 
467  auto actual0 = nodePtrs[0]->getNeighbors();
468  auto actual1 = nodePtrs[1]->getNeighbors();
469  auto actual2 = nodePtrs[2]->getNeighbors();
470  auto actual3 = nodePtrs[3]->getNeighbors();
471  auto actual4 = nodePtrs[4]->getNeighbors();
472  auto actual5 = nodePtrs[5]->getNeighbors();
473  auto actual6 = nodePtrs[6]->getNeighbors();
474  auto actual7 = nodePtrs[7]->getNeighbors();
475  auto actual8 = nodePtrs[8]->getNeighbors();
476  auto actual9 = nodePtrs[9]->getNeighbors();
477  auto actual10 = nodePtrs[10]->getNeighbors();
478  auto actual11 = nodePtrs[11]->getNeighbors();
479  auto actual12 = nodePtrs[12]->getNeighbors();
480  auto actual13 = nodePtrs[13]->getNeighbors();
481  auto actual14 = nodePtrs[14]->getNeighbors();
482 
483  ASSERT_EQ(&neighbors[0], actual0);
484  ASSERT_EQ(&neighbors[1], actual1);
485  ASSERT_EQ(&neighbors[2], actual2);
486  ASSERT_EQ(&neighbors[3], actual3);
487  ASSERT_EQ(&neighbors[4], actual4);
488  ASSERT_EQ(&neighbors[5], actual5);
489  ASSERT_EQ(&neighbors[6], actual6);
490  ASSERT_EQ(&neighbors[7], actual7);
491  ASSERT_EQ(&neighbors[8], actual8);
492  ASSERT_EQ(&neighbors[9], actual9);
493  ASSERT_EQ(&neighbors[10], actual10);
494  ASSERT_EQ(&neighbors[11], actual11);
495  ASSERT_EQ(&neighbors[12], actual12);
496  ASSERT_EQ(&neighbors[13], actual13);
497  ASSERT_EQ(&neighbors[14], actual14);
498  }
etrobocon2018_test::TEST ( SelectorTest  ,
searchRouteWhenPathBlocked   
)

SelectorTest.cpp453 行目に定義があります。

454  {
455  Selector obj;
456  std::vector<std::int8_t> blockList{ { 4, 8, 9, 13 } };
457  // 8->Blue, 9->Red, 13->Yellow, 4->Green
458  // std::vector<int> expectedMovingToBlue = {8};
459  std::vector<int> expectedEvacuatingBlue = { 8, 12 };
460  std::vector<int> expectedMovingToRed = { 8, 9 };
461  std::vector<int> expectedCarryingRed = { 9, 10, 6 };
462  std::vector<int> expectedReturningToBlue = { 10, 9, 8, 12 };
463  std::vector<int> expectedCarryingBlue = { 12, 8, 9, 10 };
464  std::vector<int> expectedMovingToYellow = { 9, 13 };
465  std::vector<int> expectedCarryingYellow = { 13, 9 };
466  std::vector<int> expectedMovingToGreen = { 13, 12, 8, 4 };
467  std::vector<int> expectedCarryingGreen = { 4, 5 };
468  std::vector<int> expectedMovingTo11 = { 4, 0, 1, 2, 3, 7, 11 };
469 
470  obj.setBlockPositionList(blockList);
471 
472  // 8に移動する
474  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
475  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
476 
477  // 12に一時避難する
478  auto actualEvacuatingBlue = obj.exploreNextOperation(8, Selector::Blue);
479 
480  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
481  ASSERT_EQ(expectedEvacuatingBlue.size(), actualEvacuatingBlue.size());
482  for(unsigned int i = 0; i < actualEvacuatingBlue.size(); i++)
483  EXPECT_EQ(actualEvacuatingBlue[i], expectedEvacuatingBlue[i]);
484  ASSERT_TRUE(obj.isEvacuatingWithNext());
485  ASSERT_FALSE(obj.isMovingWithNext());
486  ASSERT_FALSE(obj.isCarryingWithNext());
487  ASSERT_TRUE(obj.isBackstepping());
488  ASSERT_EQ(4, obj.getBlockPositionList()[0]);
489  ASSERT_EQ(12, obj.getBlockPositionList()[1]);
490  ASSERT_EQ(9, obj.getBlockPositionList()[2]);
491  ASSERT_EQ(13, obj.getBlockPositionList()[3]);
492  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
493 
494  // 9に移動する
495  auto actualMovingToRed = obj.exploreNextOperation(8, Selector::Undefined);
496 
497  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
498  ASSERT_EQ(expectedMovingToRed.size(), actualMovingToRed.size());
499  for(unsigned int i = 0; i < actualMovingToRed.size(); i++)
500  EXPECT_EQ(actualMovingToRed[i], expectedMovingToRed[i]);
501  ASSERT_FALSE(obj.isEvacuatingWithNext());
502  ASSERT_TRUE(obj.isMovingWithNext());
503  ASSERT_FALSE(obj.isCarryingWithNext());
504  ASSERT_FALSE(obj.isBackstepping());
505  ASSERT_EQ(4, obj.getBlockPositionList()[0]);
506  ASSERT_EQ(12, obj.getBlockPositionList()[1]);
507  ASSERT_EQ(9, obj.getBlockPositionList()[2]);
508  ASSERT_EQ(13, obj.getBlockPositionList()[3]);
509  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
510 
511  // 6に運搬する
512  auto actualCarryingRed = obj.exploreNextOperation(9, Selector::Red);
513 
514  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
515  ASSERT_EQ(expectedCarryingRed.size(), actualCarryingRed.size());
516  for(unsigned int i = 0; i < actualCarryingRed.size(); i++)
517  EXPECT_EQ(actualCarryingRed[i], expectedCarryingRed[i]);
518  ASSERT_FALSE(obj.isEvacuatingWithNext());
519  ASSERT_FALSE(obj.isMovingWithNext());
520  ASSERT_TRUE(obj.isCarryingWithNext());
521  ASSERT_TRUE(obj.isBackstepping());
522  ASSERT_EQ(4, obj.getBlockPositionList()[0]);
523  ASSERT_EQ(12, obj.getBlockPositionList()[1]);
524  ASSERT_EQ(6, obj.getBlockPositionList()[2]);
525  ASSERT_EQ(13, obj.getBlockPositionList()[3]);
526  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
527 
528  // 12に戻る
529  auto actualReturningToBlue = obj.exploreNextOperation(10, Selector::Undefined);
530 
531  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
532  ASSERT_EQ(expectedReturningToBlue.size(), actualReturningToBlue.size());
533  for(unsigned int i = 0; i < actualReturningToBlue.size(); i++)
534  EXPECT_EQ(actualReturningToBlue[i], expectedReturningToBlue[i]);
535  ASSERT_FALSE(obj.isEvacuatingWithNext());
536  ASSERT_TRUE(obj.isMovingWithNext());
537  ASSERT_FALSE(obj.isCarryingWithNext());
538  ASSERT_FALSE(obj.isBackstepping());
539  ASSERT_EQ(4, obj.getBlockPositionList()[0]);
540  ASSERT_EQ(12, obj.getBlockPositionList()[1]);
541  ASSERT_EQ(6, obj.getBlockPositionList()[2]);
542  ASSERT_EQ(13, obj.getBlockPositionList()[3]);
543  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
544 
545  // 10に運搬する
546  auto actualCarryingBlue = obj.exploreNextOperation(12, Selector::Blue);
547 
548  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
549  ASSERT_EQ(expectedCarryingBlue.size(), actualCarryingBlue.size());
550  for(unsigned int i = 0; i < actualCarryingBlue.size(); i++)
551  EXPECT_EQ(actualCarryingBlue[i], expectedCarryingBlue[i]);
552  ASSERT_FALSE(obj.isEvacuatingWithNext());
553  ASSERT_FALSE(obj.isMovingWithNext());
554  ASSERT_TRUE(obj.isCarryingWithNext());
555  ASSERT_TRUE(obj.isBackstepping());
556  ASSERT_EQ(4, obj.getBlockPositionList()[0]);
557  ASSERT_EQ(10, obj.getBlockPositionList()[1]);
558  ASSERT_EQ(6, obj.getBlockPositionList()[2]);
559  ASSERT_EQ(13, obj.getBlockPositionList()[3]);
560  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
561 
562  // 13に移動する
563  auto actualMovingToYellow = obj.exploreNextOperation(9, Selector::Undefined);
564 
565  ASSERT_EQ(expectedMovingToYellow.size(), actualMovingToYellow.size());
566  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
567  for(unsigned int i = 0; i < actualMovingToYellow.size(); i++)
568  EXPECT_EQ(actualMovingToYellow[i], expectedMovingToYellow[i]);
569  ASSERT_FALSE(obj.isEvacuatingWithNext());
570  ASSERT_TRUE(obj.isMovingWithNext());
571  ASSERT_FALSE(obj.isCarryingWithNext());
572  ASSERT_FALSE(obj.isBackstepping());
573  ASSERT_EQ(4, obj.getBlockPositionList()[0]);
574  ASSERT_EQ(10, obj.getBlockPositionList()[1]);
575  ASSERT_EQ(6, obj.getBlockPositionList()[2]);
576  ASSERT_EQ(13, obj.getBlockPositionList()[3]);
577  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
578 
579  // 9に運搬する
580  auto actualCarryingYellow = obj.exploreNextOperation(13, Selector::Yellow);
581 
582  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
583  ASSERT_EQ(expectedCarryingYellow.size(), actualCarryingYellow.size());
584  for(unsigned int i = 0; i < actualCarryingYellow.size(); i++)
585  EXPECT_EQ(actualCarryingYellow[i], expectedCarryingYellow[i]);
586  ASSERT_FALSE(obj.isEvacuatingWithNext());
587  ASSERT_FALSE(obj.isMovingWithNext());
588  ASSERT_TRUE(obj.isCarryingWithNext());
589  ASSERT_TRUE(obj.isBackstepping());
590  ASSERT_EQ(4, obj.getBlockPositionList()[0]);
591  ASSERT_EQ(10, obj.getBlockPositionList()[1]);
592  ASSERT_EQ(6, obj.getBlockPositionList()[2]);
593  ASSERT_EQ(9, obj.getBlockPositionList()[3]);
594  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
595 
596  // 4に移動する
597  auto actualMovingToGreen = obj.exploreNextOperation(13, Selector::Undefined);
598 
599  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
600  ASSERT_EQ(expectedMovingToGreen.size(), actualMovingToGreen.size());
601  for(unsigned int i = 0; i < actualMovingToGreen.size(); i++)
602  EXPECT_EQ(actualMovingToGreen[i], expectedMovingToGreen[i]);
603  ASSERT_FALSE(obj.isEvacuatingWithNext());
604  ASSERT_TRUE(obj.isMovingWithNext());
605  ASSERT_FALSE(obj.isCarryingWithNext());
606  ASSERT_FALSE(obj.isBackstepping());
607  ASSERT_EQ(4, obj.getBlockPositionList()[0]);
608  ASSERT_EQ(10, obj.getBlockPositionList()[1]);
609  ASSERT_EQ(6, obj.getBlockPositionList()[2]);
610  ASSERT_EQ(9, obj.getBlockPositionList()[3]);
611  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
612 
613  // 5に運搬する
614  auto actualCarryingGreen = obj.exploreNextOperation(4, Selector::Green);
615 
616  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
617  ASSERT_EQ(expectedCarryingGreen.size(), actualCarryingGreen.size());
618  for(unsigned int i = 0; i < actualCarryingGreen.size(); i++)
619  EXPECT_EQ(actualCarryingGreen[i], expectedCarryingGreen[i]);
620  ASSERT_FALSE(obj.isEvacuatingWithNext());
621  ASSERT_FALSE(obj.isMovingWithNext());
622  ASSERT_TRUE(obj.isCarryingWithNext());
623  ASSERT_TRUE(obj.isBackstepping());
624  ASSERT_EQ(5, obj.getBlockPositionList()[0]);
625  ASSERT_EQ(10, obj.getBlockPositionList()[1]);
626  ASSERT_EQ(6, obj.getBlockPositionList()[2]);
627  ASSERT_EQ(9, obj.getBlockPositionList()[3]);
628  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
629 
630  // 11に移動する
631  auto actualMovingTo11 = obj.exploreNextOperation(4, Selector::Undefined);
632 
633  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
634  ASSERT_EQ(expectedMovingTo11.size(), actualMovingTo11.size());
635  for(unsigned int i = 0; i < actualMovingTo11.size(); i++)
636  EXPECT_EQ(actualMovingTo11[i], expectedMovingTo11[i]);
637  ASSERT_FALSE(obj.isEvacuatingWithNext());
638  ASSERT_TRUE(obj.isMovingWithNext());
639  ASSERT_FALSE(obj.isCarryingWithNext());
640  ASSERT_FALSE(obj.isBackstepping());
641  ASSERT_EQ(5, obj.getBlockPositionList()[0]);
642  ASSERT_EQ(10, obj.getBlockPositionList()[1]);
643  ASSERT_EQ(6, obj.getBlockPositionList()[2]);
644  ASSERT_EQ(9, obj.getBlockPositionList()[3]);
645  ASSERT_TRUE(obj.isAlreadyAllBlockMoved());
646  }
bool isBackstepping()
Definition: Selector.cpp:294
std::vector< std::int8_t > getBlockPositionList()
Definition: Selector.cpp:203
bool isCarryingWithNext()
Definition: Selector.cpp:289
void setBlockPositionList(std::vector< std::int8_t > list)
Definition: Selector.cpp:196
bool isEvacuatingWithNext()
Definition: Selector.cpp:279
bool isMovingWithNext()
Definition: Selector.cpp:284
std::vector< int > exploreNextOperation(std::int8_t currentPosition, BlockColor color)
Definition: Selector.cpp:3
bool isAlreadyAllBlockMoved()
Definition: Selector.cpp:183
bool isBacksteppingBeforeNextOperation()
Definition: Selector.cpp:299
ブロック選択クラス
Definition: Selector.h:113

呼び出し関係図:

etrobocon2018_test::TEST ( SelectorTest  ,
searchRouteWhenNextMovedPositionIsBuried   
)

SelectorTest.cpp649 行目に定義があります。

650  {
651  Selector obj;
652  std::vector<std::int8_t> blockList{ { 3, 6, 8, 10 } };
653  // 8->Blue, 3->Red, 6->Yellow, 10->Green
654  // std::vector<int> expectedMovingToBlue = {8};
655  std::vector<int> expectedEvacuatingBlue = { 8, 12 };
656  std::vector<int> expectedMovingToGreen = { 8, 9, 10 };
657  std::vector<int> expectedCarryingGreen = { 10, 9, 5 };
658  std::vector<int> expectedReturningToBlue = { 9, 13, 12 };
659  std::vector<int> expectedCarryingBlue = { 12, 13, 14, 10 };
660  std::vector<int> expectedMovingToYellow = { 14, 15, 11, 7, 6 };
661  std::vector<int> expectedCarryingYellow = { 6, 7, 11, 15, 14, 13, 9 };
662  std::vector<int> expectedMovingToRed = { 13, 14, 15, 11, 7, 3 };
663  std::vector<int> expectedCarryingRed = { 3, 7, 6 };
664  std::vector<int> expectedMovingTo11 = { 7, 11 };
665 
666  obj.setBlockPositionList(blockList);
667 
668  // 8に移動する
670  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
671  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
672 
673  // 12に一時避難する
674  auto actualEvacuatingBlue = obj.exploreNextOperation(8, Selector::Blue);
675 
676  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
677  ASSERT_EQ(expectedEvacuatingBlue.size(), actualEvacuatingBlue.size());
678  for(unsigned int i = 0; i < actualEvacuatingBlue.size(); i++)
679  EXPECT_EQ(actualEvacuatingBlue[i], expectedEvacuatingBlue[i]);
680  ASSERT_TRUE(obj.isEvacuatingWithNext());
681  ASSERT_FALSE(obj.isMovingWithNext());
682  ASSERT_FALSE(obj.isCarryingWithNext());
683  ASSERT_TRUE(obj.isBackstepping());
684  ASSERT_EQ(3, obj.getBlockPositionList()[0]);
685  ASSERT_EQ(6, obj.getBlockPositionList()[1]);
686  ASSERT_EQ(12, obj.getBlockPositionList()[2]);
687  ASSERT_EQ(10, obj.getBlockPositionList()[3]);
688  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
689 
690  // 10に移動する
691  auto actualMovingToGreen = obj.exploreNextOperation(8, Selector::Undefined);
692 
693  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
694  ASSERT_EQ(expectedMovingToGreen.size(), actualMovingToGreen.size());
695  for(unsigned int i = 0; i < actualMovingToGreen.size(); i++)
696  EXPECT_EQ(actualMovingToGreen[i], expectedMovingToGreen[i]);
697  ASSERT_FALSE(obj.isEvacuatingWithNext());
698  ASSERT_TRUE(obj.isMovingWithNext());
699  ASSERT_FALSE(obj.isCarryingWithNext());
700  ASSERT_FALSE(obj.isBackstepping());
701  ASSERT_EQ(3, obj.getBlockPositionList()[0]);
702  ASSERT_EQ(6, obj.getBlockPositionList()[1]);
703  ASSERT_EQ(12, obj.getBlockPositionList()[2]);
704  ASSERT_EQ(10, obj.getBlockPositionList()[3]);
705  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
706 
707  // 5に運搬する
708  auto actualCarryingGreen = obj.exploreNextOperation(10, Selector::Green);
709 
710  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
711  ASSERT_EQ(expectedCarryingGreen.size(), actualCarryingGreen.size());
712  for(unsigned int i = 0; i < actualCarryingGreen.size(); i++)
713  EXPECT_EQ(actualCarryingGreen[i], expectedCarryingGreen[i]);
714  ASSERT_FALSE(obj.isEvacuatingWithNext());
715  ASSERT_FALSE(obj.isMovingWithNext());
716  ASSERT_TRUE(obj.isCarryingWithNext());
717  ASSERT_TRUE(obj.isBackstepping());
718  ASSERT_EQ(3, obj.getBlockPositionList()[0]);
719  ASSERT_EQ(6, obj.getBlockPositionList()[1]);
720  ASSERT_EQ(12, obj.getBlockPositionList()[2]);
721  ASSERT_EQ(5, obj.getBlockPositionList()[3]);
722  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
723 
724  // 12に移動する
725  auto actualReturningToBlue = obj.exploreNextOperation(9, Selector::Undefined);
726 
727  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
728  ASSERT_EQ(expectedReturningToBlue.size(), actualReturningToBlue.size());
729  for(unsigned int i = 0; i < actualReturningToBlue.size(); i++)
730  EXPECT_EQ(actualReturningToBlue[i], expectedReturningToBlue[i]);
731  ASSERT_FALSE(obj.isEvacuatingWithNext());
732  ASSERT_TRUE(obj.isMovingWithNext());
733  ASSERT_FALSE(obj.isCarryingWithNext());
734  ASSERT_FALSE(obj.isBackstepping());
735  ASSERT_EQ(3, obj.getBlockPositionList()[0]);
736  ASSERT_EQ(6, obj.getBlockPositionList()[1]);
737  ASSERT_EQ(12, obj.getBlockPositionList()[2]);
738  ASSERT_EQ(5, obj.getBlockPositionList()[3]);
739  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
740 
741  // 10に運搬する
742  auto actualCarryingBlue = obj.exploreNextOperation(12, Selector::Blue);
743 
744  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
745  ASSERT_EQ(expectedCarryingBlue.size(), actualCarryingBlue.size());
746  for(unsigned int i = 0; i < actualCarryingBlue.size(); i++)
747  EXPECT_EQ(actualCarryingBlue[i], expectedCarryingBlue[i]);
748  ASSERT_FALSE(obj.isEvacuatingWithNext());
749  ASSERT_FALSE(obj.isMovingWithNext());
750  ASSERT_TRUE(obj.isCarryingWithNext());
751  ASSERT_TRUE(obj.isBackstepping());
752  ASSERT_EQ(3, obj.getBlockPositionList()[0]);
753  ASSERT_EQ(6, obj.getBlockPositionList()[1]);
754  ASSERT_EQ(10, obj.getBlockPositionList()[2]);
755  ASSERT_EQ(5, obj.getBlockPositionList()[3]);
756  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
757 
758  // 6に移動する
759  auto actualMovingToYellow = obj.exploreNextOperation(14, Selector::Undefined);
760 
761  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
762  ASSERT_EQ(expectedMovingToYellow.size(), actualMovingToYellow.size());
763  for(unsigned int i = 0; i < actualMovingToYellow.size(); i++)
764  EXPECT_EQ(actualMovingToYellow[i], expectedMovingToYellow[i]);
765  ASSERT_FALSE(obj.isEvacuatingWithNext());
766  ASSERT_TRUE(obj.isMovingWithNext());
767  ASSERT_FALSE(obj.isCarryingWithNext());
768  ASSERT_FALSE(obj.isBackstepping());
769  ASSERT_EQ(3, obj.getBlockPositionList()[0]);
770  ASSERT_EQ(6, obj.getBlockPositionList()[1]);
771  ASSERT_EQ(10, obj.getBlockPositionList()[2]);
772  ASSERT_EQ(5, obj.getBlockPositionList()[3]);
773  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
774 
775  // 9に運搬する
776  auto actualCarryingYellow = obj.exploreNextOperation(6, Selector::Yellow);
777 
778  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
779  ASSERT_EQ(expectedCarryingYellow.size(), actualCarryingYellow.size());
780  for(unsigned int i = 0; i < actualCarryingYellow.size(); i++)
781  EXPECT_EQ(actualCarryingYellow[i], expectedCarryingYellow[i]);
782  ASSERT_FALSE(obj.isEvacuatingWithNext());
783  ASSERT_FALSE(obj.isMovingWithNext());
784  ASSERT_TRUE(obj.isCarryingWithNext());
785  ASSERT_TRUE(obj.isBackstepping());
786  ASSERT_EQ(3, obj.getBlockPositionList()[0]);
787  ASSERT_EQ(9, obj.getBlockPositionList()[1]);
788  ASSERT_EQ(10, obj.getBlockPositionList()[2]);
789  ASSERT_EQ(5, obj.getBlockPositionList()[3]);
790  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
791 
792  // 3に移動する
793  auto actualMovingToRed = obj.exploreNextOperation(13, Selector::Undefined);
794 
795  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
796  ASSERT_EQ(expectedMovingToRed.size(), actualMovingToRed.size());
797  for(unsigned int i = 0; i < actualMovingToRed.size(); i++)
798  EXPECT_EQ(actualMovingToRed[i], expectedMovingToRed[i]);
799  ASSERT_FALSE(obj.isEvacuatingWithNext());
800  ASSERT_TRUE(obj.isMovingWithNext());
801  ASSERT_FALSE(obj.isCarryingWithNext());
802  ASSERT_FALSE(obj.isBackstepping());
803  ASSERT_EQ(3, obj.getBlockPositionList()[0]);
804  ASSERT_EQ(9, obj.getBlockPositionList()[1]);
805  ASSERT_EQ(10, obj.getBlockPositionList()[2]);
806  ASSERT_EQ(5, obj.getBlockPositionList()[3]);
807  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
808 
809  // 6に運搬する
810  auto actualCarryingRed = obj.exploreNextOperation(3, Selector::Red);
811 
812  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
813  ASSERT_EQ(expectedCarryingRed.size(), actualCarryingRed.size());
814  for(unsigned int i = 0; i < actualCarryingRed.size(); i++)
815  EXPECT_EQ(actualCarryingRed[i], expectedCarryingRed[i]);
816  ASSERT_FALSE(obj.isEvacuatingWithNext());
817  ASSERT_FALSE(obj.isMovingWithNext());
818  ASSERT_TRUE(obj.isCarryingWithNext());
819  ASSERT_TRUE(obj.isBackstepping());
820  ASSERT_EQ(6, obj.getBlockPositionList()[0]);
821  ASSERT_EQ(9, obj.getBlockPositionList()[1]);
822  ASSERT_EQ(10, obj.getBlockPositionList()[2]);
823  ASSERT_EQ(5, obj.getBlockPositionList()[3]);
824  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
825 
826  // 11に移動する
827  auto actualMovingTo11 = obj.exploreNextOperation(7, Selector::Undefined);
828 
829  ASSERT_EQ(expectedMovingTo11.size(), actualMovingTo11.size());
830  for(unsigned int i = 0; i < actualMovingTo11.size(); i++)
831  EXPECT_EQ(actualMovingTo11[i], expectedMovingTo11[i]);
832  ASSERT_FALSE(obj.isEvacuatingWithNext());
833  ASSERT_TRUE(obj.isMovingWithNext());
834  ASSERT_FALSE(obj.isCarryingWithNext());
835  ASSERT_FALSE(obj.isBackstepping());
836  ASSERT_EQ(6, obj.getBlockPositionList()[0]);
837  ASSERT_EQ(9, obj.getBlockPositionList()[1]);
838  ASSERT_EQ(10, obj.getBlockPositionList()[2]);
839  ASSERT_EQ(5, obj.getBlockPositionList()[3]);
840  ASSERT_TRUE(obj.isAlreadyAllBlockMoved());
841  }
bool isBackstepping()
Definition: Selector.cpp:294
std::vector< std::int8_t > getBlockPositionList()
Definition: Selector.cpp:203
bool isCarryingWithNext()
Definition: Selector.cpp:289
void setBlockPositionList(std::vector< std::int8_t > list)
Definition: Selector.cpp:196
bool isEvacuatingWithNext()
Definition: Selector.cpp:279
bool isMovingWithNext()
Definition: Selector.cpp:284
std::vector< int > exploreNextOperation(std::int8_t currentPosition, BlockColor color)
Definition: Selector.cpp:3
bool isAlreadyAllBlockMoved()
Definition: Selector.cpp:183
bool isBacksteppingBeforeNextOperation()
Definition: Selector.cpp:299
ブロック選択クラス
Definition: Selector.h:113

呼び出し関係図:

etrobocon2018_test::TEST ( SelectorTest  ,
searchRouteWhenNextOfNextOfNextMovedPositionIsBuried   
)

SelectorTest.cpp844 行目に定義があります。

845  {
846  Selector obj;
847  std::vector<std::int8_t> blockList{ { 5, 6, 8, 10 } };
848  // 8->Blue, 10->Red, 5->Yellow, 6->Green
849  // std::vector<int> expectedMovingToBlue = {8};
850  // std::vector<int> expectedEvacuatingBlue = {8, 12};
851  // std::vector<int> expectedMovingToRed = {8, 9, 10};
852  std::vector<int> expectedMovingToGreen = { 9, 13, 14, 15, 11, 7, 6 };
853  std::vector<int> expectedMovingToYellow = { 7, 3, 2, 1, 5 };
854  std::vector<int> expectedCarryingYellow = { 5, 9 };
855  std::vector<int> expectedReturningToGreen = { 5, 6 };
856  std::vector<int> expectedCarryingGreen = { 6, 5 };
857  std::vector<int> expectedReturningToRed = { 6, 10 };
858  std::vector<int> expectedCarryingRed = { 10, 6 };
859  std::vector<int> expectedReturningToBlue = { 10, 14, 13, 12 };
860  std::vector<int> expectedCarryingBlue = { 12, 13, 14, 10 };
861  std::vector<int> expectedMovingTo11 = { 14, 15, 11 };
862 
863  obj.setBlockPositionList(blockList);
864 
865  // 8に移動する
867  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
868  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
869 
870  // 12に一時避難する
872  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
873  ASSERT_EQ(5, obj.getBlockPositionList()[0]);
874  ASSERT_EQ(6, obj.getBlockPositionList()[1]);
875  ASSERT_EQ(12, obj.getBlockPositionList()[2]);
876  ASSERT_EQ(10, obj.getBlockPositionList()[3]);
877  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
878 
879  // 10に移動する
881  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
882  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
883 
884  // 6に移動する
885  auto actualMovingToGreen = obj.exploreNextOperation(10, Selector::Red);
886 
887  ASSERT_TRUE(obj.isBacksteppingBeforeNextOperation());
888  ASSERT_EQ(expectedMovingToGreen.size(), actualMovingToGreen.size());
889  for(unsigned int i = 0; i < actualMovingToGreen.size(); i++)
890  EXPECT_EQ(actualMovingToGreen[i], expectedMovingToGreen[i]);
891  ASSERT_FALSE(obj.isEvacuatingWithNext());
892  ASSERT_TRUE(obj.isMovingWithNext());
893  ASSERT_FALSE(obj.isCarryingWithNext());
894  ASSERT_FALSE(obj.isBackstepping());
895  ASSERT_EQ(5, obj.getBlockPositionList()[0]);
896  ASSERT_EQ(6, obj.getBlockPositionList()[1]);
897  ASSERT_EQ(12, obj.getBlockPositionList()[2]);
898  ASSERT_EQ(10, obj.getBlockPositionList()[3]);
899  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
900 
901  // 5に移動する
902  auto actualMovingToYellow = obj.exploreNextOperation(6, Selector::Green);
903 
904  ASSERT_TRUE(obj.isBacksteppingBeforeNextOperation());
905  ASSERT_EQ(expectedMovingToYellow.size(), actualMovingToYellow.size());
906  for(unsigned int i = 0; i < actualMovingToYellow.size(); i++)
907  EXPECT_EQ(actualMovingToYellow[i], expectedMovingToYellow[i]);
908  ASSERT_FALSE(obj.isEvacuatingWithNext());
909  ASSERT_TRUE(obj.isMovingWithNext());
910  ASSERT_FALSE(obj.isCarryingWithNext());
911  ASSERT_FALSE(obj.isBackstepping());
912  ASSERT_EQ(5, obj.getBlockPositionList()[0]);
913  ASSERT_EQ(6, obj.getBlockPositionList()[1]);
914  ASSERT_EQ(12, obj.getBlockPositionList()[2]);
915  ASSERT_EQ(10, obj.getBlockPositionList()[3]);
916  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
917 
918  // 9に運搬する
919  auto actualCarryingYellow = obj.exploreNextOperation(5, Selector::Yellow);
920 
921  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
922  ASSERT_EQ(expectedCarryingYellow.size(), actualCarryingYellow.size());
923  for(unsigned int i = 0; i < actualCarryingYellow.size(); i++)
924  EXPECT_EQ(actualCarryingYellow[i], expectedCarryingYellow[i]);
925  ASSERT_FALSE(obj.isEvacuatingWithNext());
926  ASSERT_FALSE(obj.isMovingWithNext());
927  ASSERT_TRUE(obj.isCarryingWithNext());
928  ASSERT_TRUE(obj.isBackstepping());
929  ASSERT_EQ(9, obj.getBlockPositionList()[0]);
930  ASSERT_EQ(6, obj.getBlockPositionList()[1]);
931  ASSERT_EQ(12, obj.getBlockPositionList()[2]);
932  ASSERT_EQ(10, obj.getBlockPositionList()[3]);
933  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
934 
935  // 6に戻る
936  auto actualReturningToGreen = obj.exploreNextOperation(5, Selector::Undefined);
937 
938  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
939  ASSERT_EQ(expectedReturningToGreen.size(), actualReturningToGreen.size());
940  for(unsigned int i = 0; i < actualReturningToGreen.size(); i++)
941  EXPECT_EQ(actualReturningToGreen[i], expectedReturningToGreen[i]);
942  ASSERT_FALSE(obj.isEvacuatingWithNext());
943  ASSERT_TRUE(obj.isMovingWithNext());
944  ASSERT_FALSE(obj.isCarryingWithNext());
945  ASSERT_FALSE(obj.isBackstepping());
946  ASSERT_EQ(9, obj.getBlockPositionList()[0]);
947  ASSERT_EQ(6, obj.getBlockPositionList()[1]);
948  ASSERT_EQ(12, obj.getBlockPositionList()[2]);
949  ASSERT_EQ(10, obj.getBlockPositionList()[3]);
950  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
951 
952  // 5に運搬する
953  auto actualCarryingGreen = obj.exploreNextOperation(6, Selector::Green);
954 
955  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
956  ASSERT_EQ(expectedCarryingGreen.size(), actualCarryingGreen.size());
957  for(unsigned int i = 0; i < actualCarryingGreen.size(); i++)
958  EXPECT_EQ(actualCarryingGreen[i], expectedCarryingGreen[i]);
959  ASSERT_FALSE(obj.isEvacuatingWithNext());
960  ASSERT_FALSE(obj.isMovingWithNext());
961  ASSERT_TRUE(obj.isCarryingWithNext());
962  ASSERT_TRUE(obj.isBackstepping());
963  ASSERT_EQ(9, obj.getBlockPositionList()[0]);
964  ASSERT_EQ(5, obj.getBlockPositionList()[1]);
965  ASSERT_EQ(12, obj.getBlockPositionList()[2]);
966  ASSERT_EQ(10, obj.getBlockPositionList()[3]);
967  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
968 
969  // 10に戻る
970  auto actualReturningToRed = obj.exploreNextOperation(6, Selector::Undefined);
971 
972  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
973  ASSERT_EQ(expectedReturningToRed.size(), actualReturningToRed.size());
974  for(unsigned int i = 0; i < actualReturningToRed.size(); i++)
975  EXPECT_EQ(actualReturningToRed[i], expectedReturningToRed[i]);
976  ASSERT_FALSE(obj.isEvacuatingWithNext());
977  ASSERT_TRUE(obj.isMovingWithNext());
978  ASSERT_FALSE(obj.isCarryingWithNext());
979  ASSERT_FALSE(obj.isBackstepping());
980  ASSERT_EQ(9, obj.getBlockPositionList()[0]);
981  ASSERT_EQ(5, obj.getBlockPositionList()[1]);
982  ASSERT_EQ(12, obj.getBlockPositionList()[2]);
983  ASSERT_EQ(10, obj.getBlockPositionList()[3]);
984  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
985 
986  // 6に運搬する
987  auto actualCarryingRed = obj.exploreNextOperation(10, Selector::Red);
988 
989  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
990  ASSERT_EQ(expectedCarryingRed.size(), actualCarryingRed.size());
991  for(unsigned int i = 0; i < actualCarryingRed.size(); i++)
992  EXPECT_EQ(actualCarryingRed[i], expectedCarryingRed[i]);
993  ASSERT_FALSE(obj.isEvacuatingWithNext());
994  ASSERT_FALSE(obj.isMovingWithNext());
995  ASSERT_TRUE(obj.isCarryingWithNext());
996  ASSERT_TRUE(obj.isBackstepping());
997  ASSERT_EQ(9, obj.getBlockPositionList()[0]);
998  ASSERT_EQ(5, obj.getBlockPositionList()[1]);
999  ASSERT_EQ(12, obj.getBlockPositionList()[2]);
1000  ASSERT_EQ(6, obj.getBlockPositionList()[3]);
1001  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
1002 
1003  // 12に戻る
1004  auto actualReturningToBlue = obj.exploreNextOperation(10, Selector::Undefined);
1005 
1006  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
1007  ASSERT_EQ(expectedReturningToBlue.size(), actualReturningToBlue.size());
1008  for(unsigned int i = 0; i < actualReturningToBlue.size(); i++)
1009  EXPECT_EQ(actualReturningToBlue[i], expectedReturningToBlue[i]);
1010  ASSERT_FALSE(obj.isEvacuatingWithNext());
1011  ASSERT_TRUE(obj.isMovingWithNext());
1012  ASSERT_FALSE(obj.isCarryingWithNext());
1013  ASSERT_FALSE(obj.isBackstepping());
1014  ASSERT_EQ(9, obj.getBlockPositionList()[0]);
1015  ASSERT_EQ(5, obj.getBlockPositionList()[1]);
1016  ASSERT_EQ(12, obj.getBlockPositionList()[2]);
1017  ASSERT_EQ(6, obj.getBlockPositionList()[3]);
1018  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
1019 
1020  // 10に運搬する
1021  auto actualCarryingBlue = obj.exploreNextOperation(12, Selector::Blue);
1022 
1023  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
1024  ASSERT_EQ(expectedCarryingBlue.size(), actualCarryingBlue.size());
1025  for(unsigned int i = 0; i < actualCarryingBlue.size(); i++)
1026  EXPECT_EQ(actualCarryingBlue[i], expectedCarryingBlue[i]);
1027  ASSERT_FALSE(obj.isEvacuatingWithNext());
1028  ASSERT_FALSE(obj.isMovingWithNext());
1029  ASSERT_TRUE(obj.isCarryingWithNext());
1030  ASSERT_TRUE(obj.isBackstepping());
1031  ASSERT_EQ(9, obj.getBlockPositionList()[0]);
1032  ASSERT_EQ(5, obj.getBlockPositionList()[1]);
1033  ASSERT_EQ(10, obj.getBlockPositionList()[2]);
1034  ASSERT_EQ(6, obj.getBlockPositionList()[3]);
1035  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
1036 
1037  // 11に移動する
1038  auto actualMovingTo11 = obj.exploreNextOperation(14, Selector::Undefined);
1039 
1040  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
1041  ASSERT_EQ(expectedMovingTo11.size(), actualMovingTo11.size());
1042  for(unsigned int i = 0; i < actualMovingTo11.size(); i++)
1043  EXPECT_EQ(actualMovingTo11[i], expectedMovingTo11[i]);
1044  ASSERT_FALSE(obj.isEvacuatingWithNext());
1045  ASSERT_TRUE(obj.isMovingWithNext());
1046  ASSERT_FALSE(obj.isCarryingWithNext());
1047  ASSERT_FALSE(obj.isBackstepping());
1048  ASSERT_TRUE(obj.isAlreadyAllBlockMoved());
1049  }
bool isBackstepping()
Definition: Selector.cpp:294
std::vector< std::int8_t > getBlockPositionList()
Definition: Selector.cpp:203
bool isCarryingWithNext()
Definition: Selector.cpp:289
void setBlockPositionList(std::vector< std::int8_t > list)
Definition: Selector.cpp:196
bool isEvacuatingWithNext()
Definition: Selector.cpp:279
bool isMovingWithNext()
Definition: Selector.cpp:284
std::vector< int > exploreNextOperation(std::int8_t currentPosition, BlockColor color)
Definition: Selector.cpp:3
bool isAlreadyAllBlockMoved()
Definition: Selector.cpp:183
bool isBacksteppingBeforeNextOperation()
Definition: Selector.cpp:299
ブロック選択クラス
Definition: Selector.h:113

呼び出し関係図:

etrobocon2018_test::TEST ( SelectorTest  ,
searchRouteWhenEachNextMovedPositionsIsLooped   
)

SelectorTest.cpp1052 行目に定義があります。

1053  {
1054  Selector obj;
1055  std::vector<std::int8_t> blockList{ { 0, 5, 9, 10 } };
1056  // 9->Blue, 0->Red, 5->Yellow, 10->Green
1057  std::vector<int> expectedMovingToBlue = { 8, 9 };
1058  std::vector<int> expectedMovingToGreen = { 8, 12, 13, 14, 10 };
1059  std::vector<int> expectedMovingToYellow = { 14, 15, 11, 7, 6, 5 };
1060  std::vector<int> expectedEvacuatingYellow = { 5, 6, 7, 3 };
1061  std::vector<int> expectedReturningToGreen = { 7, 11, 10 };
1062  std::vector<int> expectedCarryingGreen = { 10, 6, 5 };
1063  std::vector<int> expectedReturningToBlue = { 6, 10, 9 };
1064  std::vector<int> expectedCarryingBlue = { 9, 10 };
1065  std::vector<int> expectedMovingToRed = { 9, 8, 4, 0 };
1066  std::vector<int> expectedCarryingRed = { 0, 1, 2, 6 };
1067  std::vector<int> expectedReturningToYellow = { 2, 3 };
1068  std::vector<int> expectedCarryingYellow = { 3, 7, 11, 15, 14, 13, 9 };
1069  std::vector<int> expectedMovingTo11 = { 13, 14, 15, 11 };
1070 
1071  obj.setBlockPositionList(blockList);
1072 
1073  // 9に移動する
1074  auto actualMovingToBlue = obj.exploreNextOperation(8, Selector::Undefined);
1075 
1076  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
1077  ASSERT_EQ(expectedMovingToBlue.size(), actualMovingToBlue.size());
1078  for(unsigned int i = 0; i < actualMovingToBlue.size(); i++)
1079  EXPECT_EQ(actualMovingToBlue[i], expectedMovingToBlue[i]);
1080  ASSERT_FALSE(obj.isEvacuatingWithNext());
1081  ASSERT_TRUE(obj.isMovingWithNext());
1082  ASSERT_FALSE(obj.isCarryingWithNext());
1083  ASSERT_FALSE(obj.isBackstepping());
1084  ASSERT_EQ(0, obj.getBlockPositionList()[0]);
1085  ASSERT_EQ(5, obj.getBlockPositionList()[1]);
1086  ASSERT_EQ(9, obj.getBlockPositionList()[2]);
1087  ASSERT_EQ(10, obj.getBlockPositionList()[3]);
1088  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
1089 
1090  // 10に移動する
1091  auto actualMovingToGreen = obj.exploreNextOperation(9, Selector::Blue);
1092 
1093  ASSERT_TRUE(obj.isBacksteppingBeforeNextOperation());
1094  ASSERT_EQ(expectedMovingToGreen.size(), actualMovingToGreen.size());
1095  for(unsigned int i = 0; i < actualMovingToGreen.size(); i++)
1096  EXPECT_EQ(actualMovingToGreen[i], expectedMovingToGreen[i]);
1097  ASSERT_FALSE(obj.isEvacuatingWithNext());
1098  ASSERT_TRUE(obj.isMovingWithNext());
1099  ASSERT_FALSE(obj.isCarryingWithNext());
1100  ASSERT_FALSE(obj.isBackstepping());
1101  ASSERT_EQ(0, obj.getBlockPositionList()[0]);
1102  ASSERT_EQ(5, obj.getBlockPositionList()[1]);
1103  ASSERT_EQ(9, obj.getBlockPositionList()[2]);
1104  ASSERT_EQ(10, obj.getBlockPositionList()[3]);
1105  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
1106 
1107  // 5に移動する
1108  auto actualMovingToYellow = obj.exploreNextOperation(10, Selector::Green);
1109 
1110  ASSERT_TRUE(obj.isBacksteppingBeforeNextOperation());
1111  ASSERT_EQ(expectedMovingToYellow.size(), actualMovingToYellow.size());
1112  for(unsigned int i = 0; i < actualMovingToYellow.size(); i++)
1113  EXPECT_EQ(actualMovingToYellow[i], expectedMovingToYellow[i]);
1114  ASSERT_FALSE(obj.isEvacuatingWithNext());
1115  ASSERT_TRUE(obj.isMovingWithNext());
1116  ASSERT_FALSE(obj.isCarryingWithNext());
1117  ASSERT_FALSE(obj.isBackstepping());
1118  ASSERT_EQ(0, obj.getBlockPositionList()[0]);
1119  ASSERT_EQ(5, obj.getBlockPositionList()[1]);
1120  ASSERT_EQ(9, obj.getBlockPositionList()[2]);
1121  ASSERT_EQ(10, obj.getBlockPositionList()[3]);
1122  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
1123 
1124  // 3に一時避難する
1125  auto actualEvacuatingYellow = obj.exploreNextOperation(5, Selector::Yellow);
1126 
1127  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
1128  ASSERT_EQ(expectedEvacuatingYellow.size(), actualEvacuatingYellow.size());
1129  for(unsigned int i = 0; i < actualEvacuatingYellow.size(); i++)
1130  EXPECT_EQ(actualEvacuatingYellow[i], expectedEvacuatingYellow[i]);
1131  ASSERT_TRUE(obj.isEvacuatingWithNext());
1132  ASSERT_FALSE(obj.isMovingWithNext());
1133  ASSERT_FALSE(obj.isCarryingWithNext());
1134  ASSERT_TRUE(obj.isBackstepping());
1135  ASSERT_EQ(0, obj.getBlockPositionList()[0]);
1136  ASSERT_EQ(3, obj.getBlockPositionList()[1]);
1137  ASSERT_EQ(9, obj.getBlockPositionList()[2]);
1138  ASSERT_EQ(10, obj.getBlockPositionList()[3]);
1139  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
1140 
1141  // 10に戻る
1142  auto actualReturningToGreen = obj.exploreNextOperation(7, Selector::Undefined);
1143 
1144  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
1145  ASSERT_EQ(expectedReturningToGreen.size(), actualReturningToGreen.size());
1146  for(unsigned int i = 0; i < actualReturningToGreen.size(); i++)
1147  EXPECT_EQ(actualReturningToGreen[i], expectedReturningToGreen[i]);
1148  ASSERT_FALSE(obj.isEvacuatingWithNext());
1149  ASSERT_TRUE(obj.isMovingWithNext());
1150  ASSERT_FALSE(obj.isCarryingWithNext());
1151  ASSERT_FALSE(obj.isBackstepping());
1152  ASSERT_EQ(0, obj.getBlockPositionList()[0]);
1153  ASSERT_EQ(3, obj.getBlockPositionList()[1]);
1154  ASSERT_EQ(9, obj.getBlockPositionList()[2]);
1155  ASSERT_EQ(10, obj.getBlockPositionList()[3]);
1156  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
1157 
1158  // 5に運搬する
1159  auto actualCarryingGreen = obj.exploreNextOperation(10, Selector::Green);
1160 
1161  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
1162  ASSERT_EQ(expectedCarryingGreen.size(), actualCarryingGreen.size());
1163  for(unsigned int i = 0; i < actualCarryingGreen.size(); i++)
1164  EXPECT_EQ(actualCarryingGreen[i], expectedCarryingGreen[i]);
1165  ASSERT_FALSE(obj.isEvacuatingWithNext());
1166  ASSERT_FALSE(obj.isMovingWithNext());
1167  ASSERT_TRUE(obj.isCarryingWithNext());
1168  ASSERT_TRUE(obj.isBackstepping());
1169  ASSERT_EQ(0, obj.getBlockPositionList()[0]);
1170  ASSERT_EQ(3, obj.getBlockPositionList()[1]);
1171  ASSERT_EQ(9, obj.getBlockPositionList()[2]);
1172  ASSERT_EQ(5, obj.getBlockPositionList()[3]);
1173  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
1174 
1175  // 9に戻る
1176  auto actualReturningToBlue = obj.exploreNextOperation(6, Selector::Undefined);
1177 
1178  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
1179  ASSERT_EQ(expectedReturningToBlue.size(), actualReturningToBlue.size());
1180  for(unsigned int i = 0; i < actualReturningToBlue.size(); i++)
1181  EXPECT_EQ(actualReturningToBlue[i], expectedReturningToBlue[i]);
1182  ASSERT_FALSE(obj.isEvacuatingWithNext());
1183  ASSERT_TRUE(obj.isMovingWithNext());
1184  ASSERT_FALSE(obj.isCarryingWithNext());
1185  ASSERT_FALSE(obj.isBackstepping());
1186  ASSERT_EQ(0, obj.getBlockPositionList()[0]);
1187  ASSERT_EQ(3, obj.getBlockPositionList()[1]);
1188  ASSERT_EQ(9, obj.getBlockPositionList()[2]);
1189  ASSERT_EQ(5, obj.getBlockPositionList()[3]);
1190  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
1191 
1192  // 10に運搬する
1193  auto actualCarryingBlue = obj.exploreNextOperation(9, Selector::Blue);
1194 
1195  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
1196  ASSERT_EQ(expectedCarryingBlue.size(), actualCarryingBlue.size());
1197  for(unsigned int i = 0; i < actualCarryingBlue.size(); i++)
1198  EXPECT_EQ(actualCarryingBlue[i], expectedCarryingBlue[i]);
1199  ASSERT_FALSE(obj.isEvacuatingWithNext());
1200  ASSERT_FALSE(obj.isMovingWithNext());
1201  ASSERT_TRUE(obj.isCarryingWithNext());
1202  ASSERT_TRUE(obj.isBackstepping());
1203  ASSERT_EQ(0, obj.getBlockPositionList()[0]);
1204  ASSERT_EQ(3, obj.getBlockPositionList()[1]);
1205  ASSERT_EQ(10, obj.getBlockPositionList()[2]);
1206  ASSERT_EQ(5, obj.getBlockPositionList()[3]);
1207  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
1208 
1209  // 0に移動する
1210  auto actualMovingToRed = obj.exploreNextOperation(9, Selector::Undefined);
1211 
1212  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
1213  ASSERT_EQ(expectedMovingToRed.size(), actualMovingToRed.size());
1214  for(unsigned int i = 0; i < actualMovingToRed.size(); i++)
1215  EXPECT_EQ(actualMovingToRed[i], expectedMovingToRed[i]);
1216  ASSERT_FALSE(obj.isEvacuatingWithNext());
1217  ASSERT_TRUE(obj.isMovingWithNext());
1218  ASSERT_FALSE(obj.isCarryingWithNext());
1219  ASSERT_FALSE(obj.isBackstepping());
1220  ASSERT_EQ(0, obj.getBlockPositionList()[0]);
1221  ASSERT_EQ(3, obj.getBlockPositionList()[1]);
1222  ASSERT_EQ(10, obj.getBlockPositionList()[2]);
1223  ASSERT_EQ(5, obj.getBlockPositionList()[3]);
1224  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
1225 
1226  // 6に運搬する
1227  auto actualCarryingRed = obj.exploreNextOperation(0, Selector::Red);
1228 
1229  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
1230  ASSERT_EQ(expectedCarryingRed.size(), actualCarryingRed.size());
1231  for(unsigned int i = 0; i < actualCarryingRed.size(); i++)
1232  EXPECT_EQ(actualCarryingRed[i], expectedCarryingRed[i]);
1233  ASSERT_FALSE(obj.isEvacuatingWithNext());
1234  ASSERT_FALSE(obj.isMovingWithNext());
1235  ASSERT_TRUE(obj.isCarryingWithNext());
1236  ASSERT_TRUE(obj.isBackstepping());
1237  ASSERT_EQ(6, obj.getBlockPositionList()[0]);
1238  ASSERT_EQ(3, obj.getBlockPositionList()[1]);
1239  ASSERT_EQ(10, obj.getBlockPositionList()[2]);
1240  ASSERT_EQ(5, obj.getBlockPositionList()[3]);
1241  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
1242 
1243  // 3に戻る
1244  auto actualReturningToYellow = obj.exploreNextOperation(2, Selector::Undefined);
1245 
1246  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
1247  ASSERT_EQ(expectedReturningToYellow.size(), actualReturningToYellow.size());
1248  for(unsigned int i = 0; i < actualReturningToYellow.size(); i++)
1249  EXPECT_EQ(actualReturningToYellow[i], expectedReturningToYellow[i]);
1250  ASSERT_FALSE(obj.isEvacuatingWithNext());
1251  ASSERT_TRUE(obj.isMovingWithNext());
1252  ASSERT_FALSE(obj.isCarryingWithNext());
1253  ASSERT_FALSE(obj.isBackstepping());
1254  ASSERT_EQ(6, obj.getBlockPositionList()[0]);
1255  ASSERT_EQ(3, obj.getBlockPositionList()[1]);
1256  ASSERT_EQ(10, obj.getBlockPositionList()[2]);
1257  ASSERT_EQ(5, obj.getBlockPositionList()[3]);
1258  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
1259 
1260  // 9に運搬する
1261  auto actualCarryingYellow = obj.exploreNextOperation(3, Selector::Yellow);
1262 
1263  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
1264  ASSERT_EQ(expectedCarryingYellow.size(), actualCarryingYellow.size());
1265  for(unsigned int i = 0; i < actualCarryingYellow.size(); i++)
1266  EXPECT_EQ(actualCarryingYellow[i], expectedCarryingYellow[i]);
1267  ASSERT_FALSE(obj.isEvacuatingWithNext());
1268  ASSERT_FALSE(obj.isMovingWithNext());
1269  ASSERT_TRUE(obj.isCarryingWithNext());
1270  ASSERT_TRUE(obj.isBackstepping());
1271  ASSERT_EQ(6, obj.getBlockPositionList()[0]);
1272  ASSERT_EQ(9, obj.getBlockPositionList()[1]);
1273  ASSERT_EQ(10, obj.getBlockPositionList()[2]);
1274  ASSERT_EQ(5, obj.getBlockPositionList()[3]);
1275  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
1276 
1277  // 11に移動する
1278  auto actualMovingTo11 = obj.exploreNextOperation(13, Selector::Undefined);
1279 
1280  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
1281  ASSERT_EQ(expectedMovingTo11.size(), actualMovingTo11.size());
1282  for(unsigned int i = 0; i < actualMovingTo11.size(); i++)
1283  EXPECT_EQ(actualMovingTo11[i], expectedMovingTo11[i]);
1284  ASSERT_FALSE(obj.isEvacuatingWithNext());
1285  ASSERT_TRUE(obj.isMovingWithNext());
1286  ASSERT_FALSE(obj.isCarryingWithNext());
1287  ASSERT_FALSE(obj.isBackstepping());
1288  ASSERT_EQ(6, obj.getBlockPositionList()[0]);
1289  ASSERT_EQ(9, obj.getBlockPositionList()[1]);
1290  ASSERT_EQ(10, obj.getBlockPositionList()[2]);
1291  ASSERT_EQ(5, obj.getBlockPositionList()[3]);
1292  ASSERT_TRUE(obj.isAlreadyAllBlockMoved());
1293  }
bool isBackstepping()
Definition: Selector.cpp:294
std::vector< std::int8_t > getBlockPositionList()
Definition: Selector.cpp:203
bool isCarryingWithNext()
Definition: Selector.cpp:289
void setBlockPositionList(std::vector< std::int8_t > list)
Definition: Selector.cpp:196
bool isEvacuatingWithNext()
Definition: Selector.cpp:279
bool isMovingWithNext()
Definition: Selector.cpp:284
std::vector< int > exploreNextOperation(std::int8_t currentPosition, BlockColor color)
Definition: Selector.cpp:3
bool isAlreadyAllBlockMoved()
Definition: Selector.cpp:183
bool isBacksteppingBeforeNextOperation()
Definition: Selector.cpp:299
ブロック選択クラス
Definition: Selector.h:113

呼び出し関係図:

etrobocon2018_test::TEST ( SelectorTest  ,
searchRouteWhenAllNodeInitialPositionsIsFromCenterQuadirilateralTest   
)

SelectorTest.cpp1296 行目に定義があります。

1297  {
1298  Selector obj;
1299  std::vector<std::int8_t> blockList{ { 5, 6, 9, 10 } };
1300  // 6->Blue, 10->Red, 5->Yellow, 9->Green
1301  std::vector<int> expectedMovingToGreen = { 8, 9 };
1302  std::vector<int> expectedEvacuatingGreen = { 9, 13, 12 };
1303  std::vector<int> expectedMovingToYellow = { 13, 9, 5 };
1304  std::vector<int> expectedCarryingYellow = { 5, 9 };
1305  std::vector<int> expectedMovingToBlue = { 5, 6 };
1306  std::vector<int> expectedMovingToRed = { 5, 1, 2, 3, 7, 11, 10 };
1307  std::vector<int> expectedEvacuatingRed = { 10, 14, 15 };
1308  std::vector<int> expectedReturningToBlue = { 14, 10, 6 };
1309  std::vector<int> expectedCarryingBlue = { 6, 10 };
1310  std::vector<int> expectedReturningToRed = { 6, 7, 11, 15 };
1311  std::vector<int> expectedCarryingRed = { 15, 11, 7, 6 };
1312  std::vector<int> expectedReturningToGreen = { 7, 11, 15, 14, 13, 12 };
1313  std::vector<int> expectedCarryingGreen = { 12, 8, 4, 5 };
1314  std::vector<int> expectedMovingTo11 = { 4, 0, 1, 2, 3, 7, 11 };
1315 
1316  obj.setBlockPositionList(blockList);
1317 
1318  // 9に移動する
1319  auto actualMovingToGreen = obj.exploreNextOperation(8, Selector::Undefined);
1320 
1321  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
1322  ASSERT_EQ(expectedMovingToGreen.size(), actualMovingToGreen.size());
1323  for(unsigned int i = 0; i < actualMovingToGreen.size(); i++)
1324  EXPECT_EQ(actualMovingToGreen[i], expectedMovingToGreen[i]);
1325  ASSERT_FALSE(obj.isEvacuatingWithNext());
1326  ASSERT_TRUE(obj.isMovingWithNext());
1327  ASSERT_FALSE(obj.isCarryingWithNext());
1328  ASSERT_FALSE(obj.isBackstepping());
1329  ASSERT_EQ(obj.getBlockPositionList()[0], 5);
1330  ASSERT_EQ(obj.getBlockPositionList()[1], 6);
1331  ASSERT_EQ(obj.getBlockPositionList()[2], 9);
1332  ASSERT_EQ(obj.getBlockPositionList()[3], 10);
1333  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
1334 
1335  // 12に一時避難する
1336  auto actualEvacuatingGreen = obj.exploreNextOperation(9, Selector::Green);
1337 
1338  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
1339  ASSERT_EQ(expectedEvacuatingGreen.size(), actualEvacuatingGreen.size());
1340  for(unsigned int i = 0; i < actualEvacuatingGreen.size(); i++)
1341  EXPECT_EQ(actualEvacuatingGreen[i], expectedEvacuatingGreen[i]);
1342  ASSERT_TRUE(obj.isEvacuatingWithNext());
1343  ASSERT_FALSE(obj.isMovingWithNext());
1344  ASSERT_FALSE(obj.isCarryingWithNext());
1345  ASSERT_TRUE(obj.isBackstepping());
1346  ASSERT_EQ(obj.getBlockPositionList()[0], 5);
1347  ASSERT_EQ(obj.getBlockPositionList()[1], 6);
1348  ASSERT_EQ(obj.getBlockPositionList()[2], 12);
1349  ASSERT_EQ(obj.getBlockPositionList()[3], 10);
1350  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
1351 
1352  // 5に移動する
1353  auto actualMovingToYellow = obj.exploreNextOperation(13, Selector::Undefined);
1354 
1355  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
1356  ASSERT_EQ(expectedMovingToYellow.size(), actualMovingToYellow.size());
1357  for(unsigned int i = 0; i < actualMovingToYellow.size(); i++)
1358  EXPECT_EQ(actualMovingToYellow[i], expectedMovingToYellow[i]);
1359  ASSERT_FALSE(obj.isEvacuatingWithNext());
1360  ASSERT_TRUE(obj.isMovingWithNext());
1361  ASSERT_FALSE(obj.isCarryingWithNext());
1362  ASSERT_FALSE(obj.isBackstepping());
1363  ASSERT_EQ(obj.getBlockPositionList()[0], 5);
1364  ASSERT_EQ(obj.getBlockPositionList()[1], 6);
1365  ASSERT_EQ(obj.getBlockPositionList()[2], 12);
1366  ASSERT_EQ(obj.getBlockPositionList()[3], 10);
1367  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
1368 
1369  // 9に運搬する
1370  auto actualCarryingYellow = obj.exploreNextOperation(5, Selector::Yellow);
1371 
1372  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
1373  ASSERT_EQ(expectedCarryingYellow.size(), actualCarryingYellow.size());
1374  for(unsigned int i = 0; i < actualCarryingYellow.size(); i++)
1375  EXPECT_EQ(actualCarryingYellow[i], expectedCarryingYellow[i]);
1376  ASSERT_FALSE(obj.isEvacuatingWithNext());
1377  ASSERT_FALSE(obj.isMovingWithNext());
1378  ASSERT_TRUE(obj.isCarryingWithNext());
1379  ASSERT_TRUE(obj.isBackstepping());
1380  ASSERT_EQ(obj.getBlockPositionList()[0], 9);
1381  ASSERT_EQ(obj.getBlockPositionList()[1], 6);
1382  ASSERT_EQ(obj.getBlockPositionList()[2], 12);
1383  ASSERT_EQ(obj.getBlockPositionList()[3], 10);
1384  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
1385 
1386  // 6に移動する
1387  auto actualMovingToBlue = obj.exploreNextOperation(5, Selector::Undefined);
1388 
1389  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
1390  ASSERT_EQ(expectedMovingToBlue.size(), actualMovingToBlue.size());
1391  for(unsigned int i = 0; i < actualMovingToBlue.size(); i++)
1392  EXPECT_EQ(actualMovingToBlue[i], expectedMovingToBlue[i]);
1393  ASSERT_FALSE(obj.isEvacuatingWithNext());
1394  ASSERT_TRUE(obj.isMovingWithNext());
1395  ASSERT_FALSE(obj.isCarryingWithNext());
1396  ASSERT_FALSE(obj.isBackstepping());
1397  ASSERT_EQ(obj.getBlockPositionList()[0], 9);
1398  ASSERT_EQ(obj.getBlockPositionList()[1], 6);
1399  ASSERT_EQ(obj.getBlockPositionList()[2], 12);
1400  ASSERT_EQ(obj.getBlockPositionList()[3], 10);
1401  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
1402 
1403  // 10に移動する
1404  auto actualMovingToRed = obj.exploreNextOperation(6, Selector::Blue);
1405 
1406  ASSERT_TRUE(obj.isBacksteppingBeforeNextOperation());
1407  ASSERT_EQ(expectedMovingToRed.size(), actualMovingToRed.size());
1408  for(unsigned int i = 0; i < actualMovingToRed.size(); i++)
1409  EXPECT_EQ(actualMovingToRed[i], expectedMovingToRed[i]);
1410  ASSERT_FALSE(obj.isEvacuatingWithNext());
1411  ASSERT_TRUE(obj.isMovingWithNext());
1412  ASSERT_FALSE(obj.isCarryingWithNext());
1413  ASSERT_FALSE(obj.isBackstepping());
1414  ASSERT_EQ(obj.getBlockPositionList()[0], 9);
1415  ASSERT_EQ(obj.getBlockPositionList()[1], 6);
1416  ASSERT_EQ(obj.getBlockPositionList()[2], 12);
1417  ASSERT_EQ(obj.getBlockPositionList()[3], 10);
1418  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
1419 
1420  // 15に一時避難する
1421  auto actualEvacuatingRed = obj.exploreNextOperation(10, Selector::Red);
1422 
1423  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
1424  ASSERT_EQ(expectedEvacuatingRed.size(), actualEvacuatingRed.size());
1425  for(unsigned int i = 0; i < actualEvacuatingRed.size(); i++)
1426  EXPECT_EQ(actualEvacuatingRed[i], expectedEvacuatingRed[i]);
1427  ASSERT_TRUE(obj.isEvacuatingWithNext());
1428  ASSERT_FALSE(obj.isMovingWithNext());
1429  ASSERT_FALSE(obj.isCarryingWithNext());
1430  ASSERT_TRUE(obj.isBackstepping());
1431  ASSERT_EQ(obj.getBlockPositionList()[0], 9);
1432  ASSERT_EQ(obj.getBlockPositionList()[1], 6);
1433  ASSERT_EQ(obj.getBlockPositionList()[2], 12);
1434  ASSERT_EQ(obj.getBlockPositionList()[3], 15);
1435  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
1436 
1437  // 6に戻る
1438  auto actualReturningToBlue = obj.exploreNextOperation(14, Selector::Undefined);
1439 
1440  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
1441  ASSERT_EQ(expectedReturningToBlue.size(), actualReturningToBlue.size());
1442  for(unsigned int i = 0; i < actualReturningToBlue.size(); i++)
1443  EXPECT_EQ(actualReturningToBlue[i], expectedReturningToBlue[i]);
1444  ASSERT_FALSE(obj.isEvacuatingWithNext());
1445  ASSERT_TRUE(obj.isMovingWithNext());
1446  ASSERT_FALSE(obj.isCarryingWithNext());
1447  ASSERT_FALSE(obj.isBackstepping());
1448  ASSERT_EQ(obj.getBlockPositionList()[0], 9);
1449  ASSERT_EQ(obj.getBlockPositionList()[1], 6);
1450  ASSERT_EQ(obj.getBlockPositionList()[2], 12);
1451  ASSERT_EQ(obj.getBlockPositionList()[3], 15);
1452  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
1453 
1454  // 10に運搬する
1455  auto actualCarryingBlue = obj.exploreNextOperation(6, Selector::Blue);
1456 
1457  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
1458  ASSERT_EQ(expectedCarryingBlue.size(), actualCarryingBlue.size());
1459  for(unsigned int i = 0; i < actualCarryingBlue.size(); i++)
1460  EXPECT_EQ(actualCarryingBlue[i], expectedCarryingBlue[i]);
1461  ASSERT_FALSE(obj.isEvacuatingWithNext());
1462  ASSERT_FALSE(obj.isMovingWithNext());
1463  ASSERT_TRUE(obj.isCarryingWithNext());
1464  ASSERT_TRUE(obj.isBackstepping());
1465  ASSERT_EQ(obj.getBlockPositionList()[0], 9);
1466  ASSERT_EQ(obj.getBlockPositionList()[1], 10);
1467  ASSERT_EQ(obj.getBlockPositionList()[2], 12);
1468  ASSERT_EQ(obj.getBlockPositionList()[3], 15);
1469  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
1470 
1471  // 15に戻る
1472  auto actualReturningToRed = obj.exploreNextOperation(6, Selector::Undefined);
1473 
1474  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
1475  ASSERT_EQ(expectedReturningToRed.size(), actualReturningToRed.size());
1476  for(unsigned int i = 0; i < actualReturningToRed.size(); i++)
1477  EXPECT_EQ(actualReturningToRed[i], expectedReturningToRed[i]);
1478  ASSERT_FALSE(obj.isEvacuatingWithNext());
1479  ASSERT_TRUE(obj.isMovingWithNext());
1480  ASSERT_FALSE(obj.isCarryingWithNext());
1481  ASSERT_FALSE(obj.isBackstepping());
1482  ASSERT_EQ(obj.getBlockPositionList()[0], 9);
1483  ASSERT_EQ(obj.getBlockPositionList()[1], 10);
1484  ASSERT_EQ(obj.getBlockPositionList()[2], 12);
1485  ASSERT_EQ(obj.getBlockPositionList()[3], 15);
1486  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
1487 
1488  // 6に運搬する
1489  auto actualCarryingRed = obj.exploreNextOperation(15, Selector::Red);
1490 
1491  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
1492  ASSERT_EQ(expectedCarryingRed.size(), actualCarryingRed.size());
1493  for(unsigned int i = 0; i < actualCarryingRed.size(); i++)
1494  EXPECT_EQ(actualCarryingRed[i], expectedCarryingRed[i]);
1495  ASSERT_FALSE(obj.isEvacuatingWithNext());
1496  ASSERT_FALSE(obj.isMovingWithNext());
1497  ASSERT_TRUE(obj.isCarryingWithNext());
1498  ASSERT_TRUE(obj.isBackstepping());
1499  ASSERT_EQ(obj.getBlockPositionList()[0], 9);
1500  ASSERT_EQ(obj.getBlockPositionList()[1], 10);
1501  ASSERT_EQ(obj.getBlockPositionList()[2], 12);
1502  ASSERT_EQ(obj.getBlockPositionList()[3], 6);
1503  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
1504 
1505  // 12に戻る
1506  auto actualReturningToGreen = obj.exploreNextOperation(7, Selector::Undefined);
1507 
1508  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
1509  ASSERT_EQ(expectedReturningToGreen.size(), actualReturningToGreen.size());
1510  for(unsigned int i = 0; i < actualReturningToGreen.size(); i++)
1511  EXPECT_EQ(actualReturningToGreen[i], expectedReturningToGreen[i]);
1512  ASSERT_FALSE(obj.isEvacuatingWithNext());
1513  ASSERT_TRUE(obj.isMovingWithNext());
1514  ASSERT_FALSE(obj.isCarryingWithNext());
1515  ASSERT_FALSE(obj.isBackstepping());
1516  ASSERT_EQ(obj.getBlockPositionList()[0], 9);
1517  ASSERT_EQ(obj.getBlockPositionList()[1], 10);
1518  ASSERT_EQ(obj.getBlockPositionList()[2], 12);
1519  ASSERT_EQ(obj.getBlockPositionList()[3], 6);
1520  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
1521 
1522  // 5に運搬する
1523  auto actualCarryingGreen = obj.exploreNextOperation(12, Selector::Green);
1524 
1525  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
1526  ASSERT_EQ(expectedCarryingGreen.size(), actualCarryingGreen.size());
1527  for(unsigned int i = 0; i < actualCarryingGreen.size(); i++)
1528  EXPECT_EQ(actualCarryingGreen[i], expectedCarryingGreen[i]);
1529  ASSERT_FALSE(obj.isEvacuatingWithNext());
1530  ASSERT_FALSE(obj.isMovingWithNext());
1531  ASSERT_TRUE(obj.isCarryingWithNext());
1532  ASSERT_TRUE(obj.isBackstepping());
1533  ASSERT_EQ(obj.getBlockPositionList()[0], 9);
1534  ASSERT_EQ(obj.getBlockPositionList()[1], 10);
1535  ASSERT_EQ(obj.getBlockPositionList()[2], 5);
1536  ASSERT_EQ(obj.getBlockPositionList()[3], 6);
1537  ASSERT_FALSE(obj.isAlreadyAllBlockMoved());
1538 
1539  // 11に移動する
1540  auto actualMovingTo11 = obj.exploreNextOperation(4, Selector::Undefined);
1541 
1542  ASSERT_FALSE(obj.isBacksteppingBeforeNextOperation());
1543  ASSERT_EQ(expectedMovingTo11.size(), actualMovingTo11.size());
1544  for(unsigned int i = 0; i < actualMovingTo11.size(); i++)
1545  EXPECT_EQ(actualMovingTo11[i], expectedMovingTo11[i]);
1546  ASSERT_FALSE(obj.isEvacuatingWithNext());
1547  ASSERT_TRUE(obj.isMovingWithNext());
1548  ASSERT_FALSE(obj.isCarryingWithNext());
1549  ASSERT_FALSE(obj.isBackstepping());
1550  ASSERT_EQ(obj.getBlockPositionList()[0], 9);
1551  ASSERT_EQ(obj.getBlockPositionList()[1], 10);
1552  ASSERT_EQ(obj.getBlockPositionList()[2], 5);
1553  ASSERT_EQ(obj.getBlockPositionList()[3], 6);
1554  ASSERT_TRUE(obj.isAlreadyAllBlockMoved());
1555  }
bool isBackstepping()
Definition: Selector.cpp:294
std::vector< std::int8_t > getBlockPositionList()
Definition: Selector.cpp:203
bool isCarryingWithNext()
Definition: Selector.cpp:289
void setBlockPositionList(std::vector< std::int8_t > list)
Definition: Selector.cpp:196
bool isEvacuatingWithNext()
Definition: Selector.cpp:279
bool isMovingWithNext()
Definition: Selector.cpp:284
std::vector< int > exploreNextOperation(std::int8_t currentPosition, BlockColor color)
Definition: Selector.cpp:3
bool isAlreadyAllBlockMoved()
Definition: Selector.cpp:183
bool isBacksteppingBeforeNextOperation()
Definition: Selector.cpp:299
ブロック選択クラス
Definition: Selector.h:113

呼び出し関係図:

etrobocon2018_test::TEST_F ( LineTracerWalkerTest  ,
runLineTest   
)

LineTracerWalkerTest.cpp21 行目に定義があります。

21 { ltw.runLine(0, 0, 0); }
etrobocon2018_test::TEST_F ( NormalCourseTest  ,
stopTest   
)

NormalCourseTest.cpp23 行目に定義があります。

24  {
25  nc.stop();
26  int forword = nc.lineTracerWalker.getForward();
27  ASSERT_EQ(forword, 0);
28  }
etrobocon2018_test::TEST_F ( LineTracerWalkerTest  ,
setForwardTest   
)

LineTracerWalkerTest.cpp23 行目に定義があります。

24  {
25  auto forword = 80;
26  auto turn = 30;
27  ltw.setForward(forword);
28  ltw.setTurn(turn);
29  auto resultForword = ltw.getForward();
30  ASSERT_EQ(forword, resultForword);
31  auto resultTurn = ltw.getTurn();
32  ASSERT_EQ(turn, resultTurn);
33  }
etrobocon2018_test::TEST_F ( LeftCourseTest  ,
runTest   
)

LeftCourseTest.cpp23 行目に定義があります。

23 { lc.run(30, 0, 100, 50); }
etrobocon2018_test::TEST_F ( DistinguisherTest  ,
getColorWhiteTest2   
)

DistinguisherTest.cpp26 行目に定義があります。

27  {
28  setMockRgb(128, 158, 93);
29  Color result = d.getColor();
30  ASSERT_EQ(result, Color::WHITE);
31  }
Color
Definition: Distinguisher.h:16
etrobocon2018_test::TEST_F ( BlockStrategyTest  ,
createColorBlockPlace   
)

BlockStrategyTest.cpp28 行目に定義があります。

29  {
30  auto b = getColorBlockPlaceArray();
31  ASSERT_EQ(b[0]->getColor(), GameColor::RED);
32  ASSERT_EQ(b[2]->getColor(), GameColor::BLUE);
33  ASSERT_EQ(b[5]->getColor(), GameColor::GREEN);
34  ASSERT_EQ(b[7]->getColor(), GameColor::YELLOW);
35  ASSERT_EQ(b[9]->getColor(), GameColor::YELLOW);
36  ASSERT_EQ(b[11]->getColor(), GameColor::GREEN);
37  ASSERT_EQ(b[12]->getColor(), GameColor::BLUE);
38  ASSERT_EQ(b[14]->getColor(), GameColor::RED);
39  }
etrobocon2018_test::TEST_F ( LifterTest  ,
setDefaultCountTest   
)

LifterTest.cpp32 行目に定義があります。

32 { ASSERT_EQ(getDefaultCount(), getCount()); }
etrobocon2018_test::TEST_F ( DistinguisherTest  ,
getColorBlackTest1   
)

DistinguisherTest.cpp33 行目に定義があります。

34  {
35  setMockRgb(0, 0, 0);
36  Color result = d.getColor();
37  ASSERT_EQ(result, Color::BLACK);
38  }
Color
Definition: Distinguisher.h:16
etrobocon2018_test::TEST_F ( LifterTest  ,
getCurrentAngleTest1   
)

LifterTest.cpp34 行目に定義があります。

35  {
36  addDefaultCount(90);
37  ASSERT_EQ(lifter.getCurrentAngle(), 90);
38  }
etrobocon2018_test::TEST_F ( LifterTest  ,
getCurrentAngleTest2   
)

LifterTest.cpp40 行目に定義があります。

40 { ASSERT_EQ(lifter.getCurrentAngle(), 0); }
etrobocon2018_test::TEST_F ( DistinguisherTest  ,
getColorBlackTest2   
)

DistinguisherTest.cpp40 行目に定義があります。

41  {
42  setMockRgb(14, 19, 5);
43  Color result = d.getColor();
44  ASSERT_EQ(result, Color::BLACK);
45  }
Color
Definition: Distinguisher.h:16
etrobocon2018_test::TEST_F ( BlockStrategyTest  ,
connectColorBlockPlace   
)

BlockStrategyTest.cpp41 行目に定義があります。

42  {
43  auto b = getColorBlockPlaceArray();
44  ASSERT_EQ(b[0]->black_line[Direction::WEST], b[1]);
45  ASSERT_EQ(b[2]->black_line[Direction::EAST], b[1]);
46  ASSERT_EQ(b[5]->black_line[Direction::SOUTH], b[9]);
47  ASSERT_EQ(b[7]->black_line[Direction::NORTH], b[3]);
48  ASSERT_EQ(b[9]->black_line[Direction::EAST], b[8]);
49  ASSERT_EQ(b[11]->black_line[Direction::SOUTH], b[15]);
50  ASSERT_EQ(b[12]->black_line[Direction::WEST], b[13]);
51  ASSERT_EQ(b[14]->black_line[Direction::NORTH], b[10]);
52  }
etrobocon2018_test::TEST_F ( LifterTest  ,
limitPwmTest1   
)

LifterTest.cpp42 行目に定義があります。

43  {
44  ASSERT_EQ(limitPwm(99), 99);
45  ASSERT_EQ(limitPwm(100), 100);
46  ASSERT_EQ(limitPwm(101), 100);
47  }
etrobocon2018_test::TEST_F ( UserInterfaceTest  ,
setBrightnessWithColorTest   
)

UserInterfaceTest.cpp48 行目に定義があります。

49  {
50  UserInterface ui{ controller };
51  std::int16_t resultBrightness;
52  ui.setBrightnessWithColor(resultBrightness, "test");
53  ASSERT_EQ(resultBrightness, brightness);
54  }
走行体が走り出す前にユーザが入力するインターフェースを提供するクラス
Definition: UserInterface.h:25
void setBrightnessWithColor(int16_t &brightness, const char *str)

呼び出し関係図:

etrobocon2018_test::TEST_F ( LifterTest  ,
limitPwmTest2   
)

LifterTest.cpp49 行目に定義があります。

50  {
51  ASSERT_EQ(limitPwm(2), 2);
52  ASSERT_EQ(limitPwm(1), 1);
53  ASSERT_EQ(limitPwm(0), 1);
54  }
etrobocon2018_test::TEST_F ( BlockStrategyTest  ,
putColorBlockPlace   
)

BlockStrategyTest.cpp54 行目に定義があります。

55  {
56  BlockStrategy b{ 84722 };
57  ASSERT_EQ(b.blockArea.colorBlockPlaceArray[1]->hasBlock(), true);
58  ASSERT_EQ(b.blockArea.colorBlockPlaceArray[4]->hasBlock(), true);
59  ASSERT_EQ(b.blockArea.colorBlockPlaceArray[10]->hasBlock(), true);
60  ASSERT_EQ(b.blockArea.colorBlockPlaceArray[15]->hasBlock(), true);
61  ASSERT_EQ(b.blockArea.colorBlockPlaceArray[2]->hasBlock(), false);
62  ASSERT_EQ(b.blockArea.colorBlockPlaceArray[6]->hasBlock(), false);
63  ASSERT_EQ(b.blockArea.colorBlockPlaceArray[8]->hasBlock(), false);
64  ASSERT_EQ(b.blockArea.colorBlockPlaceArray[9]->hasBlock(), false);
65  ASSERT_EQ(b.blockArea.colorBlockPlaceArray[11]->hasBlock(), false);
66  ASSERT_EQ(b.blockArea.colorBlockPlaceArray[13]->hasBlock(), false);
67  }
etrobocon2018_test::TEST_F ( LifterTest  ,
limitPwmTest3   
)

LifterTest.cpp56 行目に定義があります。

57  {
58  ASSERT_EQ(limitPwm(-100), 1);
59  ASSERT_EQ(limitPwm(-50), 1);
60  ASSERT_EQ(limitPwm(-1), 1);
61  }
etrobocon2018_test::TEST_F ( UserInterfaceTest  ,
setBrightnessTest   
)

UserInterfaceTest.cpp56 行目に定義があります。

57  {
58  UserInterface ui{ controller };
59  std::int8_t resultBrightness;
60  ui.setBrightness(resultBrightness, "test");
61  ASSERT_EQ(resultBrightness, brightness);
62  }
走行体が走り出す前にユーザが入力するインターフェースを提供するクラス
Definition: UserInterface.h:25
void setBrightness(int8_t &brightness, const char *str)

呼び出し関係図:

etrobocon2018_test::TEST_F ( LifterTest  ,
limitPwmTest4   
)

LifterTest.cpp63 行目に定義があります。

64  {
65  ASSERT_EQ(limitPwm(10), 10);
66  ASSERT_EQ(limitPwm(50), 50);
67  ASSERT_EQ(limitPwm(80), 80);
68  }
etrobocon2018_test::TEST_F ( BlockStrategyTest  ,
getDirection   
)

BlockStrategyTest.cpp69 行目に定義があります。

70  {
71  BlockStrategy b{ 84722 };
72  ASSERT_EQ(b.blockArea.getDirection(1, 2), Direction::WEST);
73  ASSERT_EQ(b.blockArea.getDirection(1, 5), Direction::SOUTH);
74  ASSERT_EQ(b.blockArea.getDirection(1, 0), Direction::EAST);
75  ASSERT_EQ(b.blockArea.getDirection(8, 4), Direction::NORTH);
76  ASSERT_EQ(b.blockArea.getDirection(5, 9), Direction::SOUTH);
77  }
etrobocon2018_test::TEST_F ( LifterTest  ,
liftUpTest1   
)

LifterTest.cpp70 行目に定義があります。

71  {
72  lifter.liftUp(90);
73  ASSERT_LE(lifter.getCurrentAngle(), 93);
74  ASSERT_GE(lifter.getCurrentAngle(), 90);
75  }
etrobocon2018_test::TEST_F ( LifterTest  ,
liftUpTest2   
)

LifterTest.cpp77 行目に定義があります。

78  {
79  lifter.liftUp(45);
80  ASSERT_LE(lifter.getCurrentAngle(), 48);
81  ASSERT_GE(lifter.getCurrentAngle(), 45);
82  }
etrobocon2018_test::TEST_F ( LifterTest  ,
liftDownTest1   
)

LifterTest.cpp84 行目に定義があります。

85  {
86  lifter.liftDown(90);
87  ASSERT_GE(lifter.getCurrentAngle(), -93);
88  ASSERT_LE(lifter.getCurrentAngle(), -90);
89  }
etrobocon2018_test::TEST_F ( LifterTest  ,
liftDownTest2   
)

LifterTest.cpp91 行目に定義があります。

92  {
93  lifter.liftDown(45);
94  ASSERT_GE(lifter.getCurrentAngle(), -48);
95  ASSERT_LE(lifter.getCurrentAngle(), -45);
96  }
etrobocon2018_test::TEST_F ( LifterTest  ,
defaultSetTest1   
)

LifterTest.cpp98 行目に定義があります。

99  {
100  lifter.liftUp(90);
101  ASSERT_GE(lifter.getCurrentAngle(), 90);
102  lifter.defaultSet();
103  ASSERT_GE(lifter.getCurrentAngle(), -2);
104  ASSERT_LE(lifter.getCurrentAngle(), 2);
105  }
etrobocon2018_test::TEST_F ( LifterTest  ,
defaultSetTest2   
)

LifterTest.cpp107 行目に定義があります。

108  {
109  lifter.defaultSet();
110  ASSERT_GE(lifter.getCurrentAngle(), -2);
111  ASSERT_LE(lifter.getCurrentAngle(), 2);
112  }