mirror of
https://git.FreeBSD.org/src.git
synced 2024-11-28 08:02:54 +00:00
lib/libc/tests/string/strcspn_test.c: extend tests to catch previous bug
This extends the strcspn() unit tests to catch mistakes in the
implementation that only appear when a mismatch occurs in a certain
position of the string against a certain position of the set.
See also: 52d4a4d4e0
Sponsored by: The FreeBSD Foundation
Approved by: imp
MFC after: 3 days
Differential Revision: https://reviews.freebsd.org/D41821
This commit is contained in:
parent
9080190b97
commit
601fd768cf
@ -148,10 +148,74 @@ ATF_TC_BODY(set_alignments, tc)
|
||||
test_set_alignments(buf, 30, NOMATCH);
|
||||
}
|
||||
|
||||
#ifndef STRSPN
|
||||
/* test all positions in which set could match buf */
|
||||
static void
|
||||
test_match_positions(char *buf, char *set, size_t buflen, size_t setlen)
|
||||
{
|
||||
size_t i, j, outcome;
|
||||
|
||||
memset(buf, '-', buflen);
|
||||
|
||||
for (i = 0; i < setlen; i++)
|
||||
set[i] = 'A' + i;
|
||||
|
||||
buf[buflen] = '\0';
|
||||
set[setlen] = '\0';
|
||||
|
||||
/*
|
||||
* Check for (mis)match at buffer position i
|
||||
* against set position j.
|
||||
*/
|
||||
for (i = 0; i < buflen; i++) {
|
||||
for (j = 0; j < setlen; j++) {
|
||||
buf[i] = set[j];
|
||||
|
||||
outcome = strcspn(buf, set);
|
||||
ATF_CHECK_EQ_MSG(i, outcome,
|
||||
"strcspn(\"%s\", \"%s\") = %zu != %zu",
|
||||
buf, set, outcome, i);
|
||||
}
|
||||
|
||||
buf[i] = '-';
|
||||
}
|
||||
}
|
||||
|
||||
ATF_TC_WITHOUT_HEAD(match_positions);
|
||||
ATF_TC_BODY(match_positions, tc)
|
||||
{
|
||||
char buf[129], set[65];
|
||||
|
||||
test_match_positions(buf, set, 128, 64);
|
||||
test_match_positions(buf, set, 64, 64);
|
||||
test_match_positions(buf, set, 32, 64);
|
||||
test_match_positions(buf, set, 16, 64);
|
||||
test_match_positions(buf, set, 8, 64);
|
||||
test_match_positions(buf, set, 128, 32);
|
||||
test_match_positions(buf, set, 64, 32);
|
||||
test_match_positions(buf, set, 32, 32);
|
||||
test_match_positions(buf, set, 16, 32);
|
||||
test_match_positions(buf, set, 8, 32);
|
||||
test_match_positions(buf, set, 128, 16);
|
||||
test_match_positions(buf, set, 64, 16);
|
||||
test_match_positions(buf, set, 32, 16);
|
||||
test_match_positions(buf, set, 16, 16);
|
||||
test_match_positions(buf, set, 8, 16);
|
||||
test_match_positions(buf, set, 128, 8);
|
||||
test_match_positions(buf, set, 64, 8);
|
||||
test_match_positions(buf, set, 32, 8);
|
||||
test_match_positions(buf, set, 16, 8);
|
||||
test_match_positions(buf, set, 8, 8);
|
||||
}
|
||||
#endif /* !defined(STRSPN) */
|
||||
|
||||
ATF_TP_ADD_TCS(tp)
|
||||
{
|
||||
ATF_TP_ADD_TC(tp, buf_alignments);
|
||||
ATF_TP_ADD_TC(tp, set_alignments);
|
||||
#ifndef STRSPN
|
||||
ATF_TP_ADD_TC(tp, match_positions);
|
||||
#endif
|
||||
|
||||
return (atf_no_error());
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user