From: Phillip Wood Date: Fri, 16 Aug 2024 13:38:30 GMT Subject: Re: [PATCH v5 9/9] t/unit-tests: convert ctype tests to use clar Message-ID: <4aa6f557-1dfc-4aaa-b6db-e47013568ecc@gmail.com> In-Reply-To: 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 " "); > }