From bf0d77d7d448e964e9716d5af67c48f3d014f090 Mon Sep 17 00:00:00 2001 From: Filip Wandzio Date: Sun, 1 Mar 2026 01:03:39 +0100 Subject: Scaffold basic project tree, implement benchmarking logic Implement unit testing guardian --- src/syntax_essentials.c | 176 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 176 insertions(+) create mode 100644 src/syntax_essentials.c (limited to 'src') diff --git a/src/syntax_essentials.c b/src/syntax_essentials.c new file mode 100644 index 0000000..419996a --- /dev/null +++ b/src/syntax_essentials.c @@ -0,0 +1,176 @@ +#include "syntax_essentials.h" +#include + +/** + * + * TASK 1: validate_first_name + * Check if the first name is valid. + * - Cannot be NULL or empty + * - Only letters (a-z, A-Z) + * - Minimum length: 2 + * + * @param first_name + * @return + */ +int validate_first_name(const char* first_name) +{ + if (!first_name) + return 0; + + int length = 0; + for (const char* p = first_name; *p; p++) { + if ((*p >= 'A' && *p <= 'Z') || (*p >= 'a' && *p <= 'z')) + length++; + else + return 0; + } + return length >= 2; +} + +/** + * + * TASK 2: validate_last_name + * Check if the last name is valid. + * - Cannot be NULL or empty + * - Only letters (a-z, A-Z) + * - Minimum length: 2 + * + * @param last_name + * @return + */ +int validate_last_name(const char* last_name) +{ + if (!last_name) + return 0; + + int length = 0; + + for (const char* p = last_name; *p; p++) { + if ((*p >= 'A' && *p <= 'Z') || (*p >= 'a' && *p <= 'z')) + length++; + else + return 0; + } + + return length >= 2; +} + +/** + * + * TASK 3: validate_full_name + * Check if a full name "First Last" is valid. + * Use TASK 1 and TASK 2 internally. + * @param full_name + * @return + */ +int validate_full_name(const char* full_name) +{ + if (!full_name) + return 0; + + char first_name[64], last_name[64]; + if (sscanf(full_name, "%63s %63s", first_name, last_name) != 2) + return 0; + + return validate_first_name(first_name) && validate_last_name(last_name); +} + +/** + * + * @param index + * @return + */ +int validate_index(const char* index) +{ + if (!index) + return 0; + + int length = 0; + for (const char* p = index; *p; p++) { + if (*p >= '0' && *p <= '9') + length++; + else + return 0; + } + + return length == 6; +} + +/** + * + * @param full_name + * @param index + * @return + */ +int register_student(const char* full_name, const char* index) +{ + if (!validate_full_name(full_name)) + return 1; + if (!validate_index(index)) + return 2; + return 0; +} + +/** + * + * @param name + * @return + */ +int name_length(const char* name) +{ + if (!name) + return 0; + + int length = 0; + while (*name++) + length++; + return length; +} + +/** + * + * @param array + * @param max_size + * @param name + * @param index + * @return + */ +int add_student(Student* array, + const int max_size, + const char* name, + const char* index) +{ + if (!name || !index || !array) + return 2; + + int len = 0; + while (len < max_size && array[len].full_name[0] != '\0') + len++; + + if (len >= max_size) + return 1; + + snprintf( + array[len].full_name, sizeof(array[len].full_name), "%s", name); + snprintf(array[len].index, sizeof(array[len].index), "%s", index); + return 0; +} + +/** + * + * @param code + * @return + */ +const char* get_error_message(const int code) +{ + switch (code) { + case 0: + return "Success"; + case 1: + return "Invalid name"; + case 2: + return "Invalid index"; + default: + return "Unknown error"; + } +} -- cgit v1.2.3