blob: 11a0de985c497d61b94fb76ba696c5e7aa903095 [file] [log] [blame]
Lee Mracek65686142020-01-10 22:21:39 -05001#include "frc971/control_loops/coerce_goal.h"
2
3#include <unistd.h>
4
5#include "gtest/gtest.h"
6
7namespace frc971 {
8namespace control_loops {
9namespace {
10
11::aos::controls::HVPolytope<2, 4, 4, double> poly() {
12 return ::aos::controls::HVPolytope<2, 4, 4, double>(
13 (Eigen::Matrix<double, 4, 2>() << /*[[*/ 1, 0 /*]*/,
14 /*[*/ -1, 0 /*]*/,
15 /*[*/ 0, 1 /*]*/,
16 /*[*/ 0, -1 /*]]*/)
17 .finished(),
18 (Eigen::Matrix<double, 4, 1>() << /*[[*/ 12 /*]*/,
19 /*[*/ 12 /*]*/,
20 /*[*/ 12 /*]*/,
21 /*[*/ 12 /*]*/)
22 .finished(),
23 (Eigen::Matrix<double, 2, 4>() << /*[[*/ 12, 12, -12, -12 /*]*/,
24 /*[*/ -12, 12, 12, -12 /*]*/)
25 .finished());
26}
27
28TEST(CoerceGoalTest, WithinRegion) {
29 const auto upoly = poly();
30 Eigen::Matrix<double, 1, 2> k;
31 k << 2, 2;
32
33 Eigen::Matrix<double, 2, 1> goal;
34 goal << -2, 2;
35
36 auto result = CoerceGoal<double>(upoly, k, 0, goal);
37
38 EXPECT_EQ(result(0, 0), -2);
39 EXPECT_EQ(result(1, 0), 2);
40}
41
42TEST(CoerceGoalTest, VerticalLine) {
43 const auto upoly = poly();
44 Eigen::Matrix<double, 1, 2> k;
45 k << 2, 0;
46
47 Eigen::Matrix<double, 2, 1> goal;
48 goal << 0, 13;
49
50 auto result = CoerceGoal<double>(upoly, k, 0, goal);
51
52 EXPECT_EQ(result(0, 0), 0);
53 EXPECT_EQ(result(1, 0), 12);
54}
55
56TEST(CoerceGoalTest, HorizontalLine) {
57 const auto upoly = poly();
58 Eigen::Matrix<double, 1, 2> k;
59 k << 0, 2;
60
61 Eigen::Matrix<double, 2, 1> goal;
62 goal << 13, 2;
63
64 auto result = CoerceGoal<double>(upoly, k, 0, goal);
65
66 EXPECT_EQ(result(0, 0), 12);
67 EXPECT_EQ(result(1, 0), 0);
68}
69
70} // namespace
71} // namespace control_loops
72} // namespace frc971