etrobocon2018 feat.KatLab  770af34cce41ae9c30c41303275e1add2daae0c3 (with uncommitted changes)
 全て クラス 名前空間 ファイル 関数 変数 列挙型 列挙値 フレンド マクロ定義 ページ
FirstCodeTest.cpp
[詳解]
1 
5 /* コンパイル(森)
6  * $ g++ -w ../src/FirstCode.cpp FirstCodeTest.cpp gtest_main.o gtest-all.o -I../include
7  * -I../../googletest/googletest/include $ ./a.out
8  */
9 
10 #include "FirstCode.h" // このヘッダファイルのcppファイルをテスト
11 #include <gtest/gtest.h>
12 
13 namespace etrobocon2018_test {
14 
15  // 何もしない場合は0を返す
16  TEST(FirstCodeTest, get0WhenNoneUpAndDownAnyDigit)
17  {
18  FirstCode obj;
19 
20  int expected = obj.getFirstCode();
21 
22  ASSERT_EQ(expected, 0);
23  }
24 
25  // 最初に5桁目を上げた場合は10000を返す
26  TEST(FirstCodeTest, get10000WhenOnceUp5thDigit)
27  {
28  FirstCode obj;
29 
30  obj.upDigit(5);
31  int expected = obj.getFirstCode();
32 
33  ASSERT_EQ(expected, 10000);
34  }
35 
36  // 最初に4桁目を上げた場合は1000を返す
37  TEST(FirstCodeTest, get1000WhenOnceUp4thDigit)
38  {
39  FirstCode obj;
40 
41  obj.upDigit(4);
42  int expected = obj.getFirstCode();
43 
44  ASSERT_EQ(expected, 1000);
45  }
46 
47  // 最初に3桁目を上げた場合は100を返す
48  TEST(FirstCodeTest, get100WhenOnceUp3rdDigit)
49  {
50  FirstCode obj;
51 
52  obj.upDigit(3);
53  int expected = obj.getFirstCode();
54 
55  ASSERT_EQ(expected, 100);
56  }
57 
58  // 最初に2桁目を上げた場合は10を返す
59  TEST(FirstCodeTest, get10WhenOnceUp2ndDigit)
60  {
61  FirstCode obj;
62 
63  obj.upDigit(2);
64  int expected = obj.getFirstCode();
65 
66  ASSERT_EQ(expected, 10);
67  }
68 
69  // 最初に1桁目を上げた場合は1を返す
70  TEST(FirstCodeTest, get1WhenOnceUp1stDigit)
71  {
72  FirstCode obj;
73 
74  obj.upDigit(1);
75  int expected = obj.getFirstCode();
76 
77  ASSERT_EQ(expected, 1);
78  }
79 
80  // 5桁目を10回上げた場合は0を返す
81  TEST(FirstCodeTest, get0When10thUp5thDigit)
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  }
92 
93  // 最初に1桁目を上げて下げた場合は0を返す
94  TEST(FirstCodeTest, get0WhenOnceUpAndDown1stDigita)
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  }
104 
105  // 5桁目を1回下げた場合は90000を返す
106  TEST(FirstCodeTest, get90000WhenOnceDown5thDigit)
107  {
108  FirstCode obj;
109 
110  obj.downDigit(5);
111  int expected = obj.getFirstCode();
112 
113  ASSERT_EQ(expected, 90000);
114  }
115 
116  // 5桁目を10回下げた場合は0を返す
117  TEST(FirstCodeTest, get0When10thDown5thDigit)
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  }
128 
129  // 1桁目を5回、2桁目を4回、3桁目を3回、4桁目を2回、5桁目を1回上げると12345を返す
130  TEST(FirstCodeTest, get12345WhenOnceDown5thDigit)
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  }
149 
150  // 桁数を何もいじらない場合は5を返す
151  TEST(FirstCodeTest, get5WhenDoNotChangeLeftAndRightAnyDigitNumber)
152  {
153  FirstCode obj;
154 
155  int expected = obj.getDigit();
156 
157  ASSERT_EQ(expected, 5);
158  }
159 
160  // 桁数を右に1回ずれた場合は4を返す
161  TEST(FirstCodeTest, get4WhenOnceChangeRightDigitNumber)
162  {
163  FirstCode obj;
164 
165  obj.changeRightDigit();
166  int expected = obj.getDigit();
167 
168  ASSERT_EQ(expected, 4);
169  }
170 
171  // 桁数を右に5回ずれた場合は5を返す
172  TEST(FirstCodeTest, get5When5thChangeRightDigitNumber)
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  }
183 
184  // 桁数を右に2回ずれてから左に1回ずれた場合は4を返す
185  TEST(FirstCodeTest, get5WhenOnceChangeLeftDigitNumberAfterTwiceChangeRightDigitNumber)
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  }
196 
197  // 桁数を左に1回ずれた場合は1を返す
198  TEST(FirstCodeTest, get1WhenOnceChangeLeftDigitNumber)
199  {
200  FirstCode obj;
201 
202  obj.changeLeftDigit();
203  int expected = obj.getDigit();
204 
205  ASSERT_EQ(expected, 1);
206  }
207 } // namespace etrobocon2018_test
void upDigit(int8_t)
Definition: FirstCode.cpp:19
void changeRightDigit()
Definition: FirstCode.cpp:59
void changeLeftDigit()
Definition: FirstCode.cpp:68
int32_t getFirstCode()
Definition: FirstCode.cpp:41
TEST(AIAnswerArrayTest, construct)
void downDigit(int8_t)
Definition: FirstCode.cpp:30
初期位置コードクラス
Definition: FirstCode.h:14
int8_t getDigit()
Definition: FirstCode.cpp:54
初期位置コードクラス