From 2d941b20b1f3927d376a56a0a3a84dcd75bb0e60 Mon Sep 17 00:00:00 2001 From: Damian Modzelewski Date: Mon, 22 May 2023 13:33:10 +0200 Subject: [PATCH] libc: string.h: add review corrections JIRA: CI-232 --- libc/string_lenchr.c | 178 ++++++++++++++++++++++++++++++++----------- 1 file changed, 134 insertions(+), 44 deletions(-) diff --git a/libc/string_lenchr.c b/libc/string_lenchr.c index 060a2881c..bbb2e268a 100644 --- a/libc/string_lenchr.c +++ b/libc/string_lenchr.c @@ -21,18 +21,13 @@ #include -#include #include -#include #include -#include #include -#include #include #define BUFF_SIZE 128 - TEST_GROUP(string_len); TEST_GROUP(string_chr); TEST_GROUP(string_spn); @@ -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)); } @@ -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)); @@ -157,6 +142,11 @@ TEST(string_len, big) } +/* +//////////////////////////////////////////////////////////////////////////////////// +*/ + + TEST_SETUP(string_spn) { } @@ -166,6 +156,7 @@ TEST_TEAR_DOWN(string_spn) { } + TEST(string_spn, ascii) { char asciiSet[BUFF_SIZE] = { 0 }; @@ -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])); +} + + /* //////////////////////////////////////////////////////////////////////////////////// */ @@ -286,6 +378,7 @@ TEST(string_chr, special) TEST_ASSERT_EQUAL_STRING(NULL, memchr(specials, 'I', sz)); } + TEST(string_chr, ascii) { int sz, i; @@ -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(¬AsciiSet[64], strchr(notAsciiSet, notAsciiSet[64])); - TEST_ASSERT_EQUAL_STRING(¬AsciiSet[64], strrchr(notAsciiSet, notAsciiSet[64])); - TEST_ASSERT_EQUAL_STRING(¬AsciiSet[64], memchr(notAsciiSet, notAsciiSet[64], sz)); - - TEST_ASSERT_EQUAL_STRING(¬AsciiSet[sz - 1], strchr(notAsciiSet, notAsciiSet[sz - 1])); - TEST_ASSERT_EQUAL_STRING(¬AsciiSet[sz - 1], strrchr(notAsciiSet, notAsciiSet[sz - 1])); - TEST_ASSERT_EQUAL_STRING(¬AsciiSet[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)); } @@ -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); }