From d5a5ffe87492a57e864a8a995c2ad813e8b34d51 Mon Sep 17 00:00:00 2001 From: Damian Modzelewski Date: Fri, 28 Apr 2023 09:55:27 +0200 Subject: [PATCH] libc: string.h: add cmp functions tests JIRA: CI-231 --- libc/main.c | 1 + libc/string_cmp.c | 127 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 128 insertions(+) create mode 100644 libc/string_cmp.c diff --git a/libc/main.c b/libc/main.c index 9236ea1c8..9a91c6c0d 100644 --- a/libc/main.c +++ b/libc/main.c @@ -54,6 +54,7 @@ void runner(void) RUN_TEST_GROUP(stdio_scanf_squareBrackets); RUN_TEST_GROUP(stdio_scanf_rest); RUN_TEST_GROUP(string_chr); + RUN_TEST_GROUP(string_cmp); } diff --git a/libc/string_cmp.c b/libc/string_cmp.c new file mode 100644 index 000000000..000bab792 --- /dev/null +++ b/libc/string_cmp.c @@ -0,0 +1,127 @@ +/* + * Phoenix-RTOS + * + * POSIX.1-2017 standard library functions tests + * HEADER: + * - string.h + * TESTED: + * - memcmp() + * - strcmp() + * - strncmp() + * - strcoll() + * + * Copyright 2023 Phoenix Systems + * Author: Damian Modzelewski + * + * This file is part of Phoenix-RTOS. + * + * %LICENSE% + */ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#define BUFF_SIZE 128 + + +TEST_GROUP(string_cmp); + + +TEST_SETUP(string_cmp) +{ +} + + +TEST_TEAR_DOWN(string_cmp) +{ +} + + +TEST(string_cmp, cmp) +{ + char asciiSet[BUFF_SIZE] = { 0 }, + nonZeroAsciiSet[BUFF_SIZE] = { 0 }, + empty[BUFF_SIZE] = { 0 }; + int i; + + for (i = 1; i < BUFF_SIZE; i++) { + nonZeroAsciiSet[i - 1] = i; + asciiSet[i] = i; + } + errno = 0; + + TEST_ASSERT_EQUAL_INT(0, memcmp(asciiSet, asciiSet, BUFF_SIZE)); + TEST_ASSERT_EQUAL_INT(0, strncmp(asciiSet, asciiSet, BUFF_SIZE)); + TEST_ASSERT_EQUAL_INT(0, strcmp(asciiSet, asciiSet)); + TEST_ASSERT_EQUAL_INT(0, strcoll(asciiSet, asciiSet)); + TEST_ASSERT_EQUAL_INT(0, errno); + + TEST_ASSERT_LESS_THAN_INT(0, memcmp(asciiSet, nonZeroAsciiSet, BUFF_SIZE)); + TEST_ASSERT_LESS_THAN_INT(0, strncmp(asciiSet, nonZeroAsciiSet, BUFF_SIZE)); + TEST_ASSERT_LESS_THAN_INT(0, strcmp(asciiSet, nonZeroAsciiSet)); + TEST_ASSERT_LESS_THAN_INT(0, strcoll(asciiSet, nonZeroAsciiSet)); + TEST_ASSERT_EQUAL_INT(0, errno); + + TEST_ASSERT_GREATER_THAN_INT(0, memcmp(nonZeroAsciiSet, asciiSet, BUFF_SIZE)); + TEST_ASSERT_GREATER_THAN_INT(0, strncmp(nonZeroAsciiSet, asciiSet, BUFF_SIZE)); + TEST_ASSERT_GREATER_THAN_INT(0, strcmp(nonZeroAsciiSet, asciiSet)); + TEST_ASSERT_GREATER_THAN_INT(0, strcoll(nonZeroAsciiSet, asciiSet)); + TEST_ASSERT_EQUAL_INT(0, errno); + + TEST_ASSERT_LESS_THAN_INT(0, memcmp(empty, asciiSet, BUFF_SIZE)); + TEST_ASSERT_EQUAL_INT(0, strncmp(empty, asciiSet, BUFF_SIZE)); + TEST_ASSERT_EQUAL_INT(0, strcmp(empty, asciiSet)); + TEST_ASSERT_EQUAL_INT(0, strcoll(empty, asciiSet)); + TEST_ASSERT_EQUAL_INT(0, errno); + + TEST_ASSERT_LESS_THAN_INT(0, memcmp(empty, nonZeroAsciiSet, BUFF_SIZE)); + TEST_ASSERT_LESS_THAN_INT(0, strncmp(empty, nonZeroAsciiSet, BUFF_SIZE)); + TEST_ASSERT_LESS_THAN_INT(0, strcmp(empty, nonZeroAsciiSet)); + TEST_ASSERT_LESS_THAN_INT(0, strcoll(empty, nonZeroAsciiSet)); + TEST_ASSERT_EQUAL_INT(0, errno); + + TEST_ASSERT_GREATER_THAN_INT(0, memcmp(asciiSet, empty, BUFF_SIZE)); + TEST_ASSERT_EQUAL_INT(0, strncmp(asciiSet, empty, BUFF_SIZE)); + TEST_ASSERT_EQUAL_INT(0, strcmp(asciiSet, empty)); + TEST_ASSERT_EQUAL_INT(0, strcoll(asciiSet, empty)); + TEST_ASSERT_EQUAL_INT(0, errno); + + TEST_ASSERT_EQUAL_INT(0, memcmp(empty, empty, BUFF_SIZE)); + TEST_ASSERT_EQUAL_INT(0, strncmp(empty, empty, BUFF_SIZE)); + TEST_ASSERT_EQUAL_INT(0, strcmp(empty, empty)); + TEST_ASSERT_EQUAL_INT(0, strcoll(empty, empty)); + TEST_ASSERT_EQUAL_INT(0, errno); + + TEST_ASSERT_LESS_THAN_INT(0, memcmp(&asciiSet[BUFF_SIZE / 2], &nonZeroAsciiSet[BUFF_SIZE / 2], BUFF_SIZE / 2)); + TEST_ASSERT_LESS_THAN_INT(0, strncmp(&asciiSet[BUFF_SIZE / 2], &nonZeroAsciiSet[BUFF_SIZE / 2], BUFF_SIZE / 2)); + TEST_ASSERT_LESS_THAN_INT(0, strcmp(&asciiSet[BUFF_SIZE / 2], &nonZeroAsciiSet[BUFF_SIZE / 2])); + TEST_ASSERT_LESS_THAN_INT(0, strcoll(&asciiSet[BUFF_SIZE / 2], &nonZeroAsciiSet[BUFF_SIZE / 2])); + TEST_ASSERT_EQUAL_INT(0, errno); + + TEST_ASSERT_GREATER_THAN_INT(0, memcmp(&asciiSet[sizeof(asciiSet) - 1], &nonZeroAsciiSet[sizeof(nonZeroAsciiSet) - 1], 1)); + TEST_ASSERT_GREATER_THAN_INT(0, strncmp(&asciiSet[sizeof(asciiSet) - 1], &nonZeroAsciiSet[sizeof(nonZeroAsciiSet) - 1], 1)); + TEST_ASSERT_GREATER_THAN_INT(0, strcmp(&asciiSet[sizeof(asciiSet) - 1], &nonZeroAsciiSet[sizeof(nonZeroAsciiSet) - 1])); + TEST_ASSERT_GREATER_THAN_INT(0, strcoll(&asciiSet[sizeof(asciiSet) - 1], &nonZeroAsciiSet[sizeof(nonZeroAsciiSet) - 1])); + TEST_ASSERT_EQUAL_INT(0, errno); + + TEST_ASSERT_LESS_THAN_INT(0, memcmp(&nonZeroAsciiSet[BUFF_SIZE - 1], &asciiSet[BUFF_SIZE - 1], 1)); + TEST_ASSERT_LESS_THAN_INT(0, strncmp(&nonZeroAsciiSet[BUFF_SIZE - 1], &asciiSet[BUFF_SIZE - 1], 1)); + + TEST_ASSERT_EQUAL_INT(0, memcmp(&nonZeroAsciiSet[sizeof(nonZeroAsciiSet) - 1], &nonZeroAsciiSet[sizeof(nonZeroAsciiSet) - 1], BUFF_SIZE - 1)); + TEST_ASSERT_EQUAL_INT(0, strncmp(&nonZeroAsciiSet[sizeof(nonZeroAsciiSet) - 1], &nonZeroAsciiSet[sizeof(nonZeroAsciiSet) - 1], BUFF_SIZE - 1)); +} + + +TEST_GROUP_RUNNER(string_cmp) +{ + RUN_TEST_CASE(string_cmp, cmp); +} \ No newline at end of file