Skip to content

Commit

Permalink
libc: string.h: add review corrections
Browse files Browse the repository at this point in the history
JIRA: CI-232
  • Loading branch information
maska989 committed May 25, 2023
1 parent 707605b commit 2d941b2
Showing 1 changed file with 134 additions and 44 deletions.
178 changes: 134 additions & 44 deletions libc/string_lenchr.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,18 +21,13 @@


#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <limits.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <unistd.h>
#include <limits.h>
#include <unity_fixture.h>

#define BUFF_SIZE 128


TEST_GROUP(string_len);
TEST_GROUP(string_chr);
TEST_GROUP(string_spn);
Expand Down Expand Up @@ -113,28 +108,19 @@ TEST(string_len, ascii)

TEST(string_len, not_ascii)
{
const char notAsciiString[] = "♦♥♣♠◊⊗こんにちは❉❉⌨⌨⌨⌨⌨⌨⌨⌨❉❉";
unsigned char notAsciiSet[129];
unsigned char charSet[129] = { 0 };
int sz, i;

/* Checking ability to read the chars out of ascii charset */
sz = sizeof(notAsciiString) - 1;
TEST_ASSERT_EQUAL_INT(sz, strlen(notAsciiString));
TEST_ASSERT_EQUAL_INT(sz - 1, strnlen(notAsciiString, sz - 1));
TEST_ASSERT_EQUAL_INT(sz, strnlen(notAsciiString, sz));
TEST_ASSERT_EQUAL_INT(sz, strnlen(notAsciiString, sz + 1));

/* Checking out of ascii bytes */
for (i = 128; i <= 255; i++) {
notAsciiSet[i - 128] = i;
charSet[i - 128] = i;
}
notAsciiSet[128] = 0;

sz = sizeof(notAsciiSet) - 1;
TEST_ASSERT_EQUAL_INT(sz, strlen((const char *)notAsciiSet));
TEST_ASSERT_EQUAL_INT(sz - 1, strnlen((const char *)notAsciiSet, sz - 1));
TEST_ASSERT_EQUAL_INT(sz, strnlen((const char *)notAsciiSet, sz));
TEST_ASSERT_EQUAL_INT(sz, strnlen((const char *)notAsciiSet, sz + 1));
sz = sizeof(charSet) - 1;
TEST_ASSERT_EQUAL_INT(sz, strlen((const char *)charSet));
TEST_ASSERT_EQUAL_INT(sz - 1, strnlen((const char *)charSet, sz - 1));
TEST_ASSERT_EQUAL_INT(sz, strnlen((const char *)charSet, sz));
TEST_ASSERT_EQUAL_INT(sz, strnlen((const char *)charSet, sz + 1));
}


Expand All @@ -147,7 +133,6 @@ TEST(string_len, big)
for (i = 0; i < PATH_MAX - 1; i++) {
bigstr[i] = 'A';
}
bigstr[i] = '\0';

sz = sizeof(bigstr) - 1;
TEST_ASSERT_EQUAL_INT(sz, strlen(bigstr));
Expand All @@ -157,6 +142,11 @@ TEST(string_len, big)
}


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


TEST_SETUP(string_spn)
{
}
Expand All @@ -166,6 +156,7 @@ TEST_TEAR_DOWN(string_spn)
{
}


TEST(string_spn, ascii)
{
char asciiSet[BUFF_SIZE] = { 0 };
Expand All @@ -184,6 +175,107 @@ TEST(string_spn, ascii)
}


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

/* Checking out of ascii bytes */
for (i = 128; i <= 255; i++) {
charSet[i - 128] = 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 };
int sz;

/*
* The length of the string is not clearly restricted,
* so we test one of the bigger value, which may be used
* with remembering the last element must be null term
* zero in order to collect the data as the string from
* declared space, that's why we memset one place less than its size
*/
memset(bigstr, 'a', PATH_MAX - 1);

sz = sizeof(bigstr) - 1;
TEST_ASSERT_EQUAL_INT(sz, strcspn(bigstr, ""));
TEST_ASSERT_EQUAL_INT(sz, strspn(bigstr, bigstr));
}


TEST(string_spn, empty_output)
{
char emptySet[BUFF_SIZE] = { 0 };

TEST_ASSERT_EQUAL_INT(0, strcspn(emptySet, emptySet));
TEST_ASSERT_EQUAL_INT(0, strspn(emptySet, emptySet));

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

TEST_ASSERT_EQUAL_INT(0, strcspn(emptySet, "abc"));
TEST_ASSERT_EQUAL_INT(0, strspn(emptySet, "abc"));

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_ASSERT_EQUAL_INT(0, strcspn("\0abc", "abc"));
TEST_ASSERT_EQUAL_INT(0, strspn("\0abc", "abc"));

TEST_ASSERT_EQUAL_INT(0, strcspn("\0abc", ""));
TEST_ASSERT_EQUAL_INT(0, strspn("\0abc", ""));

/*
* In this cases strcspn look for strings which not equals in other hand strspn
* looking for strings which are equal
*/
TEST_ASSERT_EQUAL_INT(0, strcspn("a", "a"));
TEST_ASSERT_EQUAL_INT(0, strspn("a", "b"));

TEST_ASSERT_EQUAL_INT(0, strcspn("abc", "a"));
TEST_ASSERT_EQUAL_INT(0, strspn("abc", "b"));

TEST_ASSERT_EQUAL_INT(0, strcspn("abc", "abc1"));
TEST_ASSERT_EQUAL_INT(0, strspn("abc", "1"));
}


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

/* Checking if both functions recognize holder as different set of elements */
sz = sizeof(pangram) - 1;
TEST_ASSERT_EQUAL_INT(sz, strcspn(pangram, &holder[0]));
TEST_ASSERT_EQUAL_INT(0, strspn(pangram, &holder[0]));

memcpy(holder, pangram, sz + 1);

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

TEST_ASSERT_EQUAL_INT(0, strcspn(pangram, &holder[sz / 2]));
TEST_ASSERT_EQUAL_INT(1, strspn(pangram, &holder[sz / 2]));

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


/*
////////////////////////////////////////////////////////////////////////////////////
*/
Expand Down Expand Up @@ -286,6 +378,7 @@ TEST(string_chr, special)
TEST_ASSERT_EQUAL_STRING(NULL, memchr(specials, 'I', sz));
}


TEST(string_chr, ascii)
{
int sz, i;
Expand Down Expand Up @@ -313,35 +406,27 @@ TEST(string_chr, ascii)

TEST(string_chr, not_ascii)
{
const char notAsciiString[] = "♥♣♠◊⊗こんにちは❉❉⌨⌨⌨⌨⌨⌨⌨⌨❉❉♦x";
char notAsciiSet[129];
char charSet[129] = { 0 };
int sz, i;

/* Checking ability to read the chars out of ascii charset */
sz = sizeof(notAsciiString) - 1;
TEST_ASSERT_EQUAL_STRING("x", strchr(notAsciiString, 'x'));
TEST_ASSERT_EQUAL_STRING("x", strrchr(notAsciiString, 'x'));
TEST_ASSERT_EQUAL_STRING("x", memchr(notAsciiString, 'x', sz));

/* Checking out of ascii bytes */
for (i = 128; i <= 255; i++) {
notAsciiSet[i - 128] = i;
charSet[i - 128] = i;
}
notAsciiSet[128] = 0;

/* Testing capability of functions to hold and read not ascii set */
sz = sizeof(notAsciiSet);
TEST_ASSERT_EQUAL_STRING(notAsciiSet, strchr(notAsciiSet, notAsciiSet[0]));
TEST_ASSERT_EQUAL_STRING(notAsciiSet, strrchr(notAsciiSet, notAsciiSet[0]));
TEST_ASSERT_EQUAL_STRING(notAsciiSet, memchr(notAsciiSet, notAsciiSet[0], sz));

TEST_ASSERT_EQUAL_STRING(&notAsciiSet[64], strchr(notAsciiSet, notAsciiSet[64]));
TEST_ASSERT_EQUAL_STRING(&notAsciiSet[64], strrchr(notAsciiSet, notAsciiSet[64]));
TEST_ASSERT_EQUAL_STRING(&notAsciiSet[64], memchr(notAsciiSet, notAsciiSet[64], sz));

TEST_ASSERT_EQUAL_STRING(&notAsciiSet[sz - 1], strchr(notAsciiSet, notAsciiSet[sz - 1]));
TEST_ASSERT_EQUAL_STRING(&notAsciiSet[sz - 1], strrchr(notAsciiSet, notAsciiSet[sz - 1]));
TEST_ASSERT_EQUAL_STRING(&notAsciiSet[sz - 1], memchr(notAsciiSet, notAsciiSet[sz - 1], sz));
sz = sizeof(charSet);
TEST_ASSERT_EQUAL_STRING(charSet, strchr(charSet, charSet[0]));
TEST_ASSERT_EQUAL_STRING(charSet, strrchr(charSet, charSet[0]));
TEST_ASSERT_EQUAL_STRING(charSet, memchr(charSet, charSet[0], sz));

TEST_ASSERT_EQUAL_STRING(&charSet[64], strchr(charSet, charSet[64]));
TEST_ASSERT_EQUAL_STRING(&charSet[64], strrchr(charSet, charSet[64]));
TEST_ASSERT_EQUAL_STRING(&charSet[64], memchr(charSet, charSet[64], sz));

TEST_ASSERT_EQUAL_STRING(&charSet[sz - 1], strchr(charSet, charSet[sz - 1]));
TEST_ASSERT_EQUAL_STRING(&charSet[sz - 1], strrchr(charSet, charSet[sz - 1]));
TEST_ASSERT_EQUAL_STRING(&charSet[sz - 1], memchr(charSet, charSet[sz - 1], sz));
}


Expand Down Expand Up @@ -438,9 +523,14 @@ TEST_GROUP_RUNNER(string_len)
RUN_TEST_CASE(string_len, big);
}


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


Expand Down

0 comments on commit 2d941b2

Please sign in to comment.