diff options
| author | Thomas Vanbesien <tvanbesi@proton.me> | 2026-02-21 12:39:20 +0100 |
|---|---|---|
| committer | Thomas Vanbesien <tvanbesi@proton.me> | 2026-02-21 12:39:34 +0100 |
| commit | d699849b2360f90c61f645c5d4d4232cd3e1c962 (patch) | |
| tree | c929ec20ca3b16fe3d34bd75e412ca49f7420125 /tests/test_strlen.c | |
| download | Libft-d699849b2360f90c61f645c5d4d4232cd3e1c962.tar.gz Libft-d699849b2360f90c61f645c5d4d4232cd3e1c962.zip | |
Initial commit: libft Part 1 with tests and documentation
Reimplements 24 libc functions with Doxygen-documented header
and test suite comparing against libc.
Diffstat (limited to 'tests/test_strlen.c')
| -rw-r--r-- | tests/test_strlen.c | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/tests/test_strlen.c b/tests/test_strlen.c new file mode 100644 index 0000000..ef569ff --- /dev/null +++ b/tests/test_strlen.c @@ -0,0 +1,109 @@ +#include "../libft.h" +#include "test_utils.h" + +static void +_s_call_ft_strlen_null (void) +{ + _s_sink = ft_strlen (NULL); +} + +static void +_s_call_strlen_null (void) +{ + _s_sink = strlen (NULL); +} + +static void +_s_test_empty (void) +{ + printf ("-- empty string --\n"); + _s_check_eq ("ft_strlen", ft_strlen (""), 0); + _s_check_eq ("libc strlen", strlen (""), 0); +} + +static void +_s_test_null (void) +{ + int ft_crashed; + int libc_crashed; + + printf ("-- NULL --\n"); + ft_crashed = _s_crashes (_s_call_ft_strlen_null); + libc_crashed = _s_crashes (_s_call_strlen_null); + if (ft_crashed && libc_crashed) + { + printf (" PASS both crash on NULL\n"); + _s_pass++; + } + else if (ft_crashed == libc_crashed) + { + printf (" PASS both behave the same on NULL (no crash)\n"); + _s_pass++; + } + else + { + printf (" FAIL ft_crashed=%d libc_crashed=%d\n", ft_crashed, + libc_crashed); + _s_fail++; + } +} + +static void +_s_test_random (int n) +{ + int i; + int len; + char *buf; + char label[64]; + + printf ("-- %d randomized tests --\n", n); + for (i = 0; i < n; i++) + { + len = rand () % 10000; + buf = malloc (len + 1); + if (!buf) + { + printf (" FAIL malloc\n"); + _s_fail++; + return; + } + memset (buf, 'A' + (i % 26), len); + buf[len] = '\0'; + snprintf (label, sizeof (label), "random len=%d", len); + _s_check_eq (label, ft_strlen (buf), strlen (buf)); + free (buf); + } +} + +static void +_s_test_large (void) +{ + size_t len; + char *buf; + + printf ("-- large string (100 MB) --\n"); + len = 100 * 1024 * 1024; + buf = malloc (len + 1); + if (!buf) + { + printf (" SKIP could not allocate %zu bytes\n", len); + return; + } + memset (buf, 'X', len); + buf[len] = '\0'; + _s_check_eq ("100 MB string", ft_strlen (buf), len); + free (buf); +} + +int +main (void) +{ + srand (time (NULL)); + printf ("=== ft_strlen ===\n"); + _s_test_empty (); + _s_test_null (); + _s_test_random (100); + _s_test_large (); + _s_print_results (); + return (_s_fail != 0); +} |
