1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-19 06:15:16 +03:00

Merge pull request #2822 from manors/tidy-scaleRange

Tidy scaleRange code
This commit is contained in:
Michael Keller 2017-04-06 08:25:42 +12:00 committed by GitHub
commit e555f0ddab
2 changed files with 40 additions and 1 deletions

View file

@ -155,7 +155,7 @@ float degreesToRadians(int16_t degrees)
int scaleRange(int x, int srcMin, int srcMax, int destMin, int destMax) { int scaleRange(int x, int srcMin, int srcMax, int destMin, int destMax) {
long int a = ((long int) destMax - (long int) destMin) * ((long int) x - (long int) srcMin); long int a = ((long int) destMax - (long int) destMin) * ((long int) x - (long int) srcMin);
long int b = (long int) srcMax - (long int) srcMin; long int b = (long int) srcMax - (long int) srcMin;
return ((a / b) - (destMax - destMin)) + destMax; return (a / b) + destMin;
} }
// Normalize a vector // Normalize a vector

View file

@ -31,6 +31,45 @@ extern "C" {
#include "unittest_macros.h" #include "unittest_macros.h"
#include "gtest/gtest.h" #include "gtest/gtest.h"
TEST(MathsUnittest, TestScaleRange)
{
// Within bounds
EXPECT_EQ(scaleRange(0, 0, 10, 0, 100), 0);
EXPECT_EQ(scaleRange(10, 0, 10, 0, 100), 100);
EXPECT_EQ(scaleRange(0, 0, 100, 0, 10), 0);
EXPECT_EQ(scaleRange(100, 0, 100, 0, 10), 10);
// Scale up
EXPECT_EQ(scaleRange(1, 0, 10, 0, 100), 10);
EXPECT_EQ(scaleRange(2, 0, 10, 0, 100), 20);
EXPECT_EQ(scaleRange(5, 0, 10, 0, 100), 50);
// Scale down
EXPECT_EQ(scaleRange(10, 0, 100, 0, 10), 1);
EXPECT_EQ(scaleRange(20, 0, 100, 0, 10), 2);
EXPECT_EQ(scaleRange(50, 0, 100, 0, 10), 5);
}
TEST(MathsUnittest, TestScaleRangeNegatives)
{
// Within bounds
EXPECT_EQ(scaleRange(0, -10, 0, -100, 0), 0);
EXPECT_EQ(scaleRange(-10, -10, 0, -100, 0), -100);
EXPECT_EQ(scaleRange(0, -100, 0, -10, 0), 0);
EXPECT_EQ(scaleRange(-100, -100, 0, -10, 0), -10);
// Scale up
EXPECT_EQ(scaleRange(-1, -10, 0, -100, 0), -10);
EXPECT_EQ(scaleRange(-2, -10, 0, -100, 0), -20);
EXPECT_EQ(scaleRange(-5, -10, 0, -100, 0), -50);
// Scale down
EXPECT_EQ(scaleRange(-10, -100, 0, -10, 0), -1);
EXPECT_EQ(scaleRange(-20, -100, 0, -10, 0), -2);
EXPECT_EQ(scaleRange(-50, -100, 0, -10, 0), -5);
}
TEST(MathsUnittest, TestConstrain) TEST(MathsUnittest, TestConstrain)
{ {
// Within bounds // Within bounds