[m-rev.] for review: make test hard_coded/string_class test more comprehensive
Julien Fischer
jfischer at opturion.com
Mon Sep 21 20:15:03 AEST 2026
On Mon, 21 Sept 2026 at 00:38, Zoltan Somogyi <zoltan.somogyi at runbox.com> wrote:
>
>
>
> On Sun, 20 Sep 2026 20:08:30 +1000, Julien Fischer <jfischer at opturion.com> wrote:
> > Make the hard_coded/string_class test more comprehensive.
>
> For total rewrites like this, sending just the new version is easier
> on reviewers than the diff.
>
> > - Test each test predicate on every test string.
> > - Include is_empty/1 is_all_alnum/1 in the predicates to test.
> > - Add some tests the boundaries of the ASCII range.
> > - Add some tests involving ill-formed strings.
> >
> > Generate the output as a table for ease of comparison.
>
> That's a set of big steps forward.
>
> > +empty = is_all_empty alpha_ = is_all_alpha_or_underscore
> > +alpha = is_all_alpha alnum_ = is_all_alnum_or_underscore
> > +alnum = is_all_alnum match = all_match(ascii_alpha)
> > +digit = is_all_digits nonasc = all_match(nonascii)
>
> These should have shorter abbreviations (such as AN_ or even _N
> for is_all_alnum_or_underscore) to allow four or even three chars
> per column. As is, each row appears split across two lines, at least
> in both my email readers.
Done.
> > --- a/tests/hard_coded/string_class.m
> > +++ b/tests/hard_coded/string_class.m
> > @@ -1,6 +1,20 @@
> > %---------------------------------------------------------------------------%
> > % vim: ts=4 sw=4 et ft=mercury
> > %---------------------------------------------------------------------------%
> > +%
> > +% Test the string predicates that test if every code point in a string
> > +% belongs to some class of characters.
>
> s/if/whether/
Fixed.
> > +% Each row of the output gives the result of every such predicate on one
> > +% test string.
> > +%
> > +% The .exp file is for backends using UTF-8 string encoding.
> > +% The .exp2 file is for backends using UTF-16 string encoding.
>
> s/UTF-X/UTF-X as the/
Done.
> > +% The two outputs differ only in the rows for ill-formed strings: on UTF-8
> > +% backends an ill-formed code unit is a lone byte, while on UTF-16 backends
> > +% it is an unpaired surrogate code point.
>
> Add a comma after both occurrences of "backends".
Done.
> > +test_string(Str, !IO) :-
> > + write_row(describe(Str),
> > + tf(is_empty(Str)),
> > + tf(is_all_alpha(Str)),
> > + tf(is_all_alnum(Str)),
> > + tf(is_all_alpha_or_underscore(Str)),
> > + tf(is_all_alnum_or_underscore(Str)),
> > + tf(is_all_digits(Str)),
> > + tf(all_match(ascii_alpha, Str)),
> > + tf(all_match(nonascii, Str)),
> > + !IO).
> > +
> > +:- pred write_row(string::in, string::in, string::in, string::in, string::in,
> > + string::in, string::in, string::in, string::in, io::di, io::uo) is det.
> > +
> > +write_row(Str, Empty, Alpha, Alnum, AlphaU, AlnumU, Digit, Match, NonAscii,
> > + !IO) :-
>
> The first argument here is not really Str, it is describe(Str). I would
> therefore rename it as Desc.
Done.
> I would put the table of test strings at the end of the module.
Done.
> Other than that, the diff is fine.
Thanks for that.
Julien.
More information about the reviews
mailing list