blob: e9781b982fb603d2e4159df74ab535ee2cd478d6 [file] [log] [blame]
Nathan Leong217cd762022-10-22 16:07:30 -07001#include "frc971/wpilib/wpilib_utils.h"
2
3#include "aos/testing/flatbuffer_eq.h"
4#include "aos/testing/test_logging.h"
5#include "frc971/constants.h"
6
Stephan Pleinesf63bde82024-01-13 15:59:33 -08007namespace frc971::wpilib::testing {
Nathan Leong217cd762022-10-22 16:07:30 -07008namespace {
9
10double climber_pot_translate_inverse_test(double position) {
11 return position * 10.0;
12}
13
14double intake_pot_translate_inverse_test(double position) {
15 return position * 2.0;
16}
17
18TEST(WpilibUtilsTest, ZeroOffsetZeroBuffer) {
19 {
20 // Physical pot range: 0.0 to 0.5
21 constexpr double kPotentiometerOffset = 0.00;
22 constexpr double kLimitBuffer = 0.00;
23
24 ::frc971::constants::Range subsystem_range;
25 subsystem_range = ::frc971::constants::Range{
26 .lower_hard = 0.01, .upper_hard = 0.49, .lower = 0.1, .upper = 0.4};
27 EXPECT_TRUE(SafePotVoltageRange(subsystem_range, kPotentiometerOffset,
28 climber_pot_translate_inverse_test, false,
29 kLimitBuffer));
30 }
31 {
32 // Physical pot range: 0.0 to 0.5
33 constexpr double kPotentiometerOffset = 0.00;
34 constexpr double kLimitBuffer = 0.00;
35
36 ::frc971::constants::Range subsystem_range;
37 subsystem_range = ::frc971::constants::Range{
38 .lower_hard = 0.0, .upper_hard = 0.5, .lower = 0.1, .upper = 0.4};
39 EXPECT_FALSE(SafePotVoltageRange(subsystem_range, kPotentiometerOffset,
40 climber_pot_translate_inverse_test, false,
41 kLimitBuffer));
42 }
43}
44
45TEST(WpilibUtilsTest, LimitBuffer) {
46 {
47 // Physical pot range: 0.0 to 0.5
48 constexpr double kPotentiometerOffset = 0.0;
49 constexpr double kLimitBuffer = 0.00;
50
51 ::frc971::constants::Range subsystem_range;
52 subsystem_range = ::frc971::constants::Range{
53 .lower_hard = 0.005, .upper_hard = 0.495, .lower = 0.1, .upper = 0.4};
54 EXPECT_TRUE(SafePotVoltageRange(subsystem_range, kPotentiometerOffset,
55 climber_pot_translate_inverse_test, false,
56 kLimitBuffer));
57 }
58 {
59 // Physical pot range: 0.0 to 0.5, with limit buffer: 0.005 to 0.495
60 constexpr double kPotentiometerOffset = 0.0;
61 constexpr double kLimitBuffer = 0.05;
62
63 ::frc971::constants::Range subsystem_range;
64 subsystem_range = ::frc971::constants::Range{
65 .lower_hard = 0.005, .upper_hard = 0.495, .lower = 0.1, .upper = 0.4};
66 EXPECT_FALSE(SafePotVoltageRange(subsystem_range, kPotentiometerOffset,
67 climber_pot_translate_inverse_test, false,
68 kLimitBuffer));
69 }
70}
71
72TEST(WpilibUtilsTest, PotOffset) {
73 {
74 // Physical pot range: 0.0 to 0.5
75 constexpr double kPotentiometerOffset = 0.0;
76 constexpr double kLimitBuffer = 0.00;
77
78 ::frc971::constants::Range subsystem_range;
79 subsystem_range = ::frc971::constants::Range{
80 .lower_hard = 0.01, .upper_hard = 0.49, .lower = 0.1, .upper = 0.4};
81 EXPECT_TRUE(SafePotVoltageRange(subsystem_range, kPotentiometerOffset,
82 climber_pot_translate_inverse_test, false,
83 kLimitBuffer));
84 }
85 {
86 // Physical pot range: 0.1 to 0.6
87 constexpr double kPotentiometerOffset = 0.1;
88 constexpr double kLimitBuffer = 0.00;
89
90 ::frc971::constants::Range subsystem_range;
91 subsystem_range = ::frc971::constants::Range{
92 .lower_hard = 0.01, .upper_hard = 0.49, .lower = 0.1, .upper = 0.4};
93 EXPECT_FALSE(SafePotVoltageRange(subsystem_range, kPotentiometerOffset,
94 climber_pot_translate_inverse_test, false,
95 kLimitBuffer));
96 }
97}
98
99TEST(WpilibUtilsTest, TranslateFunction) {
100 {
101 // Physical pot range: 0.0 to 2.5
102 constexpr double kPotentiometerOffset = 0.0;
103 constexpr double kLimitBuffer = 0.00;
104
105 ::frc971::constants::Range subsystem_range;
106 subsystem_range = ::frc971::constants::Range{
107 .lower_hard = 0.01, .upper_hard = 2.49, .lower = 0.1, .upper = 2.4};
108 EXPECT_TRUE(SafePotVoltageRange(subsystem_range, kPotentiometerOffset,
109 intake_pot_translate_inverse_test, false,
110 kLimitBuffer));
111 }
112 {
113 // Physical pot range: 0.0 to 0.5
114 constexpr double kPotentiometerOffset = 0.0;
115 constexpr double kLimitBuffer = 0.00;
116
117 ::frc971::constants::Range subsystem_range;
118 subsystem_range = ::frc971::constants::Range{
119 .lower_hard = 0.01, .upper_hard = 2.49, .lower = 0.1, .upper = 2.4};
120 EXPECT_FALSE(SafePotVoltageRange(subsystem_range, kPotentiometerOffset,
121 climber_pot_translate_inverse_test, false,
122 kLimitBuffer));
123 }
124}
125
126TEST(WpilibUtilsTest, ReverseRange) {
127 {
128 // Physical pot range: 0.0 to 0.5, reversed: -0.5 to 0.0
129 constexpr double kPotentiometerOffset = 0.0;
130 constexpr double kLimitBuffer = 0.00;
131
132 ::frc971::constants::Range subsystem_range;
133 subsystem_range = ::frc971::constants::Range{
134 .lower_hard = -0.49, .upper_hard = -0.01, .lower = -0.4, .upper = -0.1};
135 EXPECT_TRUE(SafePotVoltageRange(subsystem_range, kPotentiometerOffset,
136 climber_pot_translate_inverse_test, true,
137 kLimitBuffer));
138 }
139 {
140 // Physical pot range: 0.0 to 0.5
141 constexpr double kPotentiometerOffset = 0.0;
142 constexpr double kLimitBuffer = 0.00;
143
144 ::frc971::constants::Range subsystem_range;
145 subsystem_range = ::frc971::constants::Range{
146 .lower_hard = -0.49, .upper_hard = -0.01, .lower = -0.4, .upper = -0.1};
147 EXPECT_FALSE(SafePotVoltageRange(subsystem_range, kPotentiometerOffset,
148 climber_pot_translate_inverse_test, false,
149 kLimitBuffer));
150 }
151}
152
153} // namespace
Stephan Pleinesf63bde82024-01-13 15:59:33 -0800154} // namespace frc971::wpilib::testing