mirror of
https://github.com/espressif/openthread.git
synced 2026-08-15 15:17:46 +00:00
[core] add new generic Min(), Max() and Clamp() functions (#8017)
This commit adds generic helper functions: - `Min()` to get the minimum of two values, - `Max()` to get the maximum of two values, and - `Clamp()` to clamp a value to a given closed range from a minimum up to a maximum value. It also adds functions - `ClampToUint8()` and `ClampToUint16()` to clamp a `uint` value to a smaller bit-size (`uint8_t` or `uint16_t`) range.
This commit is contained in:
@@ -32,6 +32,7 @@
|
||||
|
||||
#include "test_util.h"
|
||||
#include "common/code_utils.hpp"
|
||||
#include "common/min_max.hpp"
|
||||
#include "common/numeric_limits.hpp"
|
||||
#include "common/serial_number.hpp"
|
||||
|
||||
@@ -65,6 +66,52 @@ template <typename UintType> void TestSerialNumber(const char *aName)
|
||||
printf("TestSerialNumber<%s>() passed\n", aName);
|
||||
}
|
||||
|
||||
void TestMinMaxClamp(void)
|
||||
{
|
||||
uint16_t u16;
|
||||
uint32_t u32;
|
||||
|
||||
VerifyOrQuit(Min<uint8_t>(1, 2) == 1);
|
||||
VerifyOrQuit(Min<uint8_t>(2, 1) == 1);
|
||||
VerifyOrQuit(Min<uint8_t>(1, 1) == 1);
|
||||
|
||||
VerifyOrQuit(Max<uint8_t>(1, 2) == 2);
|
||||
VerifyOrQuit(Max<uint8_t>(2, 1) == 2);
|
||||
VerifyOrQuit(Max<uint8_t>(1, 1) == 1);
|
||||
|
||||
VerifyOrQuit(Clamp<uint8_t>(1, 5, 10) == 5);
|
||||
VerifyOrQuit(Clamp<uint8_t>(5, 5, 10) == 5);
|
||||
VerifyOrQuit(Clamp<uint8_t>(7, 5, 10) == 7);
|
||||
VerifyOrQuit(Clamp<uint8_t>(10, 5, 10) == 10);
|
||||
VerifyOrQuit(Clamp<uint8_t>(12, 5, 10) == 10);
|
||||
|
||||
VerifyOrQuit(Clamp<uint8_t>(10, 10, 10) == 10);
|
||||
VerifyOrQuit(Clamp<uint8_t>(9, 10, 10) == 10);
|
||||
VerifyOrQuit(Clamp<uint8_t>(11, 10, 10) == 10);
|
||||
|
||||
u16 = 100;
|
||||
VerifyOrQuit(ClampToUint8(u16) == 100);
|
||||
u16 = 255;
|
||||
VerifyOrQuit(ClampToUint8(u16) == 255);
|
||||
u16 = 256;
|
||||
VerifyOrQuit(ClampToUint8(u16) == 255);
|
||||
u16 = 400;
|
||||
VerifyOrQuit(ClampToUint8(u16) == 255);
|
||||
|
||||
u32 = 100;
|
||||
VerifyOrQuit(ClampToUint16(u32) == 100);
|
||||
u32 = 256;
|
||||
VerifyOrQuit(ClampToUint16(u32) == 256);
|
||||
u32 = 0xffff;
|
||||
VerifyOrQuit(ClampToUint16(u32) == 0xffff);
|
||||
u32 = 0x10000;
|
||||
VerifyOrQuit(ClampToUint16(u32) == 0xffff);
|
||||
u32 = 0xfff0000;
|
||||
VerifyOrQuit(ClampToUint16(u32) == 0xffff);
|
||||
|
||||
printf("TestMinMaxClamp() passed\n");
|
||||
}
|
||||
|
||||
} // namespace ot
|
||||
|
||||
int main(void)
|
||||
@@ -73,6 +120,7 @@ int main(void)
|
||||
ot::TestSerialNumber<uint16_t>("uint16_t");
|
||||
ot::TestSerialNumber<uint32_t>("uint32_t");
|
||||
ot::TestSerialNumber<uint64_t>("uint64_t");
|
||||
ot::TestMinMaxClamp();
|
||||
printf("\nAll tests passed.\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user