Files
allwpilib/wpilibc/src/test/native/cpp/motorcontrol/MotorControllerGroupTest.cpp

126 lines
3.4 KiB
C++
Raw Normal View History

// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
2017-10-16 22:54:36 -04:00
#include "frc/motorcontrol/MotorControllerGroup.h" // NOLINT(build/include_order)
2017-10-16 22:54:36 -04:00
#include <memory>
#include <vector>
#include "gtest/gtest.h"
#include "motorcontrol/MockMotorController.h"
2017-10-16 22:54:36 -04:00
using namespace frc;
enum MotorControllerGroupTestType { TEST_ONE, TEST_TWO, TEST_THREE };
2017-10-16 22:54:36 -04:00
std::ostream& operator<<(std::ostream& os,
const MotorControllerGroupTestType& type) {
2017-10-16 22:54:36 -04:00
switch (type) {
case TEST_ONE:
os << "MotorControllerGroup with one motor controller";
2017-10-16 22:54:36 -04:00
break;
case TEST_TWO:
os << "MotorControllerGroup with two motor controllers";
2017-10-16 22:54:36 -04:00
break;
case TEST_THREE:
os << "MotorControllerGroup with three motor controllers";
2017-10-16 22:54:36 -04:00
break;
}
return os;
}
/**
* A fixture used for MotorControllerGroup testing.
2017-10-16 22:54:36 -04:00
*/
class MotorControllerGroupTest
: public testing::TestWithParam<MotorControllerGroupTestType> {
2017-10-16 22:54:36 -04:00
protected:
std::vector<MockMotorController> m_motorControllers;
std::unique_ptr<MotorControllerGroup> m_group;
2017-10-16 22:54:36 -04:00
void SetUp() override {
switch (GetParam()) {
case TEST_ONE: {
m_motorControllers.emplace_back();
m_group = std::make_unique<MotorControllerGroup>(m_motorControllers[0]);
2017-10-16 22:54:36 -04:00
break;
}
case TEST_TWO: {
m_motorControllers.emplace_back();
m_motorControllers.emplace_back();
m_group = std::make_unique<MotorControllerGroup>(m_motorControllers[0],
m_motorControllers[1]);
2017-10-16 22:54:36 -04:00
break;
}
case TEST_THREE: {
m_motorControllers.emplace_back();
m_motorControllers.emplace_back();
m_motorControllers.emplace_back();
m_group = std::make_unique<MotorControllerGroup>(m_motorControllers[0],
m_motorControllers[1],
m_motorControllers[2]);
2017-10-16 22:54:36 -04:00
break;
}
}
}
};
TEST_P(MotorControllerGroupTest, Set) {
2017-10-16 22:54:36 -04:00
m_group->Set(1.0);
for (auto& motorController : m_motorControllers) {
EXPECT_FLOAT_EQ(motorController.Get(), 1.0);
2017-10-16 22:54:36 -04:00
}
}
TEST_P(MotorControllerGroupTest, GetInverted) {
2017-10-16 22:54:36 -04:00
m_group->SetInverted(true);
EXPECT_TRUE(m_group->GetInverted());
}
TEST_P(MotorControllerGroupTest, SetInvertedDoesNotModifyMotorControllers) {
for (auto& motorController : m_motorControllers) {
motorController.SetInverted(false);
2017-10-16 22:54:36 -04:00
}
m_group->SetInverted(true);
for (auto& motorController : m_motorControllers) {
EXPECT_EQ(motorController.GetInverted(), false);
2017-10-16 22:54:36 -04:00
}
}
TEST_P(MotorControllerGroupTest, SetInvertedDoesInvert) {
2017-10-16 22:54:36 -04:00
m_group->SetInverted(true);
m_group->Set(1.0);
for (auto& motorController : m_motorControllers) {
EXPECT_FLOAT_EQ(motorController.Get(), -1.0);
2017-10-16 22:54:36 -04:00
}
}
TEST_P(MotorControllerGroupTest, Disable) {
2017-10-16 22:54:36 -04:00
m_group->Set(1.0);
m_group->Disable();
for (auto& motorController : m_motorControllers) {
EXPECT_FLOAT_EQ(motorController.Get(), 0.0);
2017-10-16 22:54:36 -04:00
}
}
TEST_P(MotorControllerGroupTest, StopMotor) {
2017-10-16 22:54:36 -04:00
m_group->Set(1.0);
m_group->StopMotor();
for (auto& motorController : m_motorControllers) {
EXPECT_FLOAT_EQ(motorController.Get(), 0.0);
2017-10-16 22:54:36 -04:00
}
}
INSTANTIATE_TEST_SUITE_P(Tests, MotorControllerGroupTest,
testing::Values(TEST_ONE, TEST_TWO, TEST_THREE));