Files
Nils O. Selåsdal 6d7b80a6d2 Build on osx
2025-07-16 00:50:07 +02:00

214 lines
4.7 KiB
C

#include <check.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include "ucore/string.h"
#include "ucore/utils.h"
START_TEST (test_getfields)
{
char str[] = "a;b;c";
char *letters[5] = {NULL};
int rc = uc_getfields(str, letters, 5, 0, ";");
ck_assert_int_eq(rc, 3);
ck_assert_str_eq("a", letters[0]);
ck_assert_str_eq("b", letters[1]);
ck_assert_str_eq("c", letters[2]);
}
END_TEST
START_TEST (test_getfields_consecutive)
{
char str[] = "a;;b;c;;;";
char *letters[7] = {NULL};
int rc = uc_getfields(str, letters, 5, 0, ";");
ck_assert_int_eq(rc, 5);
// This result is rather silly, but it's
// how getfields works with mflag=0
ck_assert_str_eq("a", letters[0]);
ck_assert_str_eq("", letters[1]);
ck_assert_str_eq("b", letters[2]);
ck_assert_str_eq("c", letters[3]);
ck_assert_str_eq(";;", letters[4]);
}
END_TEST
START_TEST (test_getfields_mflag)
{
char str[] = "a;b;c";
char *letters[5] = {NULL};
int rc = uc_getfields(str, letters, 5, 1, ";");
ck_assert_int_eq(rc, 3);
ck_assert_str_eq("a", letters[0]);
ck_assert_str_eq("b", letters[1]);
ck_assert_str_eq("c", letters[2]);
}
END_TEST
START_TEST (test_getfields_consecutive_mflag)
{
char str[] = "a;;b;c;;;";
char *letters[7] = {NULL};
int rc = uc_getfields(str, letters, 7, 1, ";");
ck_assert_int_eq(rc, 3);
// This result is rather silly, but it's
// how getfields works with mflag=0
ck_assert_str_eq("a", letters[0]);
ck_assert_str_eq("b", letters[1]);
ck_assert_str_eq("c", letters[2]);
}
END_TEST
START_TEST (test_getfields_too_many)
{
char str[] = "a\r\nb\r\nc\r\nd\r\ne";
char *letters[4] = {NULL};
int rc = uc_getfields(str, letters, 4, 0, "\r\n");
ck_assert_int_eq(rc, 4);
// This result is rather silly, but it's
// how getfields works with mflag=0
ck_assert_str_eq("a", letters[0]);
ck_assert_str_eq("", letters[1]);
ck_assert_str_eq("b", letters[2]);
ck_assert_str_eq("\nc\r\nd\r\ne", letters[3]);
}
END_TEST
START_TEST (test_getfields_too_many_mflag)
{
char str[] = "a\r\nb\r\nc\r\nd\r\ne";
char *letters[4] = {NULL};
int rc = uc_getfields(str, letters, 4, 1, "\r\n");
ck_assert_int_eq(rc, 4);
ck_assert_str_eq("a", letters[0]);
ck_assert_str_eq("b", letters[1]);
ck_assert_str_eq("c", letters[2]);
ck_assert_str_eq("d\r\ne", letters[3]);
}
END_TEST
START_TEST (test_getfields_empty)
{
char str[] = "";
char *letters[4] = {NULL};
int rc = uc_getfields(str, letters, 4, 0, ";\r\n");
ck_assert_int_eq(rc, 1);
ck_assert_str_eq("", letters[0]);
rc = uc_getfields(str, letters, 4, 1, ";\r\n");
ck_assert_int_eq(rc, 0);
}
END_TEST
START_TEST (test_gettokens)
{
char str[] = "a;b;c";
char *letters[5] = {NULL};
int rc = uc_gettokens(str, letters, 5,";");
ck_assert_int_eq(rc, 3);
ck_assert_str_eq("a", letters[0]);
ck_assert_str_eq("b", letters[1]);
ck_assert_str_eq("c", letters[2]);
}
END_TEST
START_TEST (test_gettokens_consecutive)
{
char str[] = "a;;;b;;c;";
char *letters[5] = {NULL};
int rc = uc_gettokens(str, letters, 5,";");
ck_assert_int_eq(rc, 3);
ck_assert_str_eq("a", letters[0]);
ck_assert_str_eq("b", letters[1]);
ck_assert_str_eq("c", letters[2]);
}
END_TEST
START_TEST (test_gettokens_empty)
{
char str[] = "";
char *letters[5] = {NULL};
int rc = uc_gettokens(str, letters, 5,";");
ck_assert_int_eq(rc, 0);
}
END_TEST
START_TEST (test_gettokens_quotes)
{
char str[] = "\"abc\";d;\"e \"";
char *letters[5] = {NULL};
int rc = uc_gettokens(str, letters, 5,";");
ck_assert_int_eq(rc, 3);
ck_assert_str_eq("abc", letters[0]);
ck_assert_str_eq("d", letters[1]);
ck_assert_str_eq("e ", letters[2]);
}
END_TEST
START_TEST (test_gettokens_double_quotes)
{
char str[] = "\"\"abc\"\";d;\"e\"\"f\"\"\"";
char *letters[5] = {NULL};
int rc = uc_gettokens(str, letters, 5,";");
ck_assert_int_eq(rc, 3);
ck_assert_str_eq("abc", letters[0]);
ck_assert_str_eq("d", letters[1]);
ck_assert_str_eq("e\"f\"", letters[2]);
}
END_TEST
Suite *string_suite(void)
{
Suite *s = suite_create("string");
TCase *tc = tcase_create("string");
tcase_add_test(tc, test_getfields);
tcase_add_test(tc, test_getfields_consecutive);
tcase_add_test(tc, test_getfields_mflag);
tcase_add_test(tc, test_getfields_consecutive_mflag);
tcase_add_test(tc, test_getfields_too_many);
tcase_add_test(tc, test_getfields_too_many_mflag);
tcase_add_test(tc, test_getfields_empty);
tcase_add_test(tc, test_gettokens);
tcase_add_test(tc, test_gettokens_consecutive);
tcase_add_test(tc, test_gettokens_empty);
tcase_add_test(tc, test_gettokens_quotes);
tcase_add_test(tc, test_gettokens_double_quotes);
suite_add_tcase(s, tc);
return s;
}