[wpilib] Refactor TimedRobot tests (#5068)

This commit is contained in:
Tyler Veness
2023-02-07 23:00:46 -08:00
committed by GitHub
parent 22a170bee7
commit 37f065032f
2 changed files with 59 additions and 47 deletions

View File

@@ -16,6 +16,8 @@
using namespace frc;
inline constexpr auto kPeriod = 20_ms;
namespace {
class TimedRobotTest : public ::testing::TestWithParam<bool> {
protected:
@@ -45,6 +47,8 @@ class MockRobot : public TimedRobot {
std::atomic<uint32_t> m_teleopPeriodicCount{0};
std::atomic<uint32_t> m_testPeriodicCount{0};
MockRobot() : TimedRobot{kPeriod} {}
void RobotInit() override { m_robotInitCount++; }
void SimulationInit() override { m_simulationInitCount++; }
@@ -107,7 +111,7 @@ TEST_F(TimedRobotTest, DisabledMode) {
EXPECT_EQ(0u, robot.m_teleopExitCount);
EXPECT_EQ(0u, robot.m_testExitCount);
frc::sim::StepTiming(20_ms);
frc::sim::StepTiming(kPeriod);
EXPECT_EQ(1u, robot.m_robotInitCount);
EXPECT_EQ(1u, robot.m_simulationInitCount);
@@ -128,7 +132,7 @@ TEST_F(TimedRobotTest, DisabledMode) {
EXPECT_EQ(0u, robot.m_teleopExitCount);
EXPECT_EQ(0u, robot.m_testExitCount);
frc::sim::StepTiming(20_ms);
frc::sim::StepTiming(kPeriod);
EXPECT_EQ(1u, robot.m_robotInitCount);
EXPECT_EQ(1u, robot.m_simulationInitCount);
@@ -183,7 +187,7 @@ TEST_F(TimedRobotTest, AutonomousMode) {
EXPECT_EQ(0u, robot.m_teleopExitCount);
EXPECT_EQ(0u, robot.m_testExitCount);
frc::sim::StepTiming(20_ms);
frc::sim::StepTiming(kPeriod);
EXPECT_EQ(1u, robot.m_robotInitCount);
EXPECT_EQ(1u, robot.m_simulationInitCount);
@@ -204,7 +208,7 @@ TEST_F(TimedRobotTest, AutonomousMode) {
EXPECT_EQ(0u, robot.m_teleopExitCount);
EXPECT_EQ(0u, robot.m_testExitCount);
frc::sim::StepTiming(20_ms);
frc::sim::StepTiming(kPeriod);
EXPECT_EQ(1u, robot.m_robotInitCount);
EXPECT_EQ(1u, robot.m_simulationInitCount);
@@ -259,7 +263,7 @@ TEST_F(TimedRobotTest, TeleopMode) {
EXPECT_EQ(0u, robot.m_teleopExitCount);
EXPECT_EQ(0u, robot.m_testExitCount);
frc::sim::StepTiming(20_ms);
frc::sim::StepTiming(kPeriod);
EXPECT_EQ(1u, robot.m_robotInitCount);
EXPECT_EQ(1u, robot.m_simulationInitCount);
@@ -280,7 +284,7 @@ TEST_F(TimedRobotTest, TeleopMode) {
EXPECT_EQ(0u, robot.m_teleopExitCount);
EXPECT_EQ(0u, robot.m_testExitCount);
frc::sim::StepTiming(20_ms);
frc::sim::StepTiming(kPeriod);
EXPECT_EQ(1u, robot.m_robotInitCount);
EXPECT_EQ(1u, robot.m_simulationInitCount);
@@ -339,7 +343,7 @@ TEST_P(TimedRobotTest, TestMode) {
EXPECT_EQ(0u, robot.m_teleopExitCount);
EXPECT_EQ(0u, robot.m_testExitCount);
frc::sim::StepTiming(20_ms);
frc::sim::StepTiming(kPeriod);
EXPECT_EQ(1u, robot.m_robotInitCount);
EXPECT_EQ(1u, robot.m_simulationInitCount);
@@ -363,7 +367,7 @@ TEST_P(TimedRobotTest, TestMode) {
EXPECT_EQ(0u, robot.m_teleopExitCount);
EXPECT_EQ(0u, robot.m_testExitCount);
frc::sim::StepTiming(20_ms);
frc::sim::StepTiming(kPeriod);
EXPECT_EQ(1u, robot.m_robotInitCount);
EXPECT_EQ(1u, robot.m_simulationInitCount);
@@ -436,7 +440,7 @@ TEST_F(TimedRobotTest, ModeChange) {
EXPECT_EQ(0u, robot.m_teleopExitCount);
EXPECT_EQ(0u, robot.m_testExitCount);
frc::sim::StepTiming(20_ms);
frc::sim::StepTiming(kPeriod);
EXPECT_EQ(1u, robot.m_disabledInitCount);
EXPECT_EQ(0u, robot.m_autonomousInitCount);
@@ -454,7 +458,7 @@ TEST_F(TimedRobotTest, ModeChange) {
frc::sim::DriverStationSim::SetTest(false);
frc::sim::DriverStationSim::NotifyNewData();
frc::sim::StepTiming(20_ms);
frc::sim::StepTiming(kPeriod);
EXPECT_EQ(1u, robot.m_disabledInitCount);
EXPECT_EQ(1u, robot.m_autonomousInitCount);
@@ -472,7 +476,7 @@ TEST_F(TimedRobotTest, ModeChange) {
frc::sim::DriverStationSim::SetTest(false);
frc::sim::DriverStationSim::NotifyNewData();
frc::sim::StepTiming(20_ms);
frc::sim::StepTiming(kPeriod);
EXPECT_EQ(1u, robot.m_disabledInitCount);
EXPECT_EQ(1u, robot.m_autonomousInitCount);
@@ -490,7 +494,7 @@ TEST_F(TimedRobotTest, ModeChange) {
frc::sim::DriverStationSim::SetTest(true);
frc::sim::DriverStationSim::NotifyNewData();
frc::sim::StepTiming(20_ms);
frc::sim::StepTiming(kPeriod);
EXPECT_EQ(1u, robot.m_disabledInitCount);
EXPECT_EQ(1u, robot.m_autonomousInitCount);
@@ -508,7 +512,7 @@ TEST_F(TimedRobotTest, ModeChange) {
frc::sim::DriverStationSim::SetTest(false);
frc::sim::DriverStationSim::NotifyNewData();
frc::sim::StepTiming(20_ms);
frc::sim::StepTiming(kPeriod);
EXPECT_EQ(2u, robot.m_disabledInitCount);
EXPECT_EQ(1u, robot.m_autonomousInitCount);
@@ -528,7 +532,7 @@ TEST_F(TimedRobotTest, AddPeriodic) {
MockRobot robot;
std::atomic<uint32_t> callbackCount{0};
robot.AddPeriodic([&] { callbackCount++; }, 10_ms);
robot.AddPeriodic([&] { callbackCount++; }, kPeriod / 2.0);
std::thread robotThread{[&] { robot.StartCompetition(); }};
@@ -540,13 +544,13 @@ TEST_F(TimedRobotTest, AddPeriodic) {
EXPECT_EQ(0u, robot.m_disabledPeriodicCount);
EXPECT_EQ(0u, callbackCount);
frc::sim::StepTiming(10_ms);
frc::sim::StepTiming(kPeriod / 2.0);
EXPECT_EQ(0u, robot.m_disabledInitCount);
EXPECT_EQ(0u, robot.m_disabledPeriodicCount);
EXPECT_EQ(1u, callbackCount);
frc::sim::StepTiming(10_ms);
frc::sim::StepTiming(kPeriod / 2.0);
EXPECT_EQ(1u, robot.m_disabledInitCount);
EXPECT_EQ(1u, robot.m_disabledPeriodicCount);
@@ -560,14 +564,14 @@ TEST_F(TimedRobotTest, AddPeriodicWithOffset) {
MockRobot robot;
std::atomic<uint32_t> callbackCount{0};
robot.AddPeriodic([&] { callbackCount++; }, 10_ms, 5_ms);
robot.AddPeriodic([&] { callbackCount++; }, kPeriod / 2.0, kPeriod / 4.0);
// Expirations in this test (ms)
//
// Robot | Callback
// ================
// 20 | 15
// 40 | 25
// p | 0.75p
// 2p | 1.25p
std::thread robotThread{[&] { robot.StartCompetition(); }};
@@ -579,25 +583,25 @@ TEST_F(TimedRobotTest, AddPeriodicWithOffset) {
EXPECT_EQ(0u, robot.m_disabledPeriodicCount);
EXPECT_EQ(0u, callbackCount);
frc::sim::StepTiming(7.5_ms);
frc::sim::StepTiming(kPeriod * 3.0 / 8.0);
EXPECT_EQ(0u, robot.m_disabledInitCount);
EXPECT_EQ(0u, robot.m_disabledPeriodicCount);
EXPECT_EQ(0u, callbackCount);
frc::sim::StepTiming(7.5_ms);
frc::sim::StepTiming(kPeriod * 3.0 / 8.0);
EXPECT_EQ(0u, robot.m_disabledInitCount);
EXPECT_EQ(0u, robot.m_disabledPeriodicCount);
EXPECT_EQ(1u, callbackCount);
frc::sim::StepTiming(5_ms);
frc::sim::StepTiming(kPeriod / 4.0);
EXPECT_EQ(1u, robot.m_disabledInitCount);
EXPECT_EQ(1u, robot.m_disabledPeriodicCount);
EXPECT_EQ(1u, callbackCount);
frc::sim::StepTiming(5_ms);
frc::sim::StepTiming(kPeriod / 4.0);
EXPECT_EQ(1u, robot.m_disabledInitCount);
EXPECT_EQ(1u, robot.m_disabledPeriodicCount);

View File

@@ -21,6 +21,8 @@ import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
class TimedRobotTest {
static final double kPeriod = 0.02;
static class MockRobot extends TimedRobot {
public final AtomicInteger m_robotInitCount = new AtomicInteger(0);
public final AtomicInteger m_simulationInitCount = new AtomicInteger(0);
@@ -41,6 +43,10 @@ class TimedRobotTest {
public final AtomicInteger m_teleopExitCount = new AtomicInteger(0);
public final AtomicInteger m_testExitCount = new AtomicInteger(0);
MockRobot() {
super(kPeriod);
}
@Override
public void robotInit() {
m_robotInitCount.addAndGet(1);
@@ -168,7 +174,7 @@ class TimedRobotTest {
assertEquals(0, robot.m_teleopExitCount.get());
assertEquals(0, robot.m_testExitCount.get());
SimHooks.stepTiming(0.02);
SimHooks.stepTiming(kPeriod);
assertEquals(1, robot.m_robotInitCount.get());
assertEquals(1, robot.m_simulationInitCount.get());
@@ -189,7 +195,7 @@ class TimedRobotTest {
assertEquals(0, robot.m_teleopExitCount.get());
assertEquals(0, robot.m_testExitCount.get());
SimHooks.stepTiming(0.02);
SimHooks.stepTiming(kPeriod);
assertEquals(1, robot.m_robotInitCount.get());
assertEquals(1, robot.m_simulationInitCount.get());
@@ -257,7 +263,7 @@ class TimedRobotTest {
assertEquals(0, robot.m_teleopExitCount.get());
assertEquals(0, robot.m_testExitCount.get());
SimHooks.stepTiming(0.02);
SimHooks.stepTiming(kPeriod);
assertEquals(1, robot.m_robotInitCount.get());
assertEquals(1, robot.m_simulationInitCount.get());
@@ -278,7 +284,7 @@ class TimedRobotTest {
assertEquals(0, robot.m_teleopExitCount.get());
assertEquals(0, robot.m_testExitCount.get());
SimHooks.stepTiming(0.02);
SimHooks.stepTiming(kPeriod);
assertEquals(1, robot.m_robotInitCount.get());
assertEquals(1, robot.m_simulationInitCount.get());
@@ -346,7 +352,7 @@ class TimedRobotTest {
assertEquals(0, robot.m_teleopExitCount.get());
assertEquals(0, robot.m_testExitCount.get());
SimHooks.stepTiming(0.02);
SimHooks.stepTiming(kPeriod);
assertEquals(1, robot.m_robotInitCount.get());
assertEquals(1, robot.m_simulationInitCount.get());
@@ -367,7 +373,7 @@ class TimedRobotTest {
assertEquals(0, robot.m_teleopExitCount.get());
assertEquals(0, robot.m_testExitCount.get());
SimHooks.stepTiming(0.02);
SimHooks.stepTiming(kPeriod);
assertEquals(1, robot.m_robotInitCount.get());
assertEquals(1, robot.m_simulationInitCount.get());
@@ -438,7 +444,7 @@ class TimedRobotTest {
assertEquals(0, robot.m_teleopExitCount.get());
assertEquals(0, robot.m_testExitCount.get());
SimHooks.stepTiming(0.02);
SimHooks.stepTiming(kPeriod);
assertEquals(1, robot.m_robotInitCount.get());
assertEquals(1, robot.m_simulationInitCount.get());
@@ -459,7 +465,7 @@ class TimedRobotTest {
assertEquals(0, robot.m_teleopExitCount.get());
assertEquals(0, robot.m_testExitCount.get());
SimHooks.stepTiming(0.02);
SimHooks.stepTiming(kPeriod);
assertEquals(1, robot.m_robotInitCount.get());
assertEquals(1, robot.m_simulationInitCount.get());
@@ -549,7 +555,7 @@ class TimedRobotTest {
assertEquals(0, robot.m_teleopExitCount.get());
assertEquals(0, robot.m_testExitCount.get());
SimHooks.stepTiming(0.02);
SimHooks.stepTiming(kPeriod);
assertEquals(1, robot.m_disabledInitCount.get());
assertEquals(0, robot.m_autonomousInitCount.get());
@@ -567,7 +573,7 @@ class TimedRobotTest {
DriverStationSim.setTest(false);
DriverStationSim.notifyNewData();
SimHooks.stepTiming(0.02);
SimHooks.stepTiming(kPeriod);
assertEquals(1, robot.m_disabledInitCount.get());
assertEquals(1, robot.m_autonomousInitCount.get());
@@ -585,7 +591,7 @@ class TimedRobotTest {
DriverStationSim.setTest(false);
DriverStationSim.notifyNewData();
SimHooks.stepTiming(0.02);
SimHooks.stepTiming(kPeriod);
assertEquals(1, robot.m_disabledInitCount.get());
assertEquals(1, robot.m_autonomousInitCount.get());
@@ -603,7 +609,7 @@ class TimedRobotTest {
DriverStationSim.setTest(true);
DriverStationSim.notifyNewData();
SimHooks.stepTiming(0.02);
SimHooks.stepTiming(kPeriod);
assertEquals(1, robot.m_disabledInitCount.get());
assertEquals(1, robot.m_autonomousInitCount.get());
@@ -621,7 +627,7 @@ class TimedRobotTest {
DriverStationSim.setTest(false);
DriverStationSim.notifyNewData();
SimHooks.stepTiming(0.02);
SimHooks.stepTiming(kPeriod);
assertEquals(2, robot.m_disabledInitCount.get());
assertEquals(1, robot.m_autonomousInitCount.get());
@@ -653,7 +659,7 @@ class TimedRobotTest {
() -> {
callbackCount.addAndGet(1);
},
0.01);
kPeriod / 2.0);
Thread robotThread =
new Thread(
@@ -670,13 +676,13 @@ class TimedRobotTest {
assertEquals(0, robot.m_disabledPeriodicCount.get());
assertEquals(0, callbackCount.get());
SimHooks.stepTiming(0.01);
SimHooks.stepTiming(kPeriod / 2.0);
assertEquals(0, robot.m_disabledInitCount.get());
assertEquals(0, robot.m_disabledPeriodicCount.get());
assertEquals(1, callbackCount.get());
SimHooks.stepTiming(0.01);
SimHooks.stepTiming(kPeriod / 2.0);
assertEquals(1, robot.m_disabledInitCount.get());
assertEquals(1, robot.m_disabledPeriodicCount.get());
@@ -702,15 +708,17 @@ class TimedRobotTest {
() -> {
callbackCount.addAndGet(1);
},
0.01,
0.005);
kPeriod / 2.0,
kPeriod / 4.0);
// Expirations in this test (ms)
//
// Let p be period in ms.
//
// Robot | Callback
// ================
// 20 | 15
// 40 | 25
// p | 0.75p
// 2p | 1.25p
Thread robotThread =
new Thread(
@@ -727,25 +735,25 @@ class TimedRobotTest {
assertEquals(0, robot.m_disabledPeriodicCount.get());
assertEquals(0, callbackCount.get());
SimHooks.stepTiming(0.0075);
SimHooks.stepTiming(kPeriod * 3.0 / 8.0);
assertEquals(0, robot.m_disabledInitCount.get());
assertEquals(0, robot.m_disabledPeriodicCount.get());
assertEquals(0, callbackCount.get());
SimHooks.stepTiming(0.0075);
SimHooks.stepTiming(kPeriod * 3.0 / 8.0);
assertEquals(0, robot.m_disabledInitCount.get());
assertEquals(0, robot.m_disabledPeriodicCount.get());
assertEquals(1, callbackCount.get());
SimHooks.stepTiming(0.005);
SimHooks.stepTiming(kPeriod / 4.0);
assertEquals(1, robot.m_disabledInitCount.get());
assertEquals(1, robot.m_disabledPeriodicCount.get());
assertEquals(1, callbackCount.get());
SimHooks.stepTiming(0.005);
SimHooks.stepTiming(kPeriod / 4.0);
assertEquals(1, robot.m_disabledInitCount.get());
assertEquals(1, robot.m_disabledPeriodicCount.get());