Subject: Re: [PATCH v5 9/9] t/unit-tests: convert ctype tests to use clar

From: Phillip Wood <[email-masked]>
Date: Fri, 16 Aug 2024 14:38:30 +0100

Hi Patrick

On 16/08/2024 08:05, Patrick Steinhardt wrote:
>   #define TEST_CHAR_CLASS(class, string) do { \
>   	size_t len = ARRAY_SIZE(string) - 1 + \
>   		BUILD_ASSERT_OR_ZERO(ARRAY_SIZE(string) > 0) + \
>   		BUILD_ASSERT_OR_ZERO(sizeof(string[0]) == sizeof(char)); \
> -	int skip = test__run_begin(); \
> -	if (!skip) { \
> -		for (int i = 0; i < 256; i++) { \
> -			if (!check_int(class(i), ==, !!memchr(string, i, len)))\
> -				test_msg("      i: 0x%02x", i); \
> -		} \
> -		check(!class(EOF)); \
> -	} \
> -	test__run_end(!skip, TEST_LOCATION(), #class " works"); \
> +	for (int i = 0; i < 256; i++) \
> +		cl_assert_equal_i(class(i), !!memchr(string, i, len)); \

If this fails how are we supposed to know which character it was checking?

Thanks

Phillip

> +	cl_assert(!class(EOF)); \
>   } while (0)
>   
>   #define DIGIT "0123456789"
> @@ -33,21 +27,72 @@
>   	"\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f" \
>   	"\x7f"
>   
> -int cmd_main(int argc, const char **argv) {
> +void test_ctype__isspace(void)
> +{
>   	TEST_CHAR_CLASS(isspace, " \n\r\t");
> +}
> +
> +void test_ctype__isdigit(void)
> +{
>   	TEST_CHAR_CLASS(isdigit, DIGIT);
> +}
> +
> +void test_ctype__isalpha(void)
> +{
>   	TEST_CHAR_CLASS(isalpha, LOWER UPPER);
> +}
> +
> +void test_ctype__isalnum(void)
> +{
>   	TEST_CHAR_CLASS(isalnum, LOWER UPPER DIGIT);
> +}
> +
> +void test_ctype__is_glob_special(void)
> +{
>   	TEST_CHAR_CLASS(is_glob_special, "*?[\\");
> +}
> +
> +void test_ctype__is_regex_special(void)
> +{
>   	TEST_CHAR_CLASS(is_regex_special, "$()*+.?[\\^{|");
> +}
> +
> +void test_ctype__is_pathspec_magic(void)
> +{
>   	TEST_CHAR_CLASS(is_pathspec_magic, "!\"#%&',-/:;<=>@_`~");
> +}
> +
> +void test_ctype__isascii(void)
> +{
>   	TEST_CHAR_CLASS(isascii, ASCII);
> +}
> +
> +void test_ctype__islower(void)
> +{
>   	TEST_CHAR_CLASS(islower, LOWER);
> +}
> +
> +void test_ctype__isupper(void)
> +{
>   	TEST_CHAR_CLASS(isupper, UPPER);
> +}
> +
> +void test_ctype__iscntrl(void)
> +{
>   	TEST_CHAR_CLASS(iscntrl, CNTRL);
> +}
> +
> +void test_ctype__ispunct(void)
> +{
>   	TEST_CHAR_CLASS(ispunct, PUNCT);
> +}
> +
> +void test_ctype__isxdigit(void)
> +{
>   	TEST_CHAR_CLASS(isxdigit, DIGIT "abcdefABCDEF");
> -	TEST_CHAR_CLASS(isprint, LOWER UPPER DIGIT PUNCT " ");
> +}
>   
> -	return test_done();
> +void test_ctype__isprint(void)
> +{
> +	TEST_CHAR_CLASS(isprint, LOWER UPPER DIGIT PUNCT " ");
>   }