mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-23 01:21:42 +00:00
Merge branch 'main' into 2027
This commit is contained in:
@@ -65,6 +65,61 @@ TEST(MathUtilTest, ApplyDeadbandLargeMaxMagnitude) {
|
||||
frc::ApplyDeadband(100.0, 20.0, std::numeric_limits<double>::infinity()));
|
||||
}
|
||||
|
||||
TEST(MathUtilTest, CopySignPow) {
|
||||
EXPECT_DOUBLE_EQ(0.5, frc::CopySignPow(0.5, 1.0));
|
||||
EXPECT_DOUBLE_EQ(-0.5, frc::CopySignPow(-0.5, 1.0));
|
||||
|
||||
EXPECT_DOUBLE_EQ(0.5 * 0.5, frc::CopySignPow(0.5, 2.0));
|
||||
EXPECT_DOUBLE_EQ(-(0.5 * 0.5), frc::CopySignPow(-0.5, 2.0));
|
||||
|
||||
EXPECT_DOUBLE_EQ(std::sqrt(0.5), frc::CopySignPow(0.5, 0.5));
|
||||
EXPECT_DOUBLE_EQ(-std::sqrt(0.5), frc::CopySignPow(-0.5, 0.5));
|
||||
|
||||
EXPECT_DOUBLE_EQ(0.0, frc::CopySignPow(0.0, 2.0));
|
||||
EXPECT_DOUBLE_EQ(1.0, frc::CopySignPow(1.0, 2.0));
|
||||
EXPECT_DOUBLE_EQ(-1.0, frc::CopySignPow(-1.0, 2.0));
|
||||
|
||||
EXPECT_DOUBLE_EQ(std::pow(0.8, 0.3), frc::CopySignPow(0.8, 0.3));
|
||||
EXPECT_DOUBLE_EQ(-std::pow(0.8, 0.3), frc::CopySignPow(-0.8, 0.3));
|
||||
}
|
||||
|
||||
TEST(MathUtilTest, CopySignPowWithMaxMagnitude) {
|
||||
EXPECT_DOUBLE_EQ(5.0, frc::CopySignPow(5.0, 1.0, 10.0));
|
||||
EXPECT_DOUBLE_EQ(-5.0, frc::CopySignPow(-5.0, 1.0, 10.0));
|
||||
|
||||
EXPECT_DOUBLE_EQ(0.5 * 0.5 * 10, frc::CopySignPow(5.0, 2.0, 10.0));
|
||||
EXPECT_DOUBLE_EQ(-0.5 * 0.5 * 10, frc::CopySignPow(-5.0, 2.0, 10.0));
|
||||
|
||||
EXPECT_DOUBLE_EQ(std::sqrt(0.5) * 10, frc::CopySignPow(5.0, 0.5, 10.0));
|
||||
EXPECT_DOUBLE_EQ(-std::sqrt(0.5) * 10, frc::CopySignPow(-5.0, 0.5, 10.0));
|
||||
|
||||
EXPECT_DOUBLE_EQ(0.0, frc::CopySignPow(0.0, 2.0, 5.0));
|
||||
EXPECT_DOUBLE_EQ(5.0, frc::CopySignPow(5.0, 2.0, 5.0));
|
||||
EXPECT_DOUBLE_EQ(-5.0, frc::CopySignPow(-5.0, 2.0, 5.0));
|
||||
|
||||
EXPECT_DOUBLE_EQ(std::pow(0.8, 0.3) * 100,
|
||||
frc::CopySignPow(80.0, 0.3, 100.0));
|
||||
EXPECT_DOUBLE_EQ(-std::pow(0.8, 0.3) * 100,
|
||||
frc::CopySignPow(-80.0, 0.3, 100.0));
|
||||
}
|
||||
|
||||
TEST(MathUtilTest, CopySignPowWithUnits) {
|
||||
EXPECT_DOUBLE_EQ(
|
||||
0, frc::CopySignPow<units::meters_per_second_t>(0_mps, 2.0).value());
|
||||
EXPECT_DOUBLE_EQ(
|
||||
1, frc::CopySignPow<units::meters_per_second_t>(1_mps, 2.0).value());
|
||||
EXPECT_DOUBLE_EQ(
|
||||
-1, frc::CopySignPow<units::meters_per_second_t>(-1_mps, 2.0).value());
|
||||
|
||||
EXPECT_DOUBLE_EQ(
|
||||
0.5 * 0.5 * 10,
|
||||
frc::CopySignPow<units::meters_per_second_t>(5_mps, 2.0, 10_mps).value());
|
||||
EXPECT_DOUBLE_EQ(
|
||||
-0.5 * 0.5 * 10,
|
||||
frc::CopySignPow<units::meters_per_second_t>(-5_mps, 2.0, 10_mps)
|
||||
.value());
|
||||
}
|
||||
|
||||
TEST(MathUtilTest, InputModulus) {
|
||||
// These tests check error wrapping. That is, the result of wrapping the
|
||||
// result of an angle reference minus the measurement.
|
||||
|
||||
@@ -241,3 +241,48 @@ TEST(TrapezoidProfileTest, InitalizationOfCurrentState) {
|
||||
EXPECT_NEAR_UNITS(profile.TimeLeftUntil(0_m), 0_s, 1e-10_s);
|
||||
EXPECT_NEAR_UNITS(profile.TotalTime(), 0_s, 1e-10_s);
|
||||
}
|
||||
|
||||
TEST(TrapezoidProfileTest, InitialVelocityConstraints) {
|
||||
frc::TrapezoidProfile<units::meter>::Constraints constraints{0.75_mps,
|
||||
0.75_mps_sq};
|
||||
frc::TrapezoidProfile<units::meter>::State goal{10_m, 0_mps};
|
||||
frc::TrapezoidProfile<units::meter>::State state{0_m, -10_mps};
|
||||
|
||||
frc::TrapezoidProfile<units::meter> profile{constraints};
|
||||
|
||||
for (int i = 0; i < 200; ++i) {
|
||||
state = profile.Calculate(kDt, state, goal);
|
||||
EXPECT_LE(units::math::abs(state.velocity),
|
||||
units::math::abs(constraints.maxVelocity));
|
||||
}
|
||||
}
|
||||
|
||||
TEST(TrapezoidProfileTest, GoalVelocityConstraints) {
|
||||
frc::TrapezoidProfile<units::meter>::Constraints constraints{0.75_mps,
|
||||
0.75_mps_sq};
|
||||
frc::TrapezoidProfile<units::meter>::State goal{10_m, 5_mps};
|
||||
frc::TrapezoidProfile<units::meter>::State state{0_m, 0.75_mps};
|
||||
|
||||
frc::TrapezoidProfile<units::meter> profile{constraints};
|
||||
|
||||
for (int i = 0; i < 200; ++i) {
|
||||
state = profile.Calculate(kDt, state, goal);
|
||||
EXPECT_LE(units::math::abs(state.velocity),
|
||||
units::math::abs(constraints.maxVelocity));
|
||||
}
|
||||
}
|
||||
|
||||
TEST(TrapezoidProfileTest, NegativeGoalVelocityConstraints) {
|
||||
frc::TrapezoidProfile<units::meter>::Constraints constraints{0.75_mps,
|
||||
0.75_mps_sq};
|
||||
frc::TrapezoidProfile<units::meter>::State goal{10_m, -5_mps};
|
||||
frc::TrapezoidProfile<units::meter>::State state{0_m, 0.75_mps};
|
||||
|
||||
frc::TrapezoidProfile<units::meter> profile{constraints};
|
||||
|
||||
for (int i = 0; i < 200; ++i) {
|
||||
state = profile.Calculate(kDt, state, goal);
|
||||
EXPECT_LE(units::math::abs(state.velocity),
|
||||
units::math::abs(constraints.maxVelocity));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user