Skip to content

Commit

Permalink
libc: strchr tests: add test group for ASCII compare
Browse files Browse the repository at this point in the history
JIRA: CI-232
  • Loading branch information
maska989 committed Jul 5, 2023
1 parent ae1c0b2 commit 4eb55b2
Show file tree
Hide file tree
Showing 2 changed files with 170 additions and 2 deletions.
1 change: 1 addition & 0 deletions libc/string/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ void runner(void)
RUN_TEST_GROUP(signal_psignal);
RUN_TEST_GROUP(string_cat);
RUN_TEST_GROUP(string_dup);
RUN_TEST_GROUP(string_spn);
}


Expand Down
171 changes: 169 additions & 2 deletions libc/string/string_lenchr.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
* TESTED:
* - strlen()
* - strnlen()
* - strchr()
* - strrchr()
* - strcspn()
* - strspn()
* - strchr()
* - strrchr()
* - memchr()
Expand All @@ -34,6 +34,7 @@

TEST_GROUP(string_len);
TEST_GROUP(string_chr);
TEST_GROUP(string_spn);


TEST_SETUP(string_len)
Expand Down Expand Up @@ -148,6 +149,161 @@ TEST(string_len, big)
*/


TEST_SETUP(string_spn)
{
}


TEST_TEAR_DOWN(string_spn)
{
}

TEST(string_spn, basic)
{
const char pangram[] = " The quick brown fox jumps over the lazy dog";
char holder[45] = { 0 };
int sz;

/* Checking if both functions recognize the holder as a different set of elements */
sz = sizeof(pangram) - 1;

memcpy(holder, pangram, sz + 1);

/* Checking if both functions recognize holder as same set of elements */
TEST_ASSERT_EQUAL_INT(0, strcspn(pangram, holder));
TEST_ASSERT_EQUAL_INT(sz, strspn(pangram, holder));

TEST_ASSERT_EQUAL_INT(0, strcspn(pangram, &holder[sz / 2]));
/* One because strspn found space as*/
TEST_ASSERT_EQUAL_INT(1, strspn(pangram, &holder[sz / 2]));

TEST_ASSERT_EQUAL_INT(sz, strcspn(pangram, &holder[sz]));
}


TEST(string_spn, ascii)
{
char supportCharSet[BUFF_SIZE] = { 0 },
reversCharSet[BUFF_SIZE] = { 0 },
*asciiStr;
int i;

asciiStr = testdata_createCharStr(BUFF_SIZE + 1);


for (i = 1; i < BUFF_SIZE; i++) {
supportCharSet[i - 1] = i;
reversCharSet[i - 1] = BUFF_SIZE - i;

/*
* In this case we need to use fully filled set for strcspn
* because it counts size based on elements that are not
* present in himself
*/
TEST_ASSERT_EQUAL_INT(i - 1, strcspn(&asciiStr[1], &asciiStr[i]));
TEST_ASSERT_EQUAL_INT(i, strspn(&asciiStr[1], supportCharSet));

/* Checking if we reverse order strcspn and strspn will find elements that are correct */
TEST_ASSERT_EQUAL_INT(BUFF_SIZE - 1, strcspn(&asciiStr[1], &reversCharSet[i]));

if (i == 127) {
TEST_ASSERT_EQUAL_INT(BUFF_SIZE - 1, strspn(&asciiStr[1], reversCharSet));
}
else {
TEST_ASSERT_EQUAL_INT(0, strspn(&asciiStr[1], reversCharSet));
}
}

free((void *)asciiStr);
}


TEST(string_spn, not_ascii)
{
unsigned char charSet[BUFF_SIZE] = { 0 };
int sz, i;

/* Checking out of ASCII bytes */
for (i = sizeof(charSet); i < sizeof(charSet) * 2 - 1; i++) {
charSet[i - sizeof(charSet)] = i;
}

sz = sizeof(charSet) - 1;
TEST_ASSERT_EQUAL_INT(sz, strcspn((const char *)charSet, ""));
TEST_ASSERT_EQUAL_INT(sz, strspn((const char *)charSet, (const char *)charSet));
}


TEST(string_spn, big)
{
char bigstr[PATH_MAX] = { 0 },
support[PATH_MAX] = { 0 };
int sz;

/*
* The length of the string is not restricted,
* so we test one of the bigger values, which may be used
* with remembering the last element must be a null term
* zero to collect the data as the string from
* declared space, that's why we memset one place less than its size
*/

sz = sizeof(bigstr) - 1;
memset(bigstr, 'a', sz);

TEST_ASSERT_EQUAL_INT(sz, strcspn(bigstr, ""));
TEST_ASSERT_EQUAL_INT(sz, strspn(bigstr, bigstr));

memcpy(support, bigstr, sz);
support[sz - 1] = 'b';
TEST_ASSERT_EQUAL_INT(sz, strspn(bigstr, support));

memset(support, 'b', sz);
support[sz - 1] = 'a';
TEST_ASSERT_EQUAL_INT(0, strcspn(bigstr, support));
support[sz - 1] = 'b';
TEST_ASSERT_EQUAL_INT(sz, strcspn(bigstr, support));
}


TEST(string_spn, empty_output)
{
TEST_ASSERT_EQUAL_INT(0, strcspn("", "abc"));
TEST_ASSERT_EQUAL_INT(0, strspn("", "abc"));

TEST_ASSERT_EQUAL_INT(0, strcspn("", ""));
TEST_ASSERT_EQUAL_INT(0, strspn("", ""));
}


TEST(string_spn, mixed_order)
{

char strHolder[BUFF_SIZE] = { 0 },
supportSet[BUFF_SIZE] = { 0 };


TEST_ASSERT_EQUAL_INT(0, strcspn("abc", "cba"));
TEST_ASSERT_EQUAL_INT(3, strspn("abc", "cba"));

memset(strHolder, 'a', BUFF_SIZE - 3);
strHolder[BUFF_SIZE - 2] = 'b';
memset(supportSet, 'b', BUFF_SIZE - 3);
supportSet[BUFF_SIZE - 2] = 'a';

TEST_ASSERT_EQUAL_INT(BUFF_SIZE - 3, strcspn(strHolder, supportSet));
TEST_ASSERT_EQUAL_INT(0, strspn(strHolder, supportSet));

TEST_ASSERT_EQUAL_INT(BUFF_SIZE - 3, strcspn(supportSet, strHolder));
TEST_ASSERT_EQUAL_INT(0, strspn(supportSet, strHolder));
}


/*
////////////////////////////////////////////////////////////////////////////////////
*/


TEST_SETUP(string_chr)
{
}
Expand Down Expand Up @@ -400,6 +556,17 @@ TEST_GROUP_RUNNER(string_len)
}


TEST_GROUP_RUNNER(string_spn)
{
RUN_TEST_CASE(string_spn, ascii);
RUN_TEST_CASE(string_spn, not_ascii);
RUN_TEST_CASE(string_spn, empty_output);
RUN_TEST_CASE(string_spn, mixed_order);
RUN_TEST_CASE(string_spn, basic);
RUN_TEST_CASE(string_spn, big);
}


TEST_GROUP_RUNNER(string_chr)
{
RUN_TEST_CASE(string_chr, basic);
Expand Down

0 comments on commit 4eb55b2

Please sign in to comment.