etrobocon2018 feat.KatLab  770af34cce41ae9c30c41303275e1add2daae0c3 (with uncommitted changes)
 全て クラス 名前空間 ファイル 関数 変数 列挙型 列挙値 フレンド マクロ定義 ページ
InitialPositionCodeDecoderTest.cpp
[詳解]
1 
5 /* コンパイル(平木場)
6 $ g++-7 InitialPositionCodeDecoderTest.cpp ../src/InitialPositionCodeDecoder.cpp gtest_main.o gtest-all.o -I../include
7 -I../../googletest/googletest/include
8 */
9 
11 #include <random>
12 #include <gtest/gtest.h>
13 
14 namespace etrobocon2018_test {
15 
16  // 初期値を返す
17  TEST(InitialPositionCodeDecoderTest, getInitialPositionCodeListTest1)
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  }
26 
27  // パワーブロックの初期値を返す
28  TEST(InitialPositionCodeDecoderTest, getInitialPositionPowerBlockCodeTest1)
29  {
31  int8_t expected = 0;
32 
33  auto actual = obj.getInitialPositionPowerBlockCode();
34 
35  ASSERT_EQ(expected, actual);
36  }
37 
38  // 0未満の引数に対して初期値を返す
39  TEST(InitialPositionCodeDecoderTest, returnInitialPositionCodeListByNegativeIntegerTest)
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  }
49 
50  // パワーブロックの初期位置コードをデコードする
51  TEST(InitialPositionCodeDecoderTest, decodePowerBlockCodeTest1)
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  }
62 
63  // カラーブロックの初期位置コードの1番目をデコードする
64  TEST(InitialPositionCodeDecoderTest, decodeFirstColorBlockOfCodeTest1)
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  }
75 
76  // カラーブロックの初期位置コードの2番目をデコードする
77  TEST(InitialPositionCodeDecoderTest, decodeSecondColorBlockOfCodeTest1)
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  }
88 
89  // カラーブロックの初期位置コードの3番目をデコードする
90  TEST(InitialPositionCodeDecoderTest, decodeThirdColorBlockOfCodeTest1)
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  }
101 
102  // カラーブロックの初期位置コードの4番目をデコードする
103  TEST(InitialPositionCodeDecoderTest, decodeFourthColorBlockOfCodeTest1)
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  }
114 
115  // ランダムの数値をデコードする
116  TEST(InitialPositionCodeDecoderTest, decodeRandomCodeTest)
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  }
148 
149 } // namespace etrobocon2018_test
初期位置コードデコーダークラス
TEST(AIAnswerArrayTest, construct)
std::vector< std::int8_t > getInitialPositionCodeList()