aboutsummaryrefslogtreecommitdiffstats
path: root/tests/test_strlen.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_strlen.c')
-rw-r--r--tests/test_strlen.c109
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);
+}