#include "libft.h" #include "test_utils.h" _S_CRASH (ft_strlen_null, ft_strlen (NULL)) _S_CRASH (strlen_null, strlen (NULL)) static void _s_test_empty (void) { _s_check_eq ("ft_strlen", ft_strlen (""), 0); _s_check_eq ("libc strlen", strlen (""), 0); } static void _s_test_null (void) { _s_check_both_crash ("strlen NULL", _s_crash_ft_strlen_null, _s_crash_strlen_null); } static void _s_test_random (int n) { int i; int len; char *buf; char label[64]; for (i = 0; i < n; i++) { len = rand () % 10000; buf = malloc (len + 1); if (!buf) { _s_check ("malloc", 0); 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; 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)); _s_section ("ft_strlen"); _s_test_empty (); _s_test_null (); _s_test_random (100); _s_test_large (); _s_print_results (); return (_s_fail != 0); }