All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] test-ctype: check EOF
@ 2023-04-30 10:00 René Scharfe
  2023-05-01 15:23 ` Junio C Hamano
  0 siblings, 1 reply; 3+ messages in thread
From: René Scharfe @ 2023-04-30 10:00 UTC (permalink / raw)
  To: Git List; +Cc: Junio C Hamano

The character classifiers are supposed to handle EOF, a negative integer
value.  It isn't part of any character class.  Extend the ctype tests to
cover it.

Signed-off-by: René Scharfe <l.s.r@web.de>
---
 t/helper/test-ctype.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/t/helper/test-ctype.c b/t/helper/test-ctype.c
index 71a1a5c9b0..039703ee72 100644
--- a/t/helper/test-ctype.c
+++ b/t/helper/test-ctype.c
@@ -2,8 +2,10 @@

 static int rc;

-static void report_error(const char *class, int ch)
+static void test(int ch, const char *class, int expect, int actual)
 {
+	if (actual == expect)
+		return;
 	printf("%s classifies char %d (0x%02x) wrongly\n", class, ch, ch);
 	rc = 1;
 }
@@ -24,9 +26,9 @@ static int is_in(const char *s, int ch)
 #define TEST_CLASS(t,s) {			\
 	int i;					\
 	for (i = 0; i < 256; i++) {		\
-		if (is_in(s, i) != t(i))	\
-			report_error(#t, i);	\
+		test(i, #t, is_in(s, i), t(i));	\
 	}					\
+	test(EOF, #t, 0, t(EOF));		\
 }

 #define DIGIT "0123456789"
--
2.40.1

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] test-ctype: check EOF
  2023-04-30 10:00 [PATCH] test-ctype: check EOF René Scharfe
@ 2023-05-01 15:23 ` Junio C Hamano
  2023-05-01 19:51   ` René Scharfe
  0 siblings, 1 reply; 3+ messages in thread
From: Junio C Hamano @ 2023-05-01 15:23 UTC (permalink / raw)
  To: René Scharfe; +Cc: Git List

René Scharfe <l.s.r@web.de> writes:

> The character classifiers are supposed to handle EOF, a negative integer
> value.  It isn't part of any character class.  Extend the ctype tests to
> cover it.

The goal makes sense.

> -static void report_error(const char *class, int ch)
> +static void test(int ch, const char *class, int expect, int actual)
>  {
> +	if (actual == expect)
> +		return;
>  	printf("%s classifies char %d (0x%02x) wrongly\n", class, ch, ch);
>  	rc = 1;
>  }
> @@ -24,9 +26,9 @@ static int is_in(const char *s, int ch)
>  #define TEST_CLASS(t,s) {			\
>  	int i;					\
>  	for (i = 0; i < 256; i++) {		\
> -		if (is_in(s, i) != t(i))	\
> -			report_error(#t, i);	\
> +		test(i, #t, is_in(s, i), t(i));	\
>  	}					\
> +	test(EOF, #t, 0, t(EOF));		\
>  }
>
>  #define DIGIT "0123456789"
> --
> 2.40.1

I am a bit torn on the conversion from report_error() to test(), as
the only "test"-y thing the updated function does is to compare two
of its parameters.  It still is mostly about reporting an error when
something goes wrong.  In other words, the added change could have
been just

	if (t(EOF) != 0)
		report_error(#t, EOF);

after the loop, I think.

The only thing that I am not entirely happy with the end result is
the name of the function, and not how the caller and the callee
divides their work, so it is so miniscule a thing that it won't be
worth our collective time to bikeshed it further.

Let's take it as-is.  Thanks.

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] test-ctype: check EOF
  2023-05-01 15:23 ` Junio C Hamano
@ 2023-05-01 19:51   ` René Scharfe
  0 siblings, 0 replies; 3+ messages in thread
From: René Scharfe @ 2023-05-01 19:51 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Git List

Am 01.05.23 um 17:23 schrieb Junio C Hamano:
> René Scharfe <l.s.r@web.de> writes:
>
>> The character classifiers are supposed to handle EOF, a negative integer
>> value.  It isn't part of any character class.  Extend the ctype tests to
>> cover it.
>
> The goal makes sense.
>
>> -static void report_error(const char *class, int ch)
>> +static void test(int ch, const char *class, int expect, int actual)
>>  {
>> +	if (actual == expect)
>> +		return;
>>  	printf("%s classifies char %d (0x%02x) wrongly\n", class, ch, ch);
>>  	rc = 1;
>>  }
>> @@ -24,9 +26,9 @@ static int is_in(const char *s, int ch)
>>  #define TEST_CLASS(t,s) {			\
>>  	int i;					\
>>  	for (i = 0; i < 256; i++) {		\
>> -		if (is_in(s, i) != t(i))	\
>> -			report_error(#t, i);	\
>> +		test(i, #t, is_in(s, i), t(i));	\
>>  	}					\
>> +	test(EOF, #t, 0, t(EOF));		\
>>  }
>>
>>  #define DIGIT "0123456789"
>> --
>> 2.40.1
>
> I am a bit torn on the conversion from report_error() to test(), as
> the only "test"-y thing the updated function does is to compare two
> of its parameters.  It still is mostly about reporting an error when
> something goes wrong.  In other words, the added change could have
> been just
>
> 	if (t(EOF) != 0)
> 		report_error(#t, EOF);
>
> after the loop, I think.

True -- the objective can be met without changing the function, and
whatever the goal for the "while at it" refactoring was can be
discussed in separate patch, if necessary.

> The only thing that I am not entirely happy with the end result is
> the name of the function, and not how the caller and the callee
> divides their work, so it is so miniscule a thing that it won't be
> worth our collective time to bikeshed it further.
>
> Let's take it as-is.  Thanks.

Hmm, okay.  Here's v2 anyway; feel free to ignore it.  At least I
found this reminder to stay focused and KISS helpful.

--- >8 ---
Subject: [PATCH v2] test-ctype: check EOF

The character classifiers are supposed to allow passing EOF to them, a
negative value.  It isn't part of any character class.  Extend the tests
to cover that.

Signed-off-by: René Scharfe <l.s.r@web.de>
---
 t/helper/test-ctype.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/t/helper/test-ctype.c b/t/helper/test-ctype.c
index 71a1a5c9b0..e5659df40b 100644
--- a/t/helper/test-ctype.c
+++ b/t/helper/test-ctype.c
@@ -27,6 +27,8 @@ static int is_in(const char *s, int ch)
 		if (is_in(s, i) != t(i))	\
 			report_error(#t, i);	\
 	}					\
+	if (t(EOF))				\
+		report_error(#t, EOF);		\
 }

 #define DIGIT "0123456789"
--
2.40.1

^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2023-05-01 19:52 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-04-30 10:00 [PATCH] test-ctype: check EOF René Scharfe
2023-05-01 15:23 ` Junio C Hamano
2023-05-01 19:51   ` René Scharfe

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.