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