blob: 11a0de985c497d61b94fb76ba696c5e7aa903095 [file] [log] [blame]
#include "frc971/control_loops/coerce_goal.h"
#include <unistd.h>
#include "gtest/gtest.h"
namespace frc971 {
namespace control_loops {
namespace {
::aos::controls::HVPolytope<2, 4, 4, double> poly() {
return ::aos::controls::HVPolytope<2, 4, 4, double>(
(Eigen::Matrix<double, 4, 2>() << /*[[*/ 1, 0 /*]*/,
/*[*/ -1, 0 /*]*/,
/*[*/ 0, 1 /*]*/,
/*[*/ 0, -1 /*]]*/)
.finished(),
(Eigen::Matrix<double, 4, 1>() << /*[[*/ 12 /*]*/,
/*[*/ 12 /*]*/,
/*[*/ 12 /*]*/,
/*[*/ 12 /*]*/)
.finished(),
(Eigen::Matrix<double, 2, 4>() << /*[[*/ 12, 12, -12, -12 /*]*/,
/*[*/ -12, 12, 12, -12 /*]*/)
.finished());
}
TEST(CoerceGoalTest, WithinRegion) {
const auto upoly = poly();
Eigen::Matrix<double, 1, 2> k;
k << 2, 2;
Eigen::Matrix<double, 2, 1> goal;
goal << -2, 2;
auto result = CoerceGoal<double>(upoly, k, 0, goal);
EXPECT_EQ(result(0, 0), -2);
EXPECT_EQ(result(1, 0), 2);
}
TEST(CoerceGoalTest, VerticalLine) {
const auto upoly = poly();
Eigen::Matrix<double, 1, 2> k;
k << 2, 0;
Eigen::Matrix<double, 2, 1> goal;
goal << 0, 13;
auto result = CoerceGoal<double>(upoly, k, 0, goal);
EXPECT_EQ(result(0, 0), 0);
EXPECT_EQ(result(1, 0), 12);
}
TEST(CoerceGoalTest, HorizontalLine) {
const auto upoly = poly();
Eigen::Matrix<double, 1, 2> k;
k << 0, 2;
Eigen::Matrix<double, 2, 1> goal;
goal << 13, 2;
auto result = CoerceGoal<double>(upoly, k, 0, goal);
EXPECT_EQ(result(0, 0), 12);
EXPECT_EQ(result(1, 0), 0);
}
} // namespace
} // namespace control_loops
} // namespace frc971