Files
allwpilib/wpilibc/src/test/native/cpp/simulation/RelaySimTest.cpp

205 lines
5.6 KiB
C++
Raw Normal View History

2021-08-05 22:04:51 -04:00
// 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.
#include "frc/simulation/RelaySim.h" // NOLINT(build/include_order)
#include <gtest/gtest.h>
2021-08-05 22:04:51 -04:00
#include <hal/HAL.h>
#include "callback_helpers/TestCallbackHelpers.h"
#include "frc/Relay.h"
namespace frc::sim {
TEST(RelaySimTest, InitializationBidrectional) {
HAL_Initialize(500, 0);
RelaySim sim(0);
sim.ResetData();
BooleanCallback forwardCallback;
BooleanCallback reverseCallback;
EXPECT_FALSE(sim.GetInitializedForward());
EXPECT_FALSE(sim.GetInitializedReverse());
auto fwdCb = sim.RegisterInitializedForwardCallback(
forwardCallback.GetCallback(), false);
auto revCb = sim.RegisterInitializedReverseCallback(
reverseCallback.GetCallback(), false);
Relay relay{0};
EXPECT_TRUE(sim.GetInitializedForward());
EXPECT_TRUE(sim.GetInitializedReverse());
EXPECT_TRUE(forwardCallback.WasTriggered());
EXPECT_TRUE(forwardCallback.GetLastValue());
EXPECT_TRUE(reverseCallback.WasTriggered());
EXPECT_TRUE(reverseCallback.GetLastValue());
}
TEST(RelaySimTest, InitializationForwardOnly) {
HAL_Initialize(500, 0);
RelaySim sim{0};
sim.ResetData();
BooleanCallback forwardCallback;
BooleanCallback reverseCallback;
EXPECT_FALSE(sim.GetInitializedForward());
EXPECT_FALSE(sim.GetInitializedReverse());
auto fwdCb = sim.RegisterInitializedForwardCallback(
forwardCallback.GetCallback(), false);
auto revCb = sim.RegisterInitializedReverseCallback(
reverseCallback.GetCallback(), false);
Relay relay(0, Relay::kForwardOnly);
EXPECT_TRUE(sim.GetInitializedForward());
EXPECT_FALSE(sim.GetInitializedReverse());
EXPECT_TRUE(forwardCallback.WasTriggered());
EXPECT_TRUE(forwardCallback.GetLastValue());
EXPECT_FALSE(reverseCallback.WasTriggered());
}
TEST(RelaySimTest, InitializationReverseOnly) {
HAL_Initialize(500, 0);
RelaySim sim{0};
sim.ResetData();
BooleanCallback forwardCallback;
BooleanCallback reverseCallback;
EXPECT_FALSE(sim.GetInitializedForward());
EXPECT_FALSE(sim.GetInitializedReverse());
auto fwdCb = sim.RegisterInitializedForwardCallback(
forwardCallback.GetCallback(), false);
auto revCb = sim.RegisterInitializedReverseCallback(
reverseCallback.GetCallback(), false);
Relay relay(0, Relay::kReverseOnly);
EXPECT_FALSE(sim.GetInitializedForward());
EXPECT_TRUE(sim.GetInitializedReverse());
EXPECT_FALSE(forwardCallback.WasTriggered());
EXPECT_TRUE(reverseCallback.WasTriggered());
EXPECT_TRUE(reverseCallback.GetLastValue());
}
TEST(RelaySimTest, BidirectionalSetForward) {
HAL_Initialize(500, 0);
RelaySim sim{0};
BooleanCallback forwardCallback;
BooleanCallback reverseCallback;
Relay relay{0};
auto fwdCb =
sim.RegisterForwardCallback(forwardCallback.GetCallback(), false);
auto revCb =
sim.RegisterReverseCallback(reverseCallback.GetCallback(), false);
relay.Set(Relay::kForward);
EXPECT_EQ(Relay::kForward, relay.Get());
EXPECT_TRUE(sim.GetForward());
EXPECT_FALSE(sim.GetReverse());
EXPECT_TRUE(forwardCallback.WasTriggered());
EXPECT_TRUE(forwardCallback.GetLastValue());
EXPECT_FALSE(reverseCallback.WasTriggered());
}
TEST(RelaySimTest, BidirectionalSetReverse) {
HAL_Initialize(500, 0);
RelaySim sim{0};
BooleanCallback forwardCallback;
BooleanCallback reverseCallback;
Relay relay{0};
auto fwdCb =
sim.RegisterForwardCallback(forwardCallback.GetCallback(), false);
auto revCb =
sim.RegisterReverseCallback(reverseCallback.GetCallback(), false);
relay.Set(Relay::kReverse);
EXPECT_EQ(Relay::kReverse, relay.Get());
EXPECT_FALSE(sim.GetForward());
EXPECT_TRUE(sim.GetReverse());
EXPECT_FALSE(forwardCallback.WasTriggered());
EXPECT_TRUE(reverseCallback.WasTriggered());
EXPECT_TRUE(reverseCallback.GetLastValue());
}
TEST(RelaySimTest, BidirectionalSetOn) {
HAL_Initialize(500, 0);
RelaySim sim{0};
BooleanCallback forwardCallback;
BooleanCallback reverseCallback;
Relay relay{0};
auto fwdCb =
sim.RegisterForwardCallback(forwardCallback.GetCallback(), false);
auto revCb =
sim.RegisterReverseCallback(reverseCallback.GetCallback(), false);
relay.Set(Relay::kOn);
EXPECT_EQ(Relay::kOn, relay.Get());
EXPECT_TRUE(sim.GetForward());
EXPECT_TRUE(sim.GetReverse());
EXPECT_TRUE(forwardCallback.WasTriggered());
EXPECT_TRUE(forwardCallback.GetLastValue());
EXPECT_TRUE(reverseCallback.WasTriggered());
EXPECT_TRUE(reverseCallback.GetLastValue());
}
TEST(RelaySimTest, BidirectionalSetOff) {
HAL_Initialize(500, 0);
RelaySim sim{0};
BooleanCallback forwardCallback;
BooleanCallback reverseCallback;
Relay relay{0};
auto fwdCb =
sim.RegisterForwardCallback(forwardCallback.GetCallback(), false);
auto revCb =
sim.RegisterReverseCallback(reverseCallback.GetCallback(), false);
// Bootstrap into a non-off state to verify the callbacks
relay.Set(Relay::kOn);
forwardCallback.Reset();
reverseCallback.Reset();
relay.Set(Relay::kOff);
EXPECT_EQ(Relay::kOff, relay.Get());
EXPECT_FALSE(sim.GetForward());
EXPECT_FALSE(sim.GetReverse());
EXPECT_TRUE(forwardCallback.WasTriggered());
EXPECT_FALSE(forwardCallback.GetLastValue());
EXPECT_TRUE(reverseCallback.WasTriggered());
EXPECT_FALSE(reverseCallback.GetLastValue());
}
TEST(RelaySimTest, StopMotor) {
Relay relay{0};
RelaySim sim(relay);
// Bootstrap into non-off state
relay.Set(Relay::kOn);
relay.StopMotor();
EXPECT_EQ(Relay::kOff, relay.Get());
}
} // namespace frc::sim