5 #include "sw/device/lib/base/crc32.h"
7 #include "sw/device/lib/testing/test_framework/check.h"
9 #include "sw/device/lib/testing/test_framework/ottf_test_config.h"
11 #define LOG_TEST_PARAMS(x) \
12 LOG_INFO("[%s] Test params: input = 0x%!y, expected_crc32 = 0x%x", \
13 __FUNCTION__, x.input_len, x.input, x.expected_crc32);
18 uint32_t expected_crc32;
21 static const char kTestString1[] =
"123456789";
22 static const char kTestString2[] =
23 "The quick brown fox jumps over the lazy dog";
24 static const char kTestString3[] =
"\xfe\xca\xfe\xca\x02\xb0\xad\x1b";
28 sizeof(kTestString1) - 1,
33 sizeof(kTestString2) - 1,
38 sizeof(kTestString3) - 1,
43 for (
size_t i = 0; i <
ARRAYSIZE(kTestCases); ++i) {
44 LOG_TEST_PARAMS(kTestCases[i]);
45 TRY_CHECK(crc32(kTestCases[i].input, kTestCases[i].input_len) ==
46 kTestCases[i].expected_crc32);
51 static status_t crc32_add_test(
void) {
52 for (
size_t i = 0; i <
ARRAYSIZE(kTestCases); ++i) {
53 LOG_TEST_PARAMS(kTestCases[i]);
56 crc32_add(&ctx, kTestCases[i].input, kTestCases[i].input_len);
57 TRY_CHECK(crc32_finish(&ctx) == kTestCases[i].expected_crc32);
62 static status_t crc32_misaligned_test(
void) {
63 uint32_t kExpCrc = 0x414fa339;
64 alignas(uint32_t)
char input[] =
65 ">The quick brown fox jumps over the lazy dog";
66 TRY_CHECK(crc32(&input[1],
sizeof(input) - 2) == kExpCrc);
70 crc32_add(&ctx, &input[1],
sizeof(input) - 2);
71 TRY_CHECK(crc32_finish(&ctx) == kExpCrc);
75 static status_t crc32_add8_test(
void) {
76 for (
size_t i = 0; i <
ARRAYSIZE(kTestCases); ++i) {
77 LOG_TEST_PARAMS(kTestCases[i]);
80 for (
size_t j = 0; j < kTestCases[i].input_len; ++j) {
81 crc32_add8(&ctx, kTestCases[i].input[j]);
83 TRY_CHECK(crc32_finish(&ctx) == kTestCases[i].expected_crc32);
88 static status_t crc32_add32_test(
void) {
91 const uint32_t kExpCrc = 0x9508ac14;
93 crc32_add32(&ctx, 0xcafecafe);
95 crc32_add32(&ctx, 0x1badb002);
97 TRY_CHECK(crc32_finish(&ctx) == kExpCrc);
101 OTTF_DEFINE_TEST_CONFIG();
110 return status_ok(result);