diff --git a/wpilibc/src/test/native/cpp/TimedRobotTest.cpp b/wpilibc/src/test/native/cpp/TimedRobotTest.cpp index 08c262bc41..f899cbf9ec 100644 --- a/wpilibc/src/test/native/cpp/TimedRobotTest.cpp +++ b/wpilibc/src/test/native/cpp/TimedRobotTest.cpp @@ -16,6 +16,8 @@ using namespace frc; +inline constexpr auto kPeriod = 20_ms; + namespace { class TimedRobotTest : public ::testing::TestWithParam { protected: @@ -45,6 +47,8 @@ class MockRobot : public TimedRobot { std::atomic m_teleopPeriodicCount{0}; std::atomic 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 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 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); diff --git a/wpilibj/src/test/java/edu/wpi/first/wpilibj/TimedRobotTest.java b/wpilibj/src/test/java/edu/wpi/first/wpilibj/TimedRobotTest.java index bf143e79ab..c1c5f3c128 100644 --- a/wpilibj/src/test/java/edu/wpi/first/wpilibj/TimedRobotTest.java +++ b/wpilibj/src/test/java/edu/wpi/first/wpilibj/TimedRobotTest.java @@ -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());