blob: 7e5c8d2106ea77879374cbd8610f5c80afc3d525 [file] [log] [blame]
Austin Schuh812d0d12021-11-04 20:16:48 -07001// Copyright (c) FIRST and other WPILib contributors.
2// Open Source Software; you can modify and/or share it under the terms of
3// the WPILib BSD license file in the root directory of this project.
Brian Silverman8fce7482020-01-05 13:18:21 -08004
5#include "frc/Relay.h" // NOLINT(build/include_order)
6
James Kuszmaulb13e13f2023-11-22 20:44:04 -08007#include <gtest/gtest.h>
Austin Schuh812d0d12021-11-04 20:16:48 -07008#include <units/time.h>
9
Brian Silverman8fce7482020-01-05 13:18:21 -080010#include "TestBench.h"
11#include "frc/DigitalInput.h"
12#include "frc/Timer.h"
Brian Silverman8fce7482020-01-05 13:18:21 -080013
Austin Schuh812d0d12021-11-04 20:16:48 -070014static constexpr auto kDelayTime = 10_ms;
Brian Silverman8fce7482020-01-05 13:18:21 -080015
Austin Schuh812d0d12021-11-04 20:16:48 -070016TEST(RelayTest, BothDirections) {
17 frc::Relay relay{TestBench::kRelayChannel};
18 frc::DigitalInput forward{TestBench::kFakeRelayForward};
19 frc::DigitalInput reverse{TestBench::kFakeRelayReverse};
Brian Silverman8fce7482020-01-05 13:18:21 -080020
Austin Schuh812d0d12021-11-04 20:16:48 -070021 // Set the relay to forward
22 relay.Set(frc::Relay::kForward);
23 frc::Wait(kDelayTime);
24 EXPECT_TRUE(forward.Get()) << "Relay did not set forward";
25 EXPECT_FALSE(reverse.Get()) << "Relay did not set forward";
26 EXPECT_EQ(relay.Get(), frc::Relay::kForward);
Brian Silverman8fce7482020-01-05 13:18:21 -080027
Austin Schuh812d0d12021-11-04 20:16:48 -070028 // Set the relay to reverse
29 relay.Set(frc::Relay::kReverse);
30 frc::Wait(kDelayTime);
31 EXPECT_TRUE(reverse.Get()) << "Relay did not set reverse";
32 EXPECT_FALSE(forward.Get()) << "Relay did not set reverse";
33 EXPECT_EQ(relay.Get(), frc::Relay::kReverse);
Brian Silverman8fce7482020-01-05 13:18:21 -080034
Austin Schuh812d0d12021-11-04 20:16:48 -070035 // Set the relay to off
36 relay.Set(frc::Relay::kOff);
37 frc::Wait(kDelayTime);
38 EXPECT_FALSE(forward.Get()) << "Relay did not set off";
39 EXPECT_FALSE(reverse.Get()) << "Relay did not set off";
40 EXPECT_EQ(relay.Get(), frc::Relay::kOff);
Brian Silverman8fce7482020-01-05 13:18:21 -080041
Austin Schuh812d0d12021-11-04 20:16:48 -070042 // Set the relay to on
43 relay.Set(frc::Relay::kOn);
44 frc::Wait(kDelayTime);
45 EXPECT_TRUE(forward.Get()) << "Relay did not set on";
46 EXPECT_TRUE(reverse.Get()) << "Relay did not set on";
47 EXPECT_EQ(relay.Get(), frc::Relay::kOn);
48}
Brian Silverman8fce7482020-01-05 13:18:21 -080049
Austin Schuh812d0d12021-11-04 20:16:48 -070050TEST(RelayTest, ForwardOnly) {
51 frc::Relay relay{TestBench::kRelayChannel, frc::Relay::kForwardOnly};
52 frc::DigitalInput forward{TestBench::kFakeRelayForward};
53 frc::DigitalInput reverse{TestBench::kFakeRelayReverse};
Brian Silverman8fce7482020-01-05 13:18:21 -080054
Austin Schuh812d0d12021-11-04 20:16:48 -070055 relay.Set(frc::Relay::kOn);
56 frc::Wait(kDelayTime);
57 EXPECT_TRUE(forward.Get()) << "Relay did not set forward";
58 EXPECT_FALSE(reverse.Get()) << "Relay did not set forward";
59 EXPECT_EQ(relay.Get(), frc::Relay::kOn);
60}
Brian Silverman8fce7482020-01-05 13:18:21 -080061
Austin Schuh812d0d12021-11-04 20:16:48 -070062TEST(RelayTest, ReverseOnly) {
63 frc::Relay relay{TestBench::kRelayChannel, frc::Relay::kReverseOnly};
64 frc::DigitalInput forward{TestBench::kFakeRelayForward};
65 frc::DigitalInput reverse{TestBench::kFakeRelayReverse};
Brian Silverman8fce7482020-01-05 13:18:21 -080066
Austin Schuh812d0d12021-11-04 20:16:48 -070067 relay.Set(frc::Relay::kOn);
68 frc::Wait(kDelayTime);
69 EXPECT_FALSE(forward.Get()) << "Relay did not set reverse";
70 EXPECT_TRUE(reverse.Get()) << "Relay did not set reverse";
71 EXPECT_EQ(relay.Get(), frc::Relay::kOn);
Brian Silverman8fce7482020-01-05 13:18:21 -080072}