git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "René Scharfe" <l.s.r@web.de>
To: Junio C Hamano <gitster@pobox.com>
Cc: Git List <git@vger.kernel.org>, Masahiro Yamada <masahiroy@kernel.org>
Subject: Re: [PATCH 1/3] test-ctype: test isascii
Date: Mon, 13 Feb 2023 19:37:15 +0100	[thread overview]
Message-ID: <93793a00-da6a-81b4-348f-cd7b946bb9eb@web.de> (raw)
In-Reply-To: <xmqqttzqcjyj.fsf@gitster.g>

Am 13.02.23 um 04:39 schrieb Junio C Hamano:
> René Scharfe <l.s.r@web.de> writes:
>
>> Am 11.02.23 um 20:48 schrieb Junio C Hamano:
>>> René Scharfe <l.s.r@web.de> writes:
>>>
>>>> Test the character classifier added by c2e9364a06 (cleanup: add
>>>> isascii(), 2009-03-07).  It returns 1 for NUL as well, which requires
>>>> special treatment, as our string-based tester can't find it with
>>>> strcmp(3).  Allow NUL to be given as the first character in a class
>>>> specification string.  This has the downside of no longer supporting
>>>> the empty string, but that's OK since we are not interested in testing
>>>> character classes with no members.
>>>
>>> I wonder how effective a test we can have by checking a table we use
>>> in production (i.e. ctype.c::sane_ctype[]) against another table we
>>> use only for testing (i.e. string literals in test-ctype.c), but
>>> that is not something new in this series.
>>
>> What aspect is left uncovered?
>>
>> Or do you mean that the production table should be made trivially
>> readable to avoid having to test at all?
>
> Much closer to the latter but not quite.
>
> Both tables are not all that transparent, and it feels that the
> protection by the tests largely depends on the fact that it is less
> likely for us to make the same mistake in two "not so crystal clear"
> tables for the same byte.

The test strings for islower() and isupper() I wrote down from memory
long ago, I think.  They should be easily verifiable, like the new ones
for isxdigit().  The one for isascii() is a bit tiring, but verifying it
against the man page which says that the characters from value 0 to 0177
are included should be feasible.  The ones for iscntrl() and ispunct() I
got from their man page.

But when it came to isprint() I got lazy and just copied from ctype.c --
you got me there.  A more intuitive representation could be:

   " " LOWER UPPER DIGIT PUNCT

In my experience having two copies already helps when modifying one of
them -- but at least at some point we better check them against an
external source of truth.

The ctype.c version needs to be fast, so we probably have to make some
concessions to readability.  I'd love to be proven wrong on that,
though.

>> ... but parsing commit messages and blob
>> payloads should perhaps better be done with locale-aware versions
>> with multi-byte character support.
>
> Yes, that does make sense but it is orthogonal to what sane_ctype
> wants to address, I would think.

Currently we can only use one or the other variant because our sane
versions use the same names as the locale-aware ones.  Full overlap
instead of orthogonality.  I don't know if there is a practical impact
besides not recognizing function lines that start with umlauts etc.
for diff hunk headers, though.

René

  reply	other threads:[~2023-02-13 18:37 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-02-11 13:04 [PATCH 0/3] test-ctype: test all classifiers René Scharfe
2023-02-11 13:12 ` [PATCH 1/3] test-ctype: test isascii René Scharfe
2023-02-11 19:48   ` Junio C Hamano
2023-02-12  9:48     ` René Scharfe
2023-02-13  3:39       ` Junio C Hamano
2023-02-13 18:37         ` René Scharfe [this message]
2023-02-13 19:02           ` Junio C Hamano
2023-02-11 13:12 ` [PATCH 2/3] test-ctype: test islower and isupper René Scharfe
2023-02-11 13:12 ` [PATCH 3/3] test-ctype: test iscntrl, ispunct, isxdigit and isprint René Scharfe
2023-02-13 21:08 ` [PATCH v2 0/3] test-ctype: test all classifiers René Scharfe
2023-02-13 21:09   ` [PATCH v2 1/3] test-ctype: test isascii René Scharfe
2023-02-13 21:10   ` [PATCH v2 2/3] test-ctype: test islower and isupper René Scharfe
2023-02-13 21:12   ` [PATCH v2 3/3] test-ctype: test iscntrl, ispunct, isxdigit and isprint René Scharfe
2023-02-13 21:59   ` [PATCH v2 0/3] test-ctype: test all classifiers Junio C Hamano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=93793a00-da6a-81b4-348f-cd7b946bb9eb@web.de \
    --to=l.s.r@web.de \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=masahiroy@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).