aboutsummaryrefslogtreecommitdiffstats
path: root/tests/src/test_strlen.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/src/test_strlen.c')
-rw-r--r--tests/src/test_strlen.c76
1 files changed, 76 insertions, 0 deletions
diff --git a/tests/src/test_strlen.c b/tests/src/test_strlen.c
new file mode 100644
index 0000000..15f317b
--- /dev/null
+++ b/tests/src/test_strlen.c
@@ -0,0 +1,76 @@
+#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);
+}