#include "libft.h" #include "test_utils.h" _S_CRASH (ft_strjoin_null_s1, ft_strjoin (NULL, "hello")) _S_CRASH (ft_strjoin_null_s2, ft_strjoin ("hello", NULL)) _S_CRASH (ft_strjoin_null_both, ft_strjoin (NULL, NULL)) static void _s_test_strjoin (void) { int i; char label[128]; _s_section ("ft_strjoin"); /* NULL crashes */ _s_check ("NULL s1 crashes", _s_crashes (_s_crash_ft_strjoin_null_s1)); _s_check ("NULL s2 crashes", _s_crashes (_s_crash_ft_strjoin_null_s2)); _s_check ("NULL both crashes", _s_crashes (_s_crash_ft_strjoin_null_both)); /* two normal strings */ { char *p = ft_strjoin ("hello ", "world"); _s_check ("basic", p && strcmp (p, "hello world") == 0); free (p); } /* first string empty */ { char *p = ft_strjoin ("", "world"); _s_check ("s1 empty", p && strcmp (p, "world") == 0); free (p); } /* second string empty */ { char *p = ft_strjoin ("hello", ""); _s_check ("s2 empty", p && strcmp (p, "hello") == 0); free (p); } /* both empty */ { char *p = ft_strjoin ("", ""); _s_check ("both empty", p && strcmp (p, "") == 0); free (p); } /* returns independent copy */ { char s1[] = "abc"; char s2[] = "def"; char *p = ft_strjoin (s1, s2); _s_check ("independent ptr", p && p != s1 && p != s2); s1[0] = 'X'; _s_check ("mutation safe", p[0] == 'a'); free (p); } /* randomized */ for (i = 0; i < _S_RAND_ITERS; i++) { int len1 = rand () % 200 + 1; int len2 = rand () % 200 + 1; char *s1 = malloc (len1 + 1); char *s2 = malloc (len2 + 1); char *expected; char *p; int j; if (!s1 || !s2) { free (s1); free (s2); continue; } for (j = 0; j < len1; j++) s1[j] = 'A' + rand () % 26; s1[len1] = '\0'; for (j = 0; j < len2; j++) s2[j] = 'a' + rand () % 26; s2[len2] = '\0'; expected = malloc (len1 + len2 + 1); if (!expected) { free (s1); free (s2); continue; } memcpy (expected, s1, len1); memcpy (expected + len1, s2, len2 + 1); p = ft_strjoin (s1, s2); snprintf (label, sizeof (label), "random len1=%d len2=%d", len1, len2); _s_check (label, p && strcmp (p, expected) == 0); free (s1); free (s2); free (expected); free (p); } } int main (void) { srand (time (NULL)); _s_test_strjoin (); _s_print_results (); return (_s_fail != 0); }