[wpilib] Allow LED pattern gradients to be discontinuous (#7174)

This commit is contained in:
Sam Carlberg
2024-10-11 01:05:33 -04:00
committed by GitHub
parent 0cfff31439
commit 2085ab3d47
5 changed files with 147 additions and 35 deletions

View File

@@ -48,7 +48,8 @@ TEST(LEDPatternTest, SolidColor) {
TEST(LEDPatternTest, EmptyGradientSetsToBlack) {
std::array<Color, 0> colors;
LEDPattern pattern = LEDPattern::Gradient(colors);
LEDPattern pattern =
LEDPattern::Gradient(LEDPattern::GradientType::kContinuous, colors);
std::array<AddressableLED::LEDData, 5> buffer;
pattern.ApplyTo(buffer);
for (int i = 0; i < 5; i++) {
@@ -58,7 +59,8 @@ TEST(LEDPatternTest, EmptyGradientSetsToBlack) {
TEST(LEDPatternTest, SingleColorGradientSetsSolid) {
std::array<Color, 1> colors{Color::kYellow};
LEDPattern pattern = LEDPattern::Gradient(colors);
LEDPattern pattern =
LEDPattern::Gradient(LEDPattern::GradientType::kContinuous, colors);
std::array<AddressableLED::LEDData, 5> buffer;
pattern.ApplyTo(buffer);
for (int i = 0; i < 5; i++) {
@@ -68,7 +70,8 @@ TEST(LEDPatternTest, SingleColorGradientSetsSolid) {
TEST(LEDPatternTest, Gradient2Colors) {
std::array<Color, 2> colors{Color::kYellow, Color::kPurple};
LEDPattern pattern = LEDPattern::Gradient(colors);
LEDPattern pattern =
LEDPattern::Gradient(LEDPattern::GradientType::kContinuous, colors);
std::array<AddressableLED::LEDData, 99> buffer;
pattern.ApplyTo(buffer);
AssertIndexColor(buffer, 0, Color::kYellow);
@@ -80,9 +83,21 @@ TEST(LEDPatternTest, Gradient2Colors) {
AssertIndexColor(buffer, 98, Color::kYellow);
}
TEST(LEDPatternTest, DiscontinuousGradient2Colors) {
std::array<Color, 2> colors{Color::kYellow, Color::kPurple};
LEDPattern pattern =
LEDPattern::Gradient(LEDPattern::GradientType::kDiscontinuous, colors);
std::array<AddressableLED::LEDData, 99> buffer;
pattern.ApplyTo(buffer);
AssertIndexColor(buffer, 0, Color::kYellow);
AssertIndexColor(buffer, 49, LerpColors(Color::kYellow, Color::kPurple, 0.5));
AssertIndexColor(buffer, 98, Color::kPurple);
}
TEST(LEDPatternTest, Gradient3Colors) {
std::array<Color, 3> colors{Color::kYellow, Color::kPurple, Color::kWhite};
LEDPattern pattern = LEDPattern::Gradient(colors);
LEDPattern pattern =
LEDPattern::Gradient(LEDPattern::GradientType::kContinuous, colors);
std::array<AddressableLED::LEDData, 99> buffer;
pattern.ApplyTo(buffer);
@@ -99,6 +114,20 @@ TEST(LEDPatternTest, Gradient3Colors) {
LerpColors(Color::kWhite, Color::kYellow, 32 / 33.0));
}
TEST(LEDPatternTest, DiscontinuousGradient3Colors) {
std::array<Color, 3> colors{Color::kYellow, Color::kPurple, Color::kWhite};
LEDPattern pattern =
LEDPattern::Gradient(LEDPattern::GradientType::kDiscontinuous, colors);
std::array<AddressableLED::LEDData, 101> buffer;
pattern.ApplyTo(buffer);
AssertIndexColor(buffer, 0, Color::kYellow);
AssertIndexColor(buffer, 25, LerpColors(Color::kYellow, Color::kPurple, 0.5));
AssertIndexColor(buffer, 50, Color::kPurple);
AssertIndexColor(buffer, 75, LerpColors(Color::kPurple, Color::kWhite, 0.5));
AssertIndexColor(buffer, 100, Color::kWhite);
}
TEST(LEDPatternTest, EmptyStepsSetsToBlack) {
std::array<std::pair<double, Color>, 0> steps;
LEDPattern pattern = LEDPattern::Steps(steps);