2020-12-26 14:12:05 -08: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.
|
2014-06-12 16:29:47 -04:00
|
|
|
|
2018-07-20 00:03:45 -07:00
|
|
|
#include "frc/Relay.h" // NOLINT(build/include_order)
|
2016-05-25 22:38:11 -07:00
|
|
|
|
2021-05-28 22:06:59 -07:00
|
|
|
#include <units/time.h>
|
|
|
|
|
|
2016-05-25 22:38:11 -07:00
|
|
|
#include "TestBench.h"
|
2018-07-20 00:03:45 -07:00
|
|
|
#include "frc/DigitalInput.h"
|
|
|
|
|
#include "frc/Timer.h"
|
2016-09-05 13:55:31 -07:00
|
|
|
#include "gtest/gtest.h"
|
2016-05-25 22:38:11 -07:00
|
|
|
|
2021-05-28 22:06:59 -07:00
|
|
|
static constexpr auto kDelayTime = 10_ms;
|
2014-08-15 11:22:01 -04:00
|
|
|
|
2021-05-31 10:21:34 -07:00
|
|
|
TEST(RelayTest, BothDirections) {
|
|
|
|
|
frc::Relay relay{TestBench::kRelayChannel};
|
|
|
|
|
frc::DigitalInput forward{TestBench::kFakeRelayForward};
|
|
|
|
|
frc::DigitalInput reverse{TestBench::kFakeRelayReverse};
|
|
|
|
|
|
|
|
|
|
// Set the relay to forward
|
|
|
|
|
relay.Set(frc::Relay::kForward);
|
|
|
|
|
frc::Wait(kDelayTime);
|
|
|
|
|
EXPECT_TRUE(forward.Get()) << "Relay did not set forward";
|
|
|
|
|
EXPECT_FALSE(reverse.Get()) << "Relay did not set forward";
|
|
|
|
|
EXPECT_EQ(relay.Get(), frc::Relay::kForward);
|
|
|
|
|
|
|
|
|
|
// Set the relay to reverse
|
|
|
|
|
relay.Set(frc::Relay::kReverse);
|
|
|
|
|
frc::Wait(kDelayTime);
|
|
|
|
|
EXPECT_TRUE(reverse.Get()) << "Relay did not set reverse";
|
|
|
|
|
EXPECT_FALSE(forward.Get()) << "Relay did not set reverse";
|
|
|
|
|
EXPECT_EQ(relay.Get(), frc::Relay::kReverse);
|
|
|
|
|
|
|
|
|
|
// Set the relay to off
|
|
|
|
|
relay.Set(frc::Relay::kOff);
|
|
|
|
|
frc::Wait(kDelayTime);
|
|
|
|
|
EXPECT_FALSE(forward.Get()) << "Relay did not set off";
|
|
|
|
|
EXPECT_FALSE(reverse.Get()) << "Relay did not set off";
|
|
|
|
|
EXPECT_EQ(relay.Get(), frc::Relay::kOff);
|
|
|
|
|
|
|
|
|
|
// Set the relay to on
|
|
|
|
|
relay.Set(frc::Relay::kOn);
|
|
|
|
|
frc::Wait(kDelayTime);
|
|
|
|
|
EXPECT_TRUE(forward.Get()) << "Relay did not set on";
|
|
|
|
|
EXPECT_TRUE(reverse.Get()) << "Relay did not set on";
|
|
|
|
|
EXPECT_EQ(relay.Get(), frc::Relay::kOn);
|
|
|
|
|
}
|
2017-05-08 21:54:03 -07:00
|
|
|
|
2021-05-31 10:21:34 -07:00
|
|
|
TEST(RelayTest, ForwardOnly) {
|
|
|
|
|
frc::Relay relay{TestBench::kRelayChannel, frc::Relay::kForwardOnly};
|
|
|
|
|
frc::DigitalInput forward{TestBench::kFakeRelayForward};
|
|
|
|
|
frc::DigitalInput reverse{TestBench::kFakeRelayReverse};
|
2017-05-08 21:54:03 -07:00
|
|
|
|
2021-05-31 10:21:34 -07:00
|
|
|
relay.Set(frc::Relay::kOn);
|
|
|
|
|
frc::Wait(kDelayTime);
|
|
|
|
|
EXPECT_TRUE(forward.Get()) << "Relay did not set forward";
|
|
|
|
|
EXPECT_FALSE(reverse.Get()) << "Relay did not set forward";
|
|
|
|
|
EXPECT_EQ(relay.Get(), frc::Relay::kOn);
|
|
|
|
|
}
|
2017-05-08 21:54:03 -07:00
|
|
|
|
2021-05-31 10:21:34 -07:00
|
|
|
TEST(RelayTest, ReverseOnly) {
|
|
|
|
|
frc::Relay relay{TestBench::kRelayChannel, frc::Relay::kReverseOnly};
|
|
|
|
|
frc::DigitalInput forward{TestBench::kFakeRelayForward};
|
|
|
|
|
frc::DigitalInput reverse{TestBench::kFakeRelayReverse};
|
2017-05-08 21:54:03 -07:00
|
|
|
|
2021-05-31 10:21:34 -07:00
|
|
|
relay.Set(frc::Relay::kOn);
|
|
|
|
|
frc::Wait(kDelayTime);
|
|
|
|
|
EXPECT_FALSE(forward.Get()) << "Relay did not set reverse";
|
|
|
|
|
EXPECT_TRUE(reverse.Get()) << "Relay did not set reverse";
|
|
|
|
|
EXPECT_EQ(relay.Get(), frc::Relay::kOn);
|
2015-06-25 15:07:55 -04:00
|
|
|
}
|