Skip to content

Commit

Permalink
test for MISRA
Browse files Browse the repository at this point in the history
  • Loading branch information
Igor-Misic committed Sep 25, 2023
1 parent f762fdc commit c81165d
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 11 deletions.
3 changes: 2 additions & 1 deletion Inc/crc/crc32_variants/crc32.h
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,8 @@
uint32_t Crc32(
const uint8_t* crc_data_ptr,
uint32_t crc_length,
bool final_xor
bool final_crc,
const uint32_t* last_crc_value
);

#endif /* UTILITY_CRC32_H_ */
21 changes: 18 additions & 3 deletions Src/crc/crc32_variants/crc32.c
Original file line number Diff line number Diff line change
Expand Up @@ -40,12 +40,14 @@
#define FINAL_XOR_VALUE (0xFFFFFFFFU)
#define REFLECTED_OUTPUT (true)
#define REFLECTED_INPUT (true)
#define FINAL_XOR (true)

uint32_t
Crc32(
const uint8_t* crc_data_ptr,
uint32_t crc_length,
bool final_xor) {
bool final_crc,
const uint32_t* last_crc_value) {

/* CRC32 also know as Ethernet CRC (Polynomial 0x4C11DB7) */
static const uint32_t crc_table[256] = {
Expand Down Expand Up @@ -83,13 +85,26 @@ Crc32(
0xAFB010B1U, 0xAB710D06U, 0xA6322BDFU, 0xA2F33668U, 0xBCB4666DU, 0xB8757BDAU, 0xB5365D03U, 0xB1F740B4U
};

bool reflect_output = false;
bool final_xor = false;
uint32_t crc_initial_value = INITIAL_CRC32_VALUE;

if (NULL_PTR != last_crc_value) {
crc_initial_value = *last_crc_value;
}

if (final_crc) {
reflect_output = REFLECTED_OUTPUT;
final_xor = FINAL_XOR;
}

return Crc32Base(
crc_table,
crc_data_ptr,
crc_length,
INITIAL_CRC32_VALUE,
crc_initial_value,
FINAL_XOR_VALUE,
REFLECTED_OUTPUT,
reflect_output,
REFLECTED_INPUT,
final_xor
);
Expand Down
21 changes: 14 additions & 7 deletions Tests/test_crc32.c
Original file line number Diff line number Diff line change
Expand Up @@ -162,13 +162,20 @@ TEST(Crc32, CRC32Base_Without_finish_xor) {
}

TEST(Crc32, Crc32) {
TEST_ASSERT_EQUAL_HEX32(0x2144DF1CU, Crc32(message1, sizeof(message1), true));
TEST_ASSERT_EQUAL_HEX32(0x24AB9D77U, Crc32(message2, sizeof(message2), true));
TEST_ASSERT_EQUAL_HEX32(0xB6C9B287U, Crc32(message3, sizeof(message3), true));
TEST_ASSERT_EQUAL_HEX32(0x32A06212U, Crc32(message4, sizeof(message4), true));
TEST_ASSERT_EQUAL_HEX32(0xB0AE863DU, Crc32(message5, sizeof(message5), true));
TEST_ASSERT_EQUAL_HEX32(0x9CDEA29BU, Crc32(message6, sizeof(message6), true));
TEST_ASSERT_EQUAL_HEX32(0xFFFFFFFFU, Crc32(message7, sizeof(message7), true));
TEST_ASSERT_EQUAL_HEX32(0x2144DF1CU, Crc32(message1, sizeof(message1), true, NULL_PTR));
TEST_ASSERT_EQUAL_HEX32(0x24AB9D77U, Crc32(message2, sizeof(message2), true, NULL_PTR));
TEST_ASSERT_EQUAL_HEX32(0xB6C9B287U, Crc32(message3, sizeof(message3), true, NULL_PTR));
TEST_ASSERT_EQUAL_HEX32(0x32A06212U, Crc32(message4, sizeof(message4), true, NULL_PTR));
TEST_ASSERT_EQUAL_HEX32(0xB0AE863DU, Crc32(message5, sizeof(message5), true, NULL_PTR));
TEST_ASSERT_EQUAL_HEX32(0x9CDEA29BU, Crc32(message6, sizeof(message6), true, NULL_PTR));
TEST_ASSERT_EQUAL_HEX32(0xFFFFFFFFU, Crc32(message7, sizeof(message7), true, NULL_PTR));

// CRC when message is in chunks
uint32_t crc_result = Crc32(&message5[0], 2U, false, NULL_PTR);
crc_result = Crc32(&message5[2], 5U, false, &crc_result);
crc_result = Crc32(&message5[7], 2U, true, &crc_result);

TEST_ASSERT_EQUAL_HEX32(0xB0AE863DU, crc_result);
}

TEST(Crc32, Crc32_bzip2) {
Expand Down

0 comments on commit c81165d

Please sign in to comment.