forked from enlightenment/efl
eina_slice: fix multi-byte find function, add tests.
This commit is contained in:
parent
ae83b96030
commit
9944c164bd
|
@ -155,13 +155,13 @@ eina_slice_find(const Eina_Slice slice, const Eina_Slice needle)
|
|||
if (slice.len == 0) return NULL;
|
||||
if (needle.len == 0) return NULL;
|
||||
if (slice.len < needle.len) return NULL;
|
||||
if (slice.len == 1) return eina_slice_strchr(slice, needle.bytes[0]);
|
||||
if (needle.len == 1) return eina_slice_strchr(slice, needle.bytes[0]);
|
||||
if ((slice.len == needle.len) &&
|
||||
(memcmp(slice.mem, needle.mem, needle.len) == 0))
|
||||
return slice.mem;
|
||||
|
||||
s.mem = slice.mem;
|
||||
s.len = slice.len - needle.len;
|
||||
s.len = slice.len - (needle.len - 1);
|
||||
|
||||
c = needle.bytes[0];
|
||||
n.mem = (const void *)(needle.bytes + 1);
|
||||
|
|
|
@ -209,6 +209,59 @@ START_TEST(eina_test_slice_print)
|
|||
}
|
||||
END_TEST
|
||||
|
||||
START_TEST(eina_test_slice_find)
|
||||
{
|
||||
Eina_Slice slice = EINA_SLICE_STR_LITERAL("abcdef");
|
||||
const char *p;
|
||||
|
||||
p = eina_slice_find(slice, (Eina_Slice)EINA_SLICE_STR_LITERAL("a"));
|
||||
fail_if(p == NULL);
|
||||
ck_assert_str_eq(p, (const char *)slice.bytes);
|
||||
|
||||
p = eina_slice_find(slice, (Eina_Slice)EINA_SLICE_STR_LITERAL("ab"));
|
||||
fail_if(p == NULL);
|
||||
ck_assert_str_eq(p, (const char *)slice.bytes);
|
||||
|
||||
p = eina_slice_find(slice, (Eina_Slice)EINA_SLICE_STR_LITERAL("abc"));
|
||||
fail_if(p == NULL);
|
||||
ck_assert_str_eq(p, (const char *)slice.bytes);
|
||||
|
||||
p = eina_slice_find(slice, (Eina_Slice)EINA_SLICE_STR_LITERAL("f"));
|
||||
fail_if(p == NULL);
|
||||
ck_assert_str_eq(p, (const char *)slice.bytes + strlen("abcde"));
|
||||
|
||||
p = eina_slice_find(slice, (Eina_Slice)EINA_SLICE_STR_LITERAL("ef"));
|
||||
fail_if(p == NULL);
|
||||
ck_assert_str_eq(p, (const char *)slice.bytes + strlen("abcd"));
|
||||
|
||||
p = eina_slice_find(slice, (Eina_Slice)EINA_SLICE_STR_LITERAL("def"));
|
||||
fail_if(p == NULL);
|
||||
ck_assert_str_eq(p, (const char *)slice.bytes + strlen("abc"));
|
||||
|
||||
p = eina_slice_find(slice, slice);
|
||||
fail_if(p == NULL);
|
||||
ck_assert_str_eq(p, (const char *)slice.bytes);
|
||||
|
||||
p = eina_slice_find(slice, (Eina_Slice)EINA_SLICE_STR_LITERAL("x"));
|
||||
fail_unless(p == NULL);
|
||||
|
||||
p = eina_slice_find(slice, (Eina_Slice)EINA_SLICE_STR_LITERAL("xyz"));
|
||||
fail_unless(p == NULL);
|
||||
|
||||
p = eina_slice_find(slice, (Eina_Slice)EINA_SLICE_STR_LITERAL("xa"));
|
||||
fail_unless(p == NULL);
|
||||
|
||||
p = eina_slice_find(slice, (Eina_Slice)EINA_SLICE_STR_LITERAL("xb"));
|
||||
fail_unless(p == NULL);
|
||||
|
||||
p = eina_slice_find(slice, (Eina_Slice)EINA_SLICE_STR_LITERAL("abcdefgh"));
|
||||
fail_unless(p == NULL);
|
||||
|
||||
p = eina_slice_find(slice, (Eina_Slice)EINA_SLICE_STR_LITERAL(""));
|
||||
fail_unless(p == NULL);
|
||||
}
|
||||
END_TEST
|
||||
|
||||
void
|
||||
eina_test_slice(TCase *tc)
|
||||
{
|
||||
|
@ -216,4 +269,5 @@ eina_test_slice(TCase *tc)
|
|||
tcase_add_test(tc, eina_test_slice_ro);
|
||||
tcase_add_test(tc, eina_test_slice_rw);
|
||||
tcase_add_test(tc, eina_test_slice_print);
|
||||
tcase_add_test(tc, eina_test_slice_find);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue