FxLibcTest/src/string/naive.c

91 lines
2.4 KiB
C

#include <ft/test.h>
#include <ft/all-tests.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
static void _ft_string_naive(ft_test *t)
{
char const *s1;
char s2[64];
char *s3;
s1 = "xyztuvxyztuv";
ft_assert(t, strchr(s1, 'z') == s1 + 2);
ft_assert(t, strchr(s1, 'w') == NULL);
ft_assert(t, strrchr(s1, 'u') == s1 + 10);
ft_assert(t, strrchr(s1, 'x') == s1 + 6);
ft_assert(t, strrchr(s1, 'w') == NULL);
ft_assert(t, strchrnul(s1, 't') == s1 + 3);
ft_assert(t, strchrnul(s1, 'w') == s1 + 12);
ft_assert(t, strcmp("xyz", "xyz") == 0);
ft_assert(t, strcmp("xyz\0t", "xyz\0v") == 0);
ft_assert(t, strcmp("xyz", "xyt") == 6);
ft_assert(t, strcmp("xyt", "xyz") == -6);
ft_assert(t, strcmp("ab", "abc") == -'c');
ft_assert(t, strcmp("", "") == 0);
ft_assert(t, strcmp("x", "") == 'x');
ft_assert(t, strncmp("xyz", "xyt", 2) == 0);
ft_assert(t, strncmp("xyz\0t", "xyz\0v", 5) == 0);
strcpy(s2, s1);
ft_assert(t, strcmp(s1, s2) == 0);
memset(s2, 0x55, sizeof s2);
strncpy(s2, s1, 10);
ft_assert(t, strcmp(s1, s2) != 0 && strncmp(s1, s2, 10) == 0);
strncpy(s2, s1, 15);
ft_assert(t, memcmp(s2, "xyztuvxyztuv\0\0\0", 15) == 0);
strncpy(s2, s1, 5);
s2[5] = 0;
strcat(s2, s1 + 5);
ft_assert(t, strcmp(s1, s2) == 0);
memset(s2, 0x55, sizeof s2);
strncpy(s2, s1, 4);
s2[4] = 0;
strncat(s2, s1 + 4, 4);
ft_assert(t, strcmp(s1, s2) != 0 && strncmp(s1, s2, 8) == 0);
ft_assert(t, strcmp(s2, "xyztuvxy") == 0);
s3 = strdup(s1);
ft_assert(t, strcmp(s1, s3) == 0);
free(s3);
s3 = strndup(s1, 5);
ft_assert(t, strcmp(s3, "xyztu") == 0);
free(s3);
ft_assert(t, strspn("abcbdbabed", "abcd") == 8);
ft_assert(t, strspn("abcbdbabed", "abcde") == 10);
ft_assert(t, strcspn("10234.283", "x.") == 5);
ft_assert(t, strcspn("10234.283", "x") == 9);
ft_assert(t, strpbrk(s1, "rstuv") == s1 + 3);
ft_assert(t, strpbrk(s1, "abc") == NULL);
ft_assert(t, strpbrk(s1, s1) == s1);
}
ft_test ft_string_naive = {
.name = "Naive string functions",
.function = _ft_string_naive,
};
static void _ft_string_strerror(ft_test *t)
{
ft_log(t, "0: %s\n", strerror(0));
ft_log(t, "EDOM: %s\n", strerror(EDOM));
ft_log(t, "EILSEQ: %s\n", strerror(EILSEQ));
ft_log(t, "ERANGE: %s\n", strerror(ERANGE));
ft_log(t, "-1: %s\n", strerror(-1));
ft_log(t, "999999: %s\n", strerror(999999));
}
ft_test ft_string_strerror = {
.name = "strerror messages",
.function = _ft_string_strerror,
};