#include #include #include #include #include #include #include #include #include #include "unaligned.h" #define SIZE 16 static const char memory[8] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef }; static const uint64_t intval64 = 0x0123456789abcdef; static const uint32_t intval32 = 0x01234567; static const uint16_t intval16 = 0x0123; #include "globals.c" static int setup(void **state) { return posix_memalign(state, 16, 2 * SIZE); } static int teardown(void **state) { free(*state); return 0; } #define make_test(bits, offset) \ static void test_ ## bits ## _ ## offset(void **state) \ { \ int len = bits/8; \ uint8_t *c = *state; \ uint8_t *p = *state + SIZE; \ uint64_t u; \ \ assert_in_range(len, 1, SIZE); \ assert_in_range(offset + len, 1, SIZE); \ memset(c, 0, 2 * SIZE); \ memcpy(c + offset, memory, len); \ \ u = get_unaligned_be##bits(c + offset); \ assert_int_equal(u, intval##bits); \ put_unaligned_be##bits(u, p + offset); \ assert_memory_equal(c + offset, p + offset, len); \ } make_test(16, 0); make_test(16, 1); make_test(32, 0); make_test(32, 1); make_test(32, 2); make_test(32, 3); make_test(64, 0); make_test(64, 1); make_test(64, 2); make_test(64, 3); make_test(64, 4); make_test(64, 5); make_test(64, 6); make_test(64, 7); int test_unaligned(void) { const struct CMUnitTest tests[] = { cmocka_unit_test(test_16_0), cmocka_unit_test(test_16_1), cmocka_unit_test(test_32_0), cmocka_unit_test(test_32_1), cmocka_unit_test(test_32_2), cmocka_unit_test(test_32_3), cmocka_unit_test(test_64_0), cmocka_unit_test(test_64_1), cmocka_unit_test(test_64_2), cmocka_unit_test(test_64_3), cmocka_unit_test(test_64_4), cmocka_unit_test(test_64_5), cmocka_unit_test(test_64_6), cmocka_unit_test(test_64_7), }; return cmocka_run_group_tests(tests, setup, teardown); } int main(void) { int ret = 0; ret += test_unaligned(); return ret; }