aboutsummaryrefslogtreecommitdiffstats
path: root/tests/src/test_put.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/src/test_put.c')
-rw-r--r--tests/src/test_put.c197
1 files changed, 197 insertions, 0 deletions
diff --git a/tests/src/test_put.c b/tests/src/test_put.c
new file mode 100644
index 0000000..3c7f6dc
--- /dev/null
+++ b/tests/src/test_put.c
@@ -0,0 +1,197 @@
+#include "libft.h"
+#include "test_utils.h"
+#include <limits.h>
+
+/* ── helper: capture fd output into a buffer ──────────────────────── */
+
+static int
+_s_read_pipe (void (*fn) (int), char *buf, size_t bufsz)
+{
+ int fds[2];
+ ssize_t n;
+
+ if (pipe (fds) < 0)
+ return (-1);
+ fn (fds[1]);
+ close (fds[1]);
+ n = read (fds[0], buf, bufsz - 1);
+ close (fds[0]);
+ if (n < 0)
+ return (-1);
+ buf[n] = '\0';
+ return (n);
+}
+
+/* ======================================
+ * ft_putchar_fd
+ * ====================================== */
+
+static void
+_s_putchar_a (int fd)
+{
+ ft_putchar_fd ('a', fd);
+}
+static void
+_s_putchar_nl (int fd)
+{
+ ft_putchar_fd ('\n', fd);
+}
+static void
+_s_putchar_zero (int fd)
+{
+ ft_putchar_fd ('\0', fd);
+}
+
+static void
+_s_test_putchar_fd (void)
+{
+ char buf[64];
+
+ _s_section ("ft_putchar_fd");
+
+ _s_read_pipe (_s_putchar_a, buf, sizeof (buf));
+ _s_check ("char 'a'", strcmp (buf, "a") == 0);
+
+ _s_read_pipe (_s_putchar_nl, buf, sizeof (buf));
+ _s_check ("newline", strcmp (buf, "\n") == 0);
+
+ {
+ int n = _s_read_pipe (_s_putchar_zero, buf, sizeof (buf));
+ _s_check ("null byte", n == 1 && buf[0] == '\0');
+ }
+}
+
+/* ======================================
+ * ft_putstr_fd
+ * ====================================== */
+
+static void
+_s_putstr_hello (int fd)
+{
+ ft_putstr_fd ("hello", fd);
+}
+static void
+_s_putstr_empty (int fd)
+{
+ ft_putstr_fd ("", fd);
+}
+
+_S_CRASH_V (ft_putstr_null, ft_putstr_fd (NULL, 1))
+
+static void
+_s_test_putstr_fd (void)
+{
+ char buf[256];
+
+ _s_section ("ft_putstr_fd");
+
+ _s_check ("NULL crashes", _s_crashes (_s_crash_ft_putstr_null));
+
+ _s_read_pipe (_s_putstr_hello, buf, sizeof (buf));
+ _s_check ("hello", strcmp (buf, "hello") == 0);
+
+ {
+ int n = _s_read_pipe (_s_putstr_empty, buf, sizeof (buf));
+ _s_check ("empty", n == 0);
+ }
+}
+
+/* ======================================
+ * ft_putendl_fd
+ * ====================================== */
+
+static void
+_s_putendl_hello (int fd)
+{
+ ft_putendl_fd ("hello", fd);
+}
+static void
+_s_putendl_empty (int fd)
+{
+ ft_putendl_fd ("", fd);
+}
+
+_S_CRASH_V (ft_putendl_null, ft_putendl_fd (NULL, 1))
+
+static void
+_s_test_putendl_fd (void)
+{
+ char buf[256];
+
+ _s_section ("ft_putendl_fd");
+
+ _s_check ("NULL crashes", _s_crashes (_s_crash_ft_putendl_null));
+
+ _s_read_pipe (_s_putendl_hello, buf, sizeof (buf));
+ _s_check ("hello\\n", strcmp (buf, "hello\n") == 0);
+
+ _s_read_pipe (_s_putendl_empty, buf, sizeof (buf));
+ _s_check ("empty\\n", strcmp (buf, "\n") == 0);
+}
+
+/* ======================================
+ * ft_putnbr_fd
+ * ====================================== */
+
+static void
+_s_putnbr_0 (int fd)
+{
+ ft_putnbr_fd (0, fd);
+}
+static void
+_s_putnbr_42 (int fd)
+{
+ ft_putnbr_fd (42, fd);
+}
+static void
+_s_putnbr_neg (int fd)
+{
+ ft_putnbr_fd (-42, fd);
+}
+static void
+_s_putnbr_max (int fd)
+{
+ ft_putnbr_fd (INT_MAX, fd);
+}
+static void
+_s_putnbr_min (int fd)
+{
+ ft_putnbr_fd (INT_MIN, fd);
+}
+
+static void
+_s_test_putnbr_fd (void)
+{
+ char buf[64];
+ char expected[64];
+
+ _s_section ("ft_putnbr_fd");
+
+ _s_read_pipe (_s_putnbr_0, buf, sizeof (buf));
+ _s_check ("zero", strcmp (buf, "0") == 0);
+
+ _s_read_pipe (_s_putnbr_42, buf, sizeof (buf));
+ _s_check ("positive", strcmp (buf, "42") == 0);
+
+ _s_read_pipe (_s_putnbr_neg, buf, sizeof (buf));
+ _s_check ("negative", strcmp (buf, "-42") == 0);
+
+ _s_read_pipe (_s_putnbr_max, buf, sizeof (buf));
+ snprintf (expected, sizeof (expected), "%d", INT_MAX);
+ _s_check ("INT_MAX", strcmp (buf, expected) == 0);
+
+ _s_read_pipe (_s_putnbr_min, buf, sizeof (buf));
+ snprintf (expected, sizeof (expected), "%d", INT_MIN);
+ _s_check ("INT_MIN", strcmp (buf, expected) == 0);
+}
+
+int
+main (void)
+{
+ _s_test_putchar_fd ();
+ _s_test_putstr_fd ();
+ _s_test_putendl_fd ();
+ _s_test_putnbr_fd ();
+ _s_print_results ();
+ return (_s_fail != 0);
+}