Skip to content

Commit 6a8895a

Browse files
committed
Updated Checksum function to include NULL check and zero lenght check and added unit tests for that logic.
1 parent af21b16 commit 6a8895a

2 files changed

Lines changed: 29 additions & 0 deletions

File tree

Lab3/src/checksum.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
#include "checksum.h"
2+
#include <stddef.h>
23

34
uint8_t calculate_checksum(uint8_t *buffer, uint8_t buffer_length)
45
{
6+
if (buffer == NULL || buffer_length == 0) {
7+
return 0; // Return 0 for null buffer or zero length
8+
}
9+
510
uint16_t result_checksum = 0;
611
uint8_t loop_index = 0;
712

Lab3/src/test_checksum.c

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,27 @@ void test_calculate_checksum_with_max_values(void) {
3535
TEST_ASSERT_EQUAL_UINT8(expected_checksum, actual_checksum);
3636
}
3737

38+
void test_calculate_checksum_with_null_buffer(void) {
39+
uint8_t *data = NULL;
40+
uint8_t expected_checksum = 0; // Null buffer should return 0
41+
uint8_t actual_checksum = calculate_checksum(data, 10); // Length is arbitrary since buffer is NULL
42+
TEST_ASSERT_EQUAL_UINT8(expected_checksum, actual_checksum);
43+
}
44+
45+
void test_calculate_checksum_with_zero_length(void) {
46+
uint8_t data[] = {0x01, 0x02, 0x03};
47+
uint8_t expected_checksum = 0; // Zero length should return 0
48+
uint8_t actual_checksum = calculate_checksum(data, 0);
49+
TEST_ASSERT_EQUAL_UINT8(expected_checksum, actual_checksum);
50+
}
51+
52+
void test_calculate_zero_checksum(void) {
53+
uint8_t data[] = {0x00, 0x00, 0x00, 0x00};
54+
uint8_t expected_checksum = 0; // All zeros should yield a checksum of 0
55+
uint8_t actual_checksum = calculate_checksum(data, sizeof(data));
56+
TEST_ASSERT_EQUAL_UINT8(expected_checksum, actual_checksum);
57+
}
58+
3859
int main(void) {
3960

4061
uart_init();
@@ -44,6 +65,9 @@ int main(void) {
4465
RUN_TEST(test_calculate_checksum_with_valid_data);
4566
RUN_TEST(test_calculate_checksum_with_empty_data);
4667
RUN_TEST(test_calculate_checksum_with_max_values);
68+
RUN_TEST(test_calculate_checksum_with_null_buffer);
69+
RUN_TEST(test_calculate_checksum_with_zero_length);
70+
RUN_TEST(test_calculate_zero_checksum);
4771

4872
int failures = UNITY_END();
4973

0 commit comments

Comments
 (0)