blob: 7f645f40829c58b6706a3d0718e045e385d148b8 [file] [log] [blame]
/*
* Copyright (C) 2019 Tomohiro Kusumi <tkusumi@netbsd.org>
*/
#include "../unittest.h"
#ifndef CONFIG_STRSEP
#include "../../oslib/strsep.h"
#else
#include <string.h>
#endif
/*
* strsep(3) - "If *stringp is NULL, the strsep() function returns NULL and does
* nothing else."
*/
static void test_strsep_1(void)
{
char *string = NULL;
const char *p;
p = strsep(&string, "");
CU_ASSERT_EQUAL(p, NULL);
CU_ASSERT_EQUAL(string, NULL);
p = strsep(&string, "ABC");
CU_ASSERT_EQUAL(p, NULL);
CU_ASSERT_EQUAL(string, NULL);
}
/*
* strsep(3) - "In case no delimiter was found, the token is taken to be the
* entire string *stringp, and *stringp is made NULL."
*/
static void test_strsep_2(void)
{
char src[] = "ABCDEFG";
char *string = src;
const char *p;
p = strsep(&string, "");
CU_ASSERT_EQUAL(p, src);
CU_ASSERT_EQUAL(*p, 'A');
CU_ASSERT_EQUAL(string, NULL);
string = src;
p = strsep(&string, "@");
CU_ASSERT_EQUAL(p, src);
CU_ASSERT_EQUAL(*p, 'A');
CU_ASSERT_EQUAL(string, NULL);
}
/*
* strsep(3) - "This token is terminated with a '\0' character (by overwriting
* the delimiter) and *stringp is updated to point past the token."
*/
static void test_strsep_3(void)
{
char src[] = "ABCDEFG";
char *string = src;
const char *p;
p = strsep(&string, "ABC");
CU_ASSERT_EQUAL(p, &src[0]);
CU_ASSERT_EQUAL(*p, '\0');
CU_ASSERT_EQUAL(strcmp(string, "BCDEFG"), 0);
CU_ASSERT_EQUAL(*string, 'B');
p = strsep(&string, "ABC");
CU_ASSERT_EQUAL(p, &src[1]);
CU_ASSERT_EQUAL(*p, '\0');
CU_ASSERT_EQUAL(strcmp(string, "CDEFG"), 0);
CU_ASSERT_EQUAL(*string, 'C');
p = strsep(&string, "ABC");
CU_ASSERT_EQUAL(p, &src[2]);
CU_ASSERT_EQUAL(*p, '\0');
CU_ASSERT_EQUAL(strcmp(string, "DEFG"), 0);
CU_ASSERT_EQUAL(*string, 'D');
p = strsep(&string, "ABC");
CU_ASSERT_EQUAL(p, &src[3]);
CU_ASSERT_EQUAL(*p, 'D');
CU_ASSERT_EQUAL(string, NULL);
}
static struct fio_unittest_entry tests[] = {
{
.name = "strsep/1",
.fn = test_strsep_1,
},
{
.name = "strsep/2",
.fn = test_strsep_2,
},
{
.name = "strsep/3",
.fn = test_strsep_3,
},
{
.name = NULL,
},
};
CU_ErrorCode fio_unittest_oslib_strsep(void)
{
return fio_unittest_add_suite("oslib/strsep.c", NULL, NULL, tests);
}