diff --git a/CMakeLists.txt b/CMakeLists.txt index 5f50f77..000817d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -23,6 +23,7 @@ set(SOURCES # ctype src/ctype/charprops.c src/ctype/classes.c + src/ctype/convert.c # string src/string/memarray.c src/string/core.c diff --git a/include/ft/all-tests.h b/include/ft/all-tests.h index 7fef70f..5540ad3 100644 --- a/include/ft/all-tests.h +++ b/include/ft/all-tests.h @@ -10,6 +10,8 @@ /* ctype */ extern ft_test ft_ctype_macros; extern ft_test ft_ctype_functions; +extern ft_test ft_ctype_convert_macros; +extern ft_test ft_ctype_convert_functions; /* string */ extern ft_test ft_string_memset; diff --git a/src/ctype/classes.c b/src/ctype/classes.c index 7ee4176..0cb8c0d 100644 --- a/src/ctype/classes.c +++ b/src/ctype/classes.c @@ -23,7 +23,7 @@ static void _ctype_macros(ft_test *t) } ft_test ft_ctype_macros = { - .name = "Macro versions of functions", + .name = "Macro-based classification", .function = _ctype_macros, }; @@ -61,6 +61,6 @@ static void _ctype_functions(ft_test *t) } ft_test ft_ctype_functions = { - .name = "Pure functions", + .name = "Function-based classification", .function = _ctype_functions, }; diff --git a/src/ctype/convert.c b/src/ctype/convert.c new file mode 100644 index 0000000..c612ae0 --- /dev/null +++ b/src/ctype/convert.c @@ -0,0 +1,38 @@ +#include +#include +#include + +static void _ctype_convert_macros(ft_test *t) +{ + for(int c = 0; c < 128; c++) { + int cl = (isupper(c) ? c - 'A' + 'a' : c); + int cu = (islower(c) ? c - 'a' + 'A' : c); + + ft_assert(t, tolower(c) == cl); + ft_assert(t, toupper(c) == cu); + } +} + +ft_test ft_ctype_convert_macros = { + .name = "Macro-based conversion", + .function = _ctype_convert_macros, +}; + +#undef tolower +#undef toupper + +static void _ctype_convert_functions(ft_test *t) +{ + for(int c = 0; c < 128; c++) { + int cl = (isupper(c) ? c - 'A' + 'a' : c); + int cu = (islower(c) ? c - 'a' + 'A' : c); + + ft_assert(t, tolower(c) == cl); + ft_assert(t, toupper(c) == cu); + } +} + +ft_test ft_ctype_convert_functions = { + .name = "Function-based conversion", + .function = _ctype_convert_functions, +}; diff --git a/src/main.c b/src/main.c index ccd63fb..ff2cc5b 100644 --- a/src/main.c +++ b/src/main.c @@ -16,6 +16,8 @@ ft_list headers_libc[] = { { "", (ft_test*[]){ &ft_ctype_macros, &ft_ctype_functions, + &ft_ctype_convert_macros, + &ft_ctype_convert_functions, NULL, }}, { "", NULL },