1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00

tests/unittests: Add tests for endian.h

This commit is contained in:
Marian Buschsieweke 2024-01-30 09:51:48 +01:00
parent 68018fe182
commit 6615f47b90
No known key found for this signature in database
GPG Key ID: 77AA882EC78084E6

View File

@ -8,6 +8,7 @@
#include <stdint.h>
#include <string.h>
#include <endian.h>
#include "string_utils.h"
#include "tests-libc.h"
@ -39,11 +40,64 @@ static void test_libc_memchk(void)
TEST_ASSERT(memchk(buffer, 0xff, sizeof(buffer)) == &buffer[5]);
}
/**
* @name Unit test ensuring `<endian.h>` is provided and correct across
* all platforms
* @{
*/
union u16 {
uint8_t as_bytes[2];
uint16_t as_number;
};
union u32 {
uint8_t as_bytes[4];
uint32_t as_number;
};
union u64 {
uint8_t as_bytes[8];
uint64_t as_number;
};
static void test_libc_endian(void)
{
/* format the numbers 0x0102, 0x01020304 and 0x0102030405060708
* in little/big endian format by hand: */
const uint16_t u16_host = 0x0102;
const union u16 u16_be = { .as_bytes = { 0x01, 0x02 } };
const union u16 u16_le = { .as_bytes = { 0x02, 0x01 } };
const uint32_t u32_host = 0x01020304;
const union u32 u32_be = { .as_bytes = { 0x01, 0x02, 0x03, 0x04 } };
const union u32 u32_le = { .as_bytes = { 0x04, 0x03, 0x02, 0x01 } };
const uint64_t u64_host = 0x0102030405060708;
const union u64 u64_be = { .as_bytes = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 } };
const union u64 u64_le = { .as_bytes = { 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01 } };
/* check from host to big/little endian */
TEST_ASSERT_EQUAL_INT(htobe16(u16_host), u16_be.as_number);
TEST_ASSERT_EQUAL_INT(htole16(u16_host), u16_le.as_number);
TEST_ASSERT_EQUAL_INT(htobe32(u32_host), u32_be.as_number);
TEST_ASSERT_EQUAL_INT(htole32(u32_host), u32_le.as_number);
TEST_ASSERT_EQUAL_INT(htobe64(u64_host), u64_be.as_number);
TEST_ASSERT_EQUAL_INT(htole64(u64_host), u64_le.as_number);
/* check little/big endian to host */
TEST_ASSERT_EQUAL_INT(be16toh(u16_be.as_number), u16_host);
TEST_ASSERT_EQUAL_INT(le16toh(u16_le.as_number), u16_host);
TEST_ASSERT_EQUAL_INT(be32toh(u32_be.as_number), u32_host);
TEST_ASSERT_EQUAL_INT(le32toh(u32_le.as_number), u32_host);
TEST_ASSERT_EQUAL_INT(be64toh(u64_be.as_number), u64_host);
TEST_ASSERT_EQUAL_INT(le64toh(u64_le.as_number), u64_host);
}
/** @} */
Test *tests_libc_tests(void)
{
EMB_UNIT_TESTFIXTURES(fixtures) {
new_TestFixture(test_libc_strscpy),
new_TestFixture(test_libc_memchk),
new_TestFixture(test_libc_endian),
};
EMB_UNIT_TESTCALLER(libc_tests, NULL, NULL, fixtures);