#include "libft.h" #include "test_utils.h" _S_CRASH (ft_strtrim_null_s1, ft_strtrim (NULL, " ")) _S_CRASH (ft_strtrim_null_set, ft_strtrim ("hello", NULL)) _S_CRASH (ft_strtrim_null_both, ft_strtrim (NULL, NULL)) static void _s_test_strtrim (void) { int i; char label[128]; _s_section ("ft_strtrim"); /* NULL crashes */ _s_check ("NULL s1 crashes", _s_crashes (_s_crash_ft_strtrim_null_s1)); _s_check ("NULL set crashes", _s_crashes (_s_crash_ft_strtrim_null_set)); _s_check ("NULL both crashes", _s_crashes (_s_crash_ft_strtrim_null_both)); /* trim spaces from both ends */ { char *p = ft_strtrim (" hello ", " "); _s_check ("spaces both ends", p && strcmp (p, "hello") == 0); free (p); } /* trim multiple characters */ { char *p = ft_strtrim ("xxhelloxx", "x"); _s_check ("single trim char", p && strcmp (p, "hello") == 0); free (p); } /* trim set with multiple chars */ { char *p = ft_strtrim (".-hello-.", ".-"); _s_check ("multi-char set", p && strcmp (p, "hello") == 0); free (p); } /* nothing to trim */ { char *p = ft_strtrim ("hello", " "); _s_check ("nothing to trim", p && strcmp (p, "hello") == 0); free (p); } /* everything trimmed */ { char *p = ft_strtrim ("aaaa", "a"); _s_check ("all trimmed", p && strcmp (p, "") == 0); free (p); } /* empty string */ { char *p = ft_strtrim ("", "abc"); _s_check ("empty s1", p && strcmp (p, "") == 0); free (p); } /* empty set */ { char *p = ft_strtrim (" hello ", ""); _s_check ("empty set", p && strcmp (p, " hello ") == 0); free (p); } /* trim only leading */ { char *p = ft_strtrim ("xxhello", "x"); _s_check ("leading only", p && strcmp (p, "hello") == 0); free (p); } /* trim only trailing */ { char *p = ft_strtrim ("helloxx", "x"); _s_check ("trailing only", p && strcmp (p, "hello") == 0); free (p); } /* set chars in the middle are preserved */ { char *p = ft_strtrim (" hello world ", " "); _s_check ("middle preserved", p && strcmp (p, "hello world") == 0); free (p); } /* single character string, in set */ { char *p = ft_strtrim ("x", "x"); _s_check ("single char trimmed", p && strcmp (p, "") == 0); free (p); } /* single character string, not in set */ { char *p = ft_strtrim ("x", "y"); _s_check ("single char kept", p && strcmp (p, "x") == 0); free (p); } /* returns independent copy */ { char s1[] = "hello"; char *p = ft_strtrim (s1, ""); _s_check ("independent ptr", p && p != s1); free (p); } /* randomized */ for (i = 0; i < _S_RAND_ITERS; i++) { int core_len = rand () % 100 + 1; int pad_len = rand () % 20; char *src; char *p; char *expected; int j; src = malloc (pad_len + core_len + pad_len + 1); expected = malloc (core_len + 1); if (!src || !expected) { free (src); free (expected); continue; } /* pad with spaces, core with letters */ for (j = 0; j < pad_len; j++) src[j] = ' '; for (j = 0; j < core_len; j++) { src[pad_len + j] = 'A' + rand () % 26; expected[j] = src[pad_len + j]; } expected[core_len] = '\0'; for (j = 0; j < pad_len; j++) src[pad_len + core_len + j] = ' '; src[pad_len + core_len + pad_len] = '\0'; p = ft_strtrim (src, " "); snprintf (label, sizeof (label), "random core=%d pad=%d", core_len, pad_len); _s_check (label, p && strcmp (p, expected) == 0); free (src); free (expected); free (p); } } int main (void) { srand (time (NULL)); _s_test_strtrim (); _s_print_results (); return (_s_fail != 0); }