]> gitweb.hhaalo.de Git - feierabend.git/commitdiff
add validate hour function
authorBastian Dehn <hhaalo@arcor.de>
Wed, 12 Nov 2025 14:43:04 +0000 (15:43 +0100)
committerBastian Dehn <hhaalo@arcor.de>
Wed, 12 Nov 2025 14:43:04 +0000 (15:43 +0100)
src/time_format.c
src/time_format.h
tests/time_format_tests.c

index cc862a212b04c73fa6079decd63cff2c1958fa90..43c0372a17caee9ee6aa91f472dcb6a46b5efa17 100644 (file)
@@ -11,6 +11,7 @@
 #define MAX_TIME_STR_LENGTH 7
 
 #define DATE_REGEX "^[0-9]{4}-([0][1-9]|1[0-2])-([0-2][1-9]|[1-3]0|3[01])$"
+#define HOUR_REGEX "^([0-9]|1[0-9]|2[0-3])$"
 
 void get_time_str(time_t timediff, char* timestr)
 {
@@ -187,23 +188,23 @@ int get_day_from_str(const char* date)
        return value;
 }
 
-bool validate_datestring(const char* date)
+bool validate_string(const char* str, const char* regex_pattern)
 {
-       regex_t* date_regex = malloc(sizeof(regex_t));
-       if (date_regex == NULL)
+       regex_t* regex = malloc(sizeof(regex_t));
+       if (regex == NULL)
                return false;
 
-       int comp_success = regcomp(date_regex, DATE_REGEX, REG_NOSUB | REG_EXTENDED);
+       int comp_success = regcomp(regex, regex_pattern, REG_NOSUB | REG_EXTENDED);
        if (comp_success != 0) {
-               free(date_regex);
+               free(regex);
                return false;
        }
 
-       int match = regexec(date_regex, date, 0, NULL, 0);
+       int match = regexec(regex, str, 0, NULL, 0);
 
-       regfree(date_regex);
-       free(date_regex);
-       date_regex = NULL;
+       regfree(regex);
+       free(regex);
+       regex = NULL;
 
        if (match == REG_NOMATCH)
                return false;
@@ -212,4 +213,14 @@ bool validate_datestring(const char* date)
                return true;
 
        return false;
+}
+
+bool validate_datestring(const char* date)
+{
+       return validate_string(date, DATE_REGEX);
+}
+
+bool validate_hourstring(const char* hour)
+{
+       return validate_string(hour, HOUR_REGEX);
 }
\ No newline at end of file
index 712cfaf1f36a4e1127b7c9b8b9ed550b1924a948..ad332725023a285d438a0b5eb2429400818f03d7 100644 (file)
@@ -12,5 +12,6 @@ int get_year_from_str(const char* date);
 int get_month_from_str(const char* date);
 int get_day_from_str(const char* date);
 bool validate_datestring(const char* date);
+bool validate_hourstring(const char* hour);
 
 #endif
\ No newline at end of file
index 0937a80fd65da16f67e80b6fd99ee64f5f9bd08a..ae4b1116858053f1dc58807cbcf51c6a0c11ed9b 100644 (file)
@@ -5,6 +5,7 @@
 #include <cmocka.h>
 #include <string.h>
 #include <stdlib.h>
+#include <stdio.h>
 #include "../src/time_format.h"
 
 void get_zero_hour_and_fifteen_minutes()
@@ -365,6 +366,45 @@ void validate_invalid_date_string_tests()
        validate_invalid_date_string("20255-01-11");
 }
 
+void validate_vaild_hour_string(const char* hour)
+{
+       bool valid = validate_hourstring(hour);
+
+       assert_true(valid);
+}
+
+void validate_valid_hour_string_test()
+{
+       char* hour = malloc(sizeof(char) * 3);
+       if (hour == NULL)
+               return;
+
+       for (int i = 0; i < 24; i++) {
+               memset(hour, 0, 3);
+               sprintf(hour, "%d", i);
+               validate_vaild_hour_string(hour);
+       }
+
+       free(hour);
+       hour = NULL;
+}
+
+void validate_invaild_hour_string(const char* hour)
+{
+       bool valid = validate_hourstring(hour);
+
+       assert_false(valid);
+}
+
+void validate_invalid_hour_string_test()
+{
+       validate_invaild_hour_string("text");
+       validate_invaild_hour_string("-1");
+       validate_invaild_hour_string("01");
+       validate_invaild_hour_string("25");
+       validate_invaild_hour_string("100");
+}
+
 int main()
 {
        const struct CMUnitTest tests[] = {
@@ -395,7 +435,9 @@ int main()
                cmocka_unit_test(get_month_from_date),
                cmocka_unit_test(get_dat_from_date),
                cmocka_unit_test(validate_valid_date_string_tests),
-               cmocka_unit_test(validate_invalid_date_string_tests)
+               cmocka_unit_test(validate_invalid_date_string_tests),
+               cmocka_unit_test(validate_valid_hour_string_test),
+               cmocka_unit_test(validate_invalid_hour_string_test)
        };
 
        return cmocka_run_group_tests(tests, NULL, NULL);