etrobocon2018 feat.KatLab  770af34cce41ae9c30c41303275e1add2daae0c3 (with uncommitted changes)
 全て クラス 名前空間 ファイル 関数 変数 列挙型 列挙値 フレンド マクロ定義 ページ
PidTest.cpp
[詳解]
1 
5 /* コンパイル(平木場)
6 $ g++-7 -w ../apps/commons/Pid.cpp PidTest.cpp gtest_main.o gtest-all.o -I. -I..
7 -I../googletest/googletest/include $ ./a.out
8 */
9 
10 #include "Pid.h" // このヘッダファイルのcppファイルをテスト
11 #include <gtest/gtest.h>
12 
13 namespace etrobocon2018_test {
14 
15  class TEST_CLASS : public Pid {
16  public:
17  TEST_CLASS() : Pid(0.5, 0.5, 0.5, 30.0) {}
18  double limitOutput(double pid_value) { return Pid::limitOutput(pid_value); }
19  void calculate(double now_value) { Pid::calculate(now_value); }
20  double get_output() { return Pid::get_output(); }
21  };
22 
23  // Pidのtarget以下の数字を入力すると負の数を出力する
24  TEST(PidTest, CalculateTest1)
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  }
35 
36  // Pidのtarget以上の数字を入力すると正の数を出力する
37  TEST(detectBarrierTest, CalculateTest2)
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  }
48 
49  // Pidの出力が100を超えると100になる
50  TEST(PidTest, limitOutputTest1)
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  }
62 
63  // Pidの出力が-100を超えると-100になる
64  TEST(PidTest, limitOutputTest2)
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  }
76 
77  // Pidの出力が100~-100の範囲だとそのまま
78  TEST(PidTest, limitOutputTest3)
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  }
90 } // namespace etrobocon2018_test
double get_output()
Definition: Pid.cpp:32
void calculate(double light_value)
Definition: Pid.cpp:19
void calculate(double now_value)
Definition: PidTest.cpp:19
void setPid(double p_gain_, double i_gain_, double d_gain_, double target_)
Definition: Pid.cpp:40
TEST(AIAnswerArrayTest, construct)
PID制御の計算を行うクラス
double limitOutput(double pid_value)
Definition: Pid.cpp:46
PID制御の計算を行うクラス
Definition: Pid.h:38
double limitOutput(double pid_value)
Definition: PidTest.cpp:18