Compare commits
2 commits
8016f64db4
...
eece39c2ed
| Author | SHA1 | Date | |
|---|---|---|---|
| eece39c2ed | |||
| 0d7cfcc8d6 |
3 changed files with 122 additions and 42 deletions
30
axl_string.c
30
axl_string.c
|
|
@ -82,12 +82,12 @@ i8* axl_strncat(i8* dst, const i8* src, u32 n) //n actually means "not more than
|
|||
|
||||
i32 axl_strcmp(const i8* s1, const i8* s2)
|
||||
{
|
||||
if (!s1 || !s2)
|
||||
if(!s1 || !s2)
|
||||
{
|
||||
return (s1 == s2) ? 0 : (!s1 ? -1 : 1);
|
||||
}
|
||||
|
||||
for (;; s1++, s2++)
|
||||
for(;; s1++, s2++)
|
||||
{
|
||||
u8 c1 = *(const u8*)s1;
|
||||
u8 c2 = *(const u8*)s2;
|
||||
|
|
@ -103,17 +103,17 @@ i32 axl_strcmp(const i8* s1, const i8* s2)
|
|||
|
||||
i32 axl_strncmp(const i8* s1, const i8* s2, u32 n)
|
||||
{
|
||||
if (!s1 || !s2)
|
||||
if(!s1 || !s2)
|
||||
{
|
||||
return (s1 == s2) ? 0 : (!s1 ? -1 : 1);
|
||||
}
|
||||
|
||||
for (u32 i = 0; i < n; s1++, s2++)
|
||||
for(u32 i = 0; i < n; s1++, s2++, i++)
|
||||
{
|
||||
u8 c1 = *(const u8*)s1;
|
||||
u8 c2 = *(const u8*)s2;
|
||||
|
||||
if (c1 != c2 || c1 == '\0' || c2 == '\0')
|
||||
if(c1 != c2 || c1 == '\0' || c2 == '\0')
|
||||
{
|
||||
return c1 - c2;
|
||||
}
|
||||
|
|
@ -124,16 +124,18 @@ i32 axl_strncmp(const i8* s1, const i8* s2, u32 n)
|
|||
|
||||
const i8* axl_strchr(const i8* str, i8 c)
|
||||
{
|
||||
u32 i = 0;
|
||||
|
||||
while(str[i] != '\0')
|
||||
if(!str)
|
||||
{
|
||||
if(str[i] == c)
|
||||
{
|
||||
return str + i;
|
||||
}
|
||||
i++;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
for(; *str != '\0'; ++str)
|
||||
{
|
||||
if(*str == c)
|
||||
{
|
||||
return str;
|
||||
}
|
||||
}
|
||||
|
||||
return (c == '\0') ? str : NULL;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ i8* axl_strncpy(i8* dst, const i8* src, u32 n);
|
|||
i8* axl_strcat(i8* dst, const i8* src);
|
||||
i8* axl_strncat(i8* dst, const i8* src, u32 n);
|
||||
i32 axl_strcmp(const i8* s1, const i8* s2);
|
||||
i32 axl_strncmp(const i8* s1, const i8* s2, u32 n);
|
||||
const i8* axl_strchr(const i8* str, i8 c);
|
||||
|
||||
#endif // AXL_STRING
|
||||
|
|
|
|||
|
|
@ -24,6 +24,11 @@ KOAN(strlen_with_special_chars)
|
|||
ASSERT_UINT_EQ(12, axl_strlen(s));
|
||||
}
|
||||
|
||||
KOAN(strlen_null)
|
||||
{
|
||||
ASSERT_UINT_EQ(0, axl_strlen(NULL));
|
||||
}
|
||||
|
||||
KOAN(strcpy_basic)
|
||||
{
|
||||
i8* src = (i8*)"test";
|
||||
|
|
@ -51,6 +56,17 @@ KOAN(strcpy_empty)
|
|||
axl_free(dst);
|
||||
}
|
||||
|
||||
KOAN(strcpy_null_dst)
|
||||
{
|
||||
i8 buf[10];
|
||||
ASSERT_PTR_EQ(buf, axl_strcpy(buf, NULL));
|
||||
}
|
||||
|
||||
KOAN(strcpy_null_src)
|
||||
{
|
||||
ASSERT_NULL(axl_strcpy(NULL, (const i8*)"test"));
|
||||
}
|
||||
|
||||
KOAN(strncpy_exact)
|
||||
{
|
||||
i8* src = (i8*)"hello";
|
||||
|
|
@ -91,6 +107,22 @@ KOAN(strncpy_pads_with_nulls)
|
|||
axl_free(dst);
|
||||
}
|
||||
|
||||
KOAN(strncpy_zero_n)
|
||||
{
|
||||
i8 dst[10] = {'w'};
|
||||
axl_strncpy(dst, (const i8*)"test", 0);
|
||||
ASSERT_INT_EQ('w', dst[0]);
|
||||
}
|
||||
|
||||
KOAN(strncpy_embedded_null)
|
||||
{
|
||||
i8* dst = (i8*)axl_malloc(10);
|
||||
i8* src = (i8*)"ab\0cde";
|
||||
axl_strncpy(dst, src, 5);
|
||||
ASSERT_TRUE(memcmp(dst, "ab\0\0\0", 5) == 0);
|
||||
axl_free(dst);
|
||||
}
|
||||
|
||||
KOAN(strcat_basic)
|
||||
{
|
||||
i8* dst = (i8*)axl_malloc(20);
|
||||
|
|
@ -152,11 +184,18 @@ KOAN(strncat_always_null_terminates)
|
|||
i8* result = axl_strncat(dst, (i8*)"123456789", 3);
|
||||
ASSERT_PTR_EQ(dst, result);
|
||||
ASSERT_STR_EQ("test123", (const char*)dst);
|
||||
ASSERT_INT_EQ(0, (int)dst[7]); // Ensure null at position 7
|
||||
ASSERT_INT_EQ(0, (int)dst[7]);
|
||||
|
||||
axl_free(dst);
|
||||
}
|
||||
|
||||
KOAN(strncat_zero_n)
|
||||
{
|
||||
i8 dst[10] = "hi";
|
||||
axl_strncat(dst, (const i8*)"world", 0);
|
||||
ASSERT_STR_EQ("hi", (char*)dst);
|
||||
}
|
||||
|
||||
KOAN(strcmp_equal)
|
||||
{
|
||||
i8* s1 = (i8*)"hello";
|
||||
|
|
@ -199,40 +238,79 @@ KOAN(strcmp_first_empty)
|
|||
ASSERT_TRUE(axl_strcmp(s1, s2) < 0);
|
||||
}
|
||||
|
||||
KOAN(strlen_null)
|
||||
{
|
||||
ASSERT_UINT_EQ(0, axl_strlen(NULL));
|
||||
}
|
||||
|
||||
KOAN(strcpy_null_dst)
|
||||
{
|
||||
i8 buf[10];
|
||||
ASSERT_PTR_EQ(buf, axl_strcpy(buf, NULL));
|
||||
}
|
||||
|
||||
KOAN(strcpy_null_src)
|
||||
{
|
||||
ASSERT_NULL(axl_strcpy(NULL, (const i8*)"test"));
|
||||
}
|
||||
|
||||
KOAN(strncpy_zero_n)
|
||||
KOAN(strncmp_equal_shorter_n)
|
||||
{
|
||||
i8 dst[10] = {'w'};
|
||||
axl_strncpy(dst, (const i8*)"test", 0);
|
||||
ASSERT_INT_EQ('w', dst[0]);
|
||||
i8* s1 = (i8*)"hello";
|
||||
i8* s2 = (i8*)"help!";
|
||||
ASSERT_INT_EQ(0, axl_strncmp(s1, s2, 3));
|
||||
}
|
||||
|
||||
KOAN(strncat_zero_n)
|
||||
KOAN(strncmp_equal_longer_n)
|
||||
{
|
||||
i8 dst[10] = "hi";
|
||||
axl_strncat(dst, (const i8*)"world", 0);
|
||||
ASSERT_STR_EQ("hi", (char*)dst);
|
||||
i8* s1 = (i8*)"test";
|
||||
i8* s2 = (i8*)"test";
|
||||
ASSERT_INT_EQ(0, axl_strncmp(s1, s2, 10));
|
||||
}
|
||||
|
||||
KOAN(strncmp_differs_at_n)
|
||||
{
|
||||
i8* s1 = (i8*)"hello";
|
||||
i8* s2 = (i8*)"helma";
|
||||
ASSERT_TRUE(axl_strncmp(s1, s2, 5) < 0);
|
||||
}
|
||||
|
||||
KOAN(strncmp_zero_n)
|
||||
{
|
||||
i8* s1 = (i8*)"hello";
|
||||
i8* s2 = (i8*)"world";
|
||||
ASSERT_INT_EQ(0, axl_strncmp(s1, s2, 0));
|
||||
}
|
||||
|
||||
KOAN(strncmp_null_ptrs)
|
||||
{
|
||||
ASSERT_INT_EQ(0, axl_strncmp(NULL, NULL, 5));
|
||||
ASSERT_TRUE(axl_strncmp(NULL, (i8*)"test", 5) < 0);
|
||||
ASSERT_TRUE(axl_strncmp((i8*)"test", NULL, 5) > 0);
|
||||
}
|
||||
|
||||
KOAN(strchr_null)
|
||||
{
|
||||
ASSERT_NULL(axl_strchr(NULL, 'a'));
|
||||
}
|
||||
|
||||
KOAN(strchr_empty)
|
||||
{
|
||||
i8 str[] = "";
|
||||
ASSERT_NULL(axl_strchr(str, 'a'));
|
||||
}
|
||||
|
||||
KOAN(strchr_not_found)
|
||||
{
|
||||
i8 str[] = "hello";
|
||||
ASSERT_NULL(axl_strchr(str, 'x'));
|
||||
}
|
||||
|
||||
KOAN(strchr_first_char)
|
||||
{
|
||||
i8 str[] = "hello";
|
||||
ASSERT_PTR_EQ(str, axl_strchr(str, 'h'));
|
||||
}
|
||||
|
||||
KOAN(strchr_last_char)
|
||||
{
|
||||
i8 str[] = "hello";
|
||||
ASSERT_PTR_EQ(str + 4, axl_strchr(str, 'o'));
|
||||
}
|
||||
|
||||
KOAN(strchr_null_terminator)
|
||||
{
|
||||
i8 str[] = "hello";
|
||||
ASSERT_PTR_EQ(str + 5, axl_strchr(str, '\0'));
|
||||
}
|
||||
|
||||
KOAN(strchr_returns_proper_ptr)
|
||||
{
|
||||
i8 str[] = "hi Mark";
|
||||
|
||||
ASSERT_PTR_EQ(str + 0, axl_strchr(str, 'h'));
|
||||
ASSERT_PTR_EQ(str + 1, axl_strchr(str, 'i'));
|
||||
ASSERT_PTR_EQ(str + 2, axl_strchr(str, ' '));
|
||||
|
|
@ -240,9 +318,8 @@ KOAN(strchr_returns_proper_ptr)
|
|||
ASSERT_PTR_EQ(str + 4, axl_strchr(str, 'a'));
|
||||
ASSERT_PTR_EQ(str + 5, axl_strchr(str, 'r'));
|
||||
ASSERT_PTR_EQ(str + 6, axl_strchr(str, 'k'));
|
||||
|
||||
ASSERT_NULL(axl_strchr(str, '\0'));
|
||||
ASSERT_NULL(axl_strchr(str, 'm'));
|
||||
ASSERT_PTR_EQ(str + 7, axl_strchr(str, '\0'));
|
||||
}
|
||||
|
||||
int main(void)
|
||||
|
|
|
|||
Loading…
Reference in a new issue