The test is "complete" and the functions were patched so that they pass the test.
authorLukas Jiriste <ljiriste@student.42prague.com>
Fri, 8 Sep 2023 16:07:04 +0000 (18:07 +0200)
committerLukas Jiriste <ljiriste@student.42prague.com>
Fri, 8 Sep 2023 16:07:04 +0000 (18:07 +0200)
Libft
Makefile
conversion.c
formatting.c
main.c
padding.c

diff --git a/Libft b/Libft
index f3d297fe160d8798b15c8a830b57281288abaaf6..f56fd060021c191397b4bbb600d5e9f4f1203fee 160000 (submodule)
--- a/Libft
+++ b/Libft
@@ -1 +1 @@
-Subproject commit f3d297fe160d8798b15c8a830b57281288abaaf6
+Subproject commit f56fd060021c191397b4bbb600d5e9f4f1203fee
index a1634f0c0f2af47970c3f695fac02c742e5b4a3c..5a6de6f6baadcac63d0f36a07a97fa1c6f4ab923 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -37,7 +37,7 @@ re : fclean
        $(MAKE) all
 
 orig_main.o : orig_main.c
-       $(CC) -o $@ -c $< $(INCLUDE)
+       $(CC) -w -o $@ -c $< $(INCLUDE)
 
 orig_main.c : main.c
        sed 's/ft_printf/printf/g' main.c > orig_main.c 
index 8e775122bc411fc6f26418ec672e3ab9cdd74cb8..f10d4cd34aa326fc278004cd8b28ef1219757c18 100644 (file)
@@ -6,7 +6,7 @@
 /*   By: ljiriste <marvin@42.fr>                    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2023/09/05 11:30:56 by ljiriste          #+#    #+#             */
-/*   Updated: 2023/09/06 16:54:57 by ljiriste         ###   ########.fr       */
+/*   Updated: 2023/09/08 17:52:41 by ljiriste         ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
@@ -36,6 +36,11 @@ static char  *base_str_constr(char type, va_list *args)
                res = ft_strdup(va_arg(*args, char *));
        else if (type == 'p')
                res = ft_itoa_base((intptr_t)va_arg(*args, void *), "0123456789abcdef");
+       if (type == 'p' && ft_strncmp(res, "0", 2) == 0)
+       {
+               free (res);
+               res = ft_strdup("(nil)");
+       }
        return (res);
 }
 
@@ -44,17 +49,43 @@ static int  valid_toprint(t_to_print tp)
        return (tp.left_pad && tp.zero_pad && tp.main_part && tp.right_pad);
 }
 
-static size_t  to_print_len(t_to_print tp)
+static size_t  to_print_len(t_to_print *tp)
 {
        size_t  len;
 
        len = 0;
-       len += ft_strlen(tp.left_pad);
-       len += (tp.sign != '\0');
-       len += ft_strlen(tp.alt);
-       len += ft_strlen(tp.zero_pad);
-       len += ft_strlen(tp.main_part);
-       len += ft_strlen(tp.right_pad);
+       len += ft_strlen(tp->left_pad);
+       len += (tp->sign != '\0');
+       len += ft_strlen(tp->alt);
+       len += ft_strlen(tp->zero_pad);
+       len += ft_strlen(tp->main_part);
+       len += ft_strlen(tp->right_pad);
+       return (len);
+}
+
+int    tp_print_and_free_members(t_to_print *tp, t_conv conv)
+{
+       int     len;
+
+       len = to_print_len(tp);
+       ft_putstr_fd(tp->left_pad, 1);
+       if (tp->sign != '\0')
+               ft_putchar_fd(tp->sign, 1);
+       ft_putstr_fd(tp->alt, 1);
+       ft_putstr_fd(tp->zero_pad, 1);
+       if (*(tp->main_part) == '\0' && conv.type == 'c')
+       {
+               ft_putchar_fd('\0', 1);
+               ++len;
+       }
+       else
+               ft_putstr_fd(tp->main_part, 1);
+       ft_putstr_fd(tp->right_pad, 1);
+       free(tp->left_pad);
+       free(tp->alt);
+       free(tp->zero_pad);
+       free(tp->main_part);
+       free(tp->right_pad);
        return (len);
 }
 
@@ -66,17 +97,15 @@ int handle_conversion(const char **format, va_list *args)
 
        ++(*format);
        conv = parse_format(format, args);
+       if (conv.type == '%')
+       {
+               ft_putchar_fd('%', 1);
+               return (1);
+       }
        temp = base_str_constr(conv.type, args);
        to_print = formatting(temp, conv);
        free(temp);
        if (!valid_toprint(to_print))
                return (-1);
-       ft_putstr_fd(to_print.left_pad, 1);
-       if (to_print.sign != '\0')
-               ft_putchar_fd(to_print.sign, 1);
-       ft_putstr_fd(to_print.zero_pad, 1);
-       ft_putstr_fd(to_print.alt, 1);
-       ft_putstr_fd(to_print.main_part, 1);
-       ft_putstr_fd(to_print.right_pad, 1);
-       return (to_print_len(to_print));
+       return (tp_print_and_free_members(&to_print, conv));
 }
index 68c67f9dc5a19b2be6121373aa67fb8f8d1093ab..ae6f8ecc836fa846ecba35cffc8310b16617ba0c 100644 (file)
@@ -6,31 +6,46 @@
 /*   By: ljiriste <marvin@42.fr>                    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2023/09/05 11:28:21 by ljiriste          #+#    #+#             */
-/*   Updated: 2023/09/06 18:00:13 by ljiriste         ###   ########.fr       */
+/*   Updated: 2023/09/08 16:39:07 by ljiriste         ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
 #include <stddef.h>    // NULL
+#include <limits.h>
 #include "libft.h"
 #include "ft_printf.h"
 
-static char    *create_alt(t_conv conv)
+static int     starts_with_zero(t_to_print *tp, t_conv conv)
 {
-       if (conv.type == 'p')
-               return (ft_strdup("0x"));
+       return ((intmax_t)ft_strlen(tp->main_part) < conv.prec);
+}
+
+static void    create_alt(t_to_print *tp, t_conv conv)
+{
+       if (conv.type == 'p' && *(tp->main_part) != '(')
+               tp->alt = ft_strdup("0x");
+       else if (conv.type == 's' || conv.type == 'c'
+               || ft_strncmp(tp->main_part, "0", 2) == 0
+               || ((*(tp->main_part) == '\0' || !conv.flags.alt_mode)
+                       && conv.type != 'o'))
+               tp->alt = ft_strdup("");
        else if (conv.flags.alt_mode)
        {
-               if (conv.type == 'o')
-                       return (ft_strdup("0"));
-               else if (conv.type == 'x')
-                       return (ft_strdup("0x"));
+               if (conv.type == 'x')
+                       tp->alt = ft_strdup("0x");
                else if (conv.type == 'X')
-                       return (ft_strdup("0X"));
+                       tp->alt = ft_strdup("0X");
+               else if (conv.type == 'o' && !starts_with_zero(tp, conv))
+                       tp->alt = ft_strdup("0");
+               else
+                       tp->alt = ft_strdup("");
        }
-       return (ft_strdup(""));
+       else
+               tp->alt = ft_strdup("");
+       return ;
 }
 
-static void    create_main(char *str, t_conv conv, t_to_print *tp)
+static void    create_main(char *str, t_to_print *tp, t_conv conv)
 {
        if (conv.type != 's' && conv.type != 'c'
                && ft_strncmp(str, "0", 2) == 0 && conv.prec == 0)
@@ -74,8 +89,8 @@ t_to_print    formatting(char *str, t_conv conv)
        t_to_print      res;
 
        init_printed(&res);
-       create_main(str, conv, &res);
-       res.alt = create_alt(conv);
+       create_main(str, &res, conv);
+       create_alt(&res, conv);
        create_padding(&res, conv);
        return (res);
 }
diff --git a/main.c b/main.c
index 0eaee8b1668c0f113ef86b5a6413c2ed750c19fb..feedf7412fc474a6e1c918238ecb421636e3a903 100644 (file)
--- a/main.c
+++ b/main.c
 /*   By: ljiriste <marvin@42.fr>                    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2023/09/06 17:26:17 by ljiriste          #+#    #+#             */
-/*   Updated: 2023/09/06 18:05:39 by ljiriste         ###   ########.fr       */
+/*   Updated: 2023/09/08 17:58:29 by ljiriste         ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
-
+#include <stdlib.h>
 #include "ft_printf.h"
+#include "libft.h"
 
 int    main(void)
 {
-       ft_printf("Trying format d/i:\n");
-       ft_printf("Without flags:\n");
-
-       ft_printf("\n\t-1\t\t%d\n", -1);
-       ft_printf("\t0\t\t%d\n", 0);
-       ft_printf("\t1\t\t%d\n", 1);
-
-       ft_printf("\n\t32767\t\t%d\n", 32767);
-       ft_printf("\t32768\t\t%d\n", 32768);
-       ft_printf("\t32769\t\t%d\n", 32769);
-
-       ft_printf("\n\t65535\t\t%d\n", 65535);
-       ft_printf("\t65536\t\t%d\n", 65536);
-       ft_printf("\t65537\t\t%d\n", 65537);
-
-       ft_printf("\n\t2147483647\t%d\n", 2147483647);
-       ft_printf("\t2147483648\t%d\n", 2147483648);
-       ft_printf("\t2147483649\t%d\n", 2147483649);
-
-       ft_printf("\n\t4294967295\t%d\n", 4294967295);
-       ft_printf("\t4294967296\t%d\n", 4294967296);
-       ft_printf("\t4294967297\t%d\n", 4294967297);
-
-
-       ft_printf("\nWith flags applicable to format d/i (+ -0):\n");
-
-       ft_printf("\n\t|      1998|\t|%10d|\n", 1998);
-       ft_printf("\t|      1998|\t|% 10d|\n", 1998);
-       ft_printf("\t|      1998|\t|%        10d|\n", 1998);
-
-       ft_printf("\n\t|     +1998|\t|%+10d|\n", 1998);
-       ft_printf("\t|     +1998|\t|%+ 10d|\n", 1998);
-       ft_printf("\t|     +1998|\t|% + + +++     10d|\n", 1998);
-       ft_printf("\t|     +1998|\t|% +10d|\n", 1998);
-       ft_printf("\t|     +1998|\t|%+ + +++   ++  10d|\n", 1998);
-       ft_printf("\t|     +1998|\t|%  + + +   ++10d|\n", 1998);
-       ft_printf("\t|     +1998|\t|%+ +  + ++     +   10d|\n", 1998);
-       ft_printf("\t|     +1998|\t|%+ +  + ++     +   +10d|\n", 1998);
-
-       ft_printf("\n\t| 000001998|\t|% 010d|\n", 1998);
-       ft_printf("\t| 000001998|\t|%0 10d|\n", 1998);
-       ft_printf("\t| 000001998|\t|%0    000    0 0010d|\n", 1998);
-       ft_printf("\t| 000001998|\t|% 0    000    0 0010d|\n", 1998);
-       ft_printf("\t| 000001998|\t|%0    000    0 00 10d|\n", 1998);
-       ft_printf("\t| 000001998|\t|% 0    000    0 00 10d|\n", 1998);
-
-       ft_printf("\n\t|+000001998|\t|%0+10d|\n", 1998);
-       ft_printf("\t|+000001998|\t|%+010d|\n", 1998);
-       ft_printf("\t|+000001998|\t|%0+ 10d|\n", 1998);
-       ft_printf("\t|+000001998|\t|%0 +10d|\n", 1998);
-       ft_printf("\t|+000001998|\t|% 0+10d|\n", 1998);
-       ft_printf("\t|+000001998|\t|% +010d|\n", 1998);
-       ft_printf("\t|+000001998|\t|%+0 10d|\n", 1998);
-       ft_printf("\t|+000001998|\t|%+ 010d|\n", 1998);
-
-       ft_printf("\n\t|0000001998|\t|%010d|\n", 1998);
-       ft_printf("\t|0000001998|\t|%0000000000010d|\n", 1998);
-
-       ft_printf("\n\t|1998      |\t|%-10d|\n", 1998);
-       ft_printf("\t|1998      |\t|%0-10d|\n", 1998);
-       ft_printf("\t|1998      |\t|%-010d|\n", 1998);
-       ft_printf("\t|1998      |\t|%-0000-----00-00-0-10d|\n", 1998);
-       ft_printf("\t|1998      |\t|%-0000---0-0-0--0-0-0010d|\n", 1998);
-       ft_printf("\t|1998      |\t|%0000---0-0-0--0-0-0-10d|\n", 1998);
-       ft_printf("\t|1998      |\t|%0000---0-0-0--0-0-0010d|\n", 1998);
-
-       ft_printf("\n\t| 1998     |\t|%- 10d|\n", 1998);
-       ft_printf("\t| 1998     |\t|% -10d|\n", 1998);
-       ft_printf("\t| 1998     |\t|%0 -10d|\n", 1998);
-       ft_printf("\t| 1998     |\t|% 0-10d|\n", 1998);
-       ft_printf("\t| 1998     |\t|% -010d|\n", 1998);
-       ft_printf("\t| 1998     |\t|%0- 10d|\n", 1998);
-       ft_printf("\t| 1998     |\t|%-0 10d|\n", 1998);
-       ft_printf("\t| 1998     |\t|%- 010d|\n", 1998);
-
-       ft_printf("\n\t|+1998     |\t|%-+10d|\n", 1998);
-       ft_printf("\t|+1998     |\t|%+-10d|\n", 1998);
-       ft_printf("\t|+1998     |\t|% +-10d|\n", 1998);
-       ft_printf("\t|+1998     |\t|%+ -10d|\n", 1998);
-       ft_printf("\t|+1998     |\t|%+- 10d|\n", 1998);
-       ft_printf("\t|+1998     |\t|% -+10d|\n", 1998);
-       ft_printf("\t|+1998     |\t|%- +10d|\n", 1998);
-       ft_printf("\t|+1998     |\t|%-+ 10d|\n", 1998);
-
-
-       ft_printf("\nMinimum width smaller than input:\n");
-
-       ft_printf("\n\t|2147483647|\n\t|%5d|\n", 2147483647);
-       ft_printf("\t|2147483647|\n\t|%05d|\n", 2147483647);
-
-       ft_printf("\n\t| 2147483647|\n\t|% 5d|\n", 2147483647);
-       ft_printf("\t| 2147483647|\n\t|% 05d|\n", 2147483647);
-       ft_printf("\t|+2147483647|\n\t|%+05d|\n", 2147483647);
-       ft_printf("\t|+2147483647|\n\t|%+5d|\n", 2147483647);
-
-
-       ft_printf("\nPrecision:\n");
-
-       ft_printf("\n\t||\t|%.0d|\n\n", 0);
-
-       ft_printf("\n\t|      1998|\t|%10.0d|\n", 1998);
-       ft_printf("\t|      1998|\t|%10.1d|\n", 1998);
-       ft_printf("\t|      1998|\t|%10.2d|\n", 1998);
-       ft_printf("\t|      1998|\t|%10.3d|\n", 1998);
-       ft_printf("\t|      1998|\t|%10.4d|\n", 1998);
-       ft_printf("\t|     01998|\t|%10.5d|\n", 1998);
-       ft_printf("\t|    001998|\t|%10.6d|\n", 1998);
-       ft_printf("\t|   0001998|\t|%10.7d|\n", 1998);
-       ft_printf("\t|  00001998|\t|%10.8d|\n", 1998);
-       ft_printf("\t| 000001998|\t|%10.9d|\n", 1998);
-       ft_printf("\t|0000001998|\t|%10.10d|\n", 1998);
-
-       ft_printf("\n\t|00000001998|\t|%10.11d|\n", 1998);
+       int     i;
+
+       i = 0;
+
+       i += ft_printf("Trying format d/i:\n");
+       i += ft_printf("\tWithout flags:\n");
+
+       i += ft_printf("\n\tInput value\tOutput value\n");
+       i += ft_printf("\t-1\t\t\t%d\n", -1);
+       i += ft_printf("\t0\t\t\t%d\n", 0);
+       i += ft_printf("\t1\t\t\t%d\n", 1);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t32767\t\t%d\n", 32767);
+       i += ft_printf("\t32768\t\t%d\n", 32768);
+       i += ft_printf("\t32769\t\t%d\n", 32769);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t65535\t\t%d\n", 65535);
+       i += ft_printf("\t65536\t\t%d\n", 65536);
+       i += ft_printf("\t65537\t\t%d\n", 65537);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t2147483647\t%d\n", 2147483647);
+       i += ft_printf("\t2147483648\t%d\n", 2147483648);
+       i += ft_printf("\t2147483649\t%d\n", 2147483649);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t4294967295\t%d\n", 4294967295);
+       i += ft_printf("\t4294967296\t%d\n", 4294967296);
+       i += ft_printf("\t4294967297\t%d\n", 4294967297);
+
+
+       i += ft_printf("\n");
+       i += ft_printf("\tWith flags applicable to format d/i (+ -0):\n");
+
+       i += ft_printf("\n\tExpected outcome\tActual outcome\n");
+       i += ft_printf("\t|      1998|\t\t|%10d|\n", 1998);
+       i += ft_printf("\t|      1998|\t\t|% 10d|\n", 1998);
+       i += ft_printf("\t|      1998|\t\t|%        10d|\n", 1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|     +1998|\t\t|%+10d|\n", 1998);
+       i += ft_printf("\t|     +1998|\t\t|%+ 10d|\n", 1998);
+       i += ft_printf("\t|     +1998|\t\t|% + + +++     10d|\n", 1998);
+       i += ft_printf("\t|     +1998|\t\t|% +10d|\n", 1998);
+       i += ft_printf("\t|     +1998|\t\t|%+ + +++   ++  10d|\n", 1998);
+       i += ft_printf("\t|     +1998|\t\t|%  + + +   ++10d|\n", 1998);
+       i += ft_printf("\t|     +1998|\t\t|%+ +  + ++     +   10d|\n", 1998);
+       i += ft_printf("\t|     +1998|\t\t|%+ +  + ++     +   +10d|\n", 1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t| 000001998|\t\t|% 010d|\n", 1998);
+       i += ft_printf("\t| 000001998|\t\t|%0 10d|\n", 1998);
+       i += ft_printf("\t| 000001998|\t\t|%0    000    0 0010d|\n", 1998);
+       i += ft_printf("\t| 000001998|\t\t|% 0    000    0 0010d|\n", 1998);
+       i += ft_printf("\t| 000001998|\t\t|%0    000    0 00 10d|\n", 1998);
+       i += ft_printf("\t| 000001998|\t\t|% 0    000    0 00 10d|\n", 1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|+000001998|\t\t|%0+10d|\n", 1998);
+       i += ft_printf("\t|+000001998|\t\t|%+010d|\n", 1998);
+       i += ft_printf("\t|+000001998|\t\t|%0+ 10d|\n", 1998);
+       i += ft_printf("\t|+000001998|\t\t|%0 +10d|\n", 1998);
+       i += ft_printf("\t|+000001998|\t\t|% 0+10d|\n", 1998);
+       i += ft_printf("\t|+000001998|\t\t|% +010d|\n", 1998);
+       i += ft_printf("\t|+000001998|\t\t|%+0 10d|\n", 1998);
+       i += ft_printf("\t|+000001998|\t\t|%+ 010d|\n", 1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|0000001998|\t\t|%010d|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|%0000000000010d|\n", 1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|1998      |\t\t|%-10d|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%0-10d|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%-010d|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%-0000-----00-00-0-10d|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%-0000---0-0-0--0-0-0010d|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%0000---0-0-0--0-0-0-10d|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%0000---0-0-0--0-0-0010d|\n", 1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t| 1998     |\t\t|%- 10d|\n", 1998);
+       i += ft_printf("\t| 1998     |\t\t|% -10d|\n", 1998);
+       i += ft_printf("\t| 1998     |\t\t|%0 -10d|\n", 1998);
+       i += ft_printf("\t| 1998     |\t\t|% 0-10d|\n", 1998);
+       i += ft_printf("\t| 1998     |\t\t|% -010d|\n", 1998);
+       i += ft_printf("\t| 1998     |\t\t|%0- 10d|\n", 1998);
+       i += ft_printf("\t| 1998     |\t\t|%-0 10d|\n", 1998);
+       i += ft_printf("\t| 1998     |\t\t|%- 010d|\n", 1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|+1998     |\t\t|%-+10d|\n", 1998);
+       i += ft_printf("\t|+1998     |\t\t|%+-10d|\n", 1998);
+       i += ft_printf("\t|+1998     |\t\t|% +-10d|\n", 1998);
+       i += ft_printf("\t|+1998     |\t\t|%+ -10d|\n", 1998);
+       i += ft_printf("\t|+1998     |\t\t|%+- 10d|\n", 1998);
+       i += ft_printf("\t|+1998     |\t\t|% -+10d|\n", 1998);
+       i += ft_printf("\t|+1998     |\t\t|%- +10d|\n", 1998);
+       i += ft_printf("\t|+1998     |\t\t|%-+ 10d|\n", 1998);
+
+       i += ft_printf("\t|     -1998|\t\t|%10d|\n", -1998);
+       i += ft_printf("\t|     -1998|\t\t|% 10d|\n", -1998);
+       i += ft_printf("\t|     -1998|\t\t|%        10d|\n", -1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|     -1998|\t\t|%+10d|\n", -1998);
+       i += ft_printf("\t|     -1998|\t\t|%+ 10d|\n", -1998);
+       i += ft_printf("\t|     -1998|\t\t|% + + +++     10d|\n", -1998);
+       i += ft_printf("\t|     -1998|\t\t|% +10d|\n", -1998);
+       i += ft_printf("\t|     -1998|\t\t|%+ + +++   ++  10d|\n", -1998);
+       i += ft_printf("\t|     -1998|\t\t|%  + + +   ++10d|\n", -1998);
+       i += ft_printf("\t|     -1998|\t\t|%+ +  + ++     +   10d|\n", -1998);
+       i += ft_printf("\t|     -1998|\t\t|%+ +  + ++     +   +10d|\n", -1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|-000001998|\t\t|% 010d|\n", -1998);
+       i += ft_printf("\t|-000001998|\t\t|%0 10d|\n", -1998);
+       i += ft_printf("\t|-000001998|\t\t|%0    000    0 0010d|\n", -1998);
+       i += ft_printf("\t|-000001998|\t\t|% 0    000    0 0010d|\n", -1998);
+       i += ft_printf("\t|-000001998|\t\t|%0    000    0 00 10d|\n", -1998);
+       i += ft_printf("\t|-000001998|\t\t|% 0    000    0 00 10d|\n", -1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|-000001998|\t\t|%0+10d|\n", -1998);
+       i += ft_printf("\t|-000001998|\t\t|%+010d|\n", -1998);
+       i += ft_printf("\t|-000001998|\t\t|%0+ 10d|\n", -1998);
+       i += ft_printf("\t|-000001998|\t\t|%0 +10d|\n", -1998);
+       i += ft_printf("\t|-000001998|\t\t|% 0+10d|\n", -1998);
+       i += ft_printf("\t|-000001998|\t\t|% +010d|\n", -1998);
+       i += ft_printf("\t|-000001998|\t\t|%+0 10d|\n", -1998);
+       i += ft_printf("\t|-000001998|\t\t|%+ 010d|\n", -1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|-000001998|\t\t|%010d|\n", -1998);
+       i += ft_printf("\t|-000001998|\t\t|%0000000000010d|\n", -1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|-1998     |\t\t|%-10d|\n", -1998);
+       i += ft_printf("\t|-1998     |\t\t|%0-10d|\n", -1998);
+       i += ft_printf("\t|-1998     |\t\t|%-010d|\n", -1998);
+       i += ft_printf("\t|-1998     |\t\t|%-0000-----00-00-0-10d|\n", -1998);
+       i += ft_printf("\t|-1998     |\t\t|%-0000---0-0-0--0-0-0010d|\n", -1998);
+       i += ft_printf("\t|-1998     |\t\t|%0000---0-0-0--0-0-0-10d|\n", -1998);
+       i += ft_printf("\t|-1998     |\t\t|%0000---0-0-0--0-0-0010d|\n", -1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|-1998     |\t\t|%- 10d|\n", -1998);
+       i += ft_printf("\t|-1998     |\t\t|% -10d|\n", -1998);
+       i += ft_printf("\t|-1998     |\t\t|%0 -10d|\n", -1998);
+       i += ft_printf("\t|-1998     |\t\t|% 0-10d|\n", -1998);
+       i += ft_printf("\t|-1998     |\t\t|% -010d|\n", -1998);
+       i += ft_printf("\t|-1998     |\t\t|%0- 10d|\n", -1998);
+       i += ft_printf("\t|-1998     |\t\t|%-0 10d|\n", -1998);
+       i += ft_printf("\t|-1998     |\t\t|%- 010d|\n", -1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|-1998     |\t\t|%-+10d|\n", -1998);
+       i += ft_printf("\t|-1998     |\t\t|%+-10d|\n", -1998);
+       i += ft_printf("\t|-1998     |\t\t|% +-10d|\n", -1998);
+       i += ft_printf("\t|-1998     |\t\t|%+ -10d|\n", -1998);
+       i += ft_printf("\t|-1998     |\t\t|%+- 10d|\n", -1998);
+       i += ft_printf("\t|-1998     |\t\t|% -+10d|\n", -1998);
+       i += ft_printf("\t|-1998     |\t\t|%- +10d|\n", -1998);
+       i += ft_printf("\t|-1998     |\t\t|%-+ 10d|\n", -1998);
+       
+       i += ft_printf("\n");
+       i += ft_printf("\tMinimum width smaller than input:\n");
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|2147483647|\n\t|%5d|\n", 2147483647);
+       i += ft_printf("\t|2147483647|\n\t|%05d|\n", 2147483647);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t| 2147483647|\n\t|% 5d|\n", 2147483647);
+       i += ft_printf("\t| 2147483647|\n\t|% 05d|\n", 2147483647);
+       i += ft_printf("\t|+2147483647|\n\t|%+05d|\n", 2147483647);
+       i += ft_printf("\t|+2147483647|\n\t|%+5d|\n", 2147483647);
+       i += ft_printf("\t|-2147483647|\n\t|% 5d|\n", -2147483647);
+       i += ft_printf("\t|-2147483647|\n\t|% 05d|\n", -2147483647);
+       i += ft_printf("\t|-2147483647|\n\t|%+05d|\n", -2147483647);
+       i += ft_printf("\t|-2147483647|\n\t|%+5d|\n", -2147483647);
+
+
+       i += ft_printf("\n");
+       i += ft_printf("\tPrecision:\n");
+
+       i += ft_printf("\n");
+       i += ft_printf("\t||\t|%.0d|\n\n", 0);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|      1998|\t|%10.0d|\n", 1998);
+       i += ft_printf("\t|      1998|\t|%10.1d|\n", 1998);
+       i += ft_printf("\t|      1998|\t|%10.2d|\n", 1998);
+       i += ft_printf("\t|      1998|\t|%10.3d|\n", 1998);
+       i += ft_printf("\t|      1998|\t|%10.4d|\n", 1998);
+       i += ft_printf("\t|     01998|\t|%10.5d|\n", 1998);
+       i += ft_printf("\t|    001998|\t|%10.6d|\n", 1998);
+       i += ft_printf("\t|   0001998|\t|%10.7d|\n", 1998);
+       i += ft_printf("\t|  00001998|\t|%10.8d|\n", 1998);
+       i += ft_printf("\t| 000001998|\t|%10.9d|\n", 1998);
+       i += ft_printf("\t|0000001998|\t|%10.10d|\n", 1998);
+
+       i += ft_printf("\t|     -1998|\t|%10.0d|\n", -1998);
+       i += ft_printf("\t|     -1998|\t|%10.1d|\n", -1998);
+       i += ft_printf("\t|     -1998|\t|%10.2d|\n", -1998);
+       i += ft_printf("\t|     -1998|\t|%10.3d|\n", -1998);
+       i += ft_printf("\t|     -1998|\t|%10.4d|\n", -1998);
+       i += ft_printf("\t|    -01998|\t|%10.5d|\n", -1998);
+       i += ft_printf("\t|   -001998|\t|%10.6d|\n", -1998);
+       i += ft_printf("\t|  -0001998|\t|%10.7d|\n", -1998);
+       i += ft_printf("\t| -00001998|\t|%10.8d|\n", -1998);
+       i += ft_printf("\t|-000001998|\t|%10.9d|\n", -1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|-0000001998|\t|%10.10d|\n", -1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\tFormat arguments given by *:\n");
+       
+       i += ft_printf("\n");
+       i += ft_printf("\t|     01998|\t|%*.5d|\n", 10, 1998);
+       i += ft_printf("\t|     01998|\t|%10.*d|\n", 5, 1998);
+       i += ft_printf("\t|     01998|\t|%*.*d|\n", 10, 5, 1998);
+       i += ft_printf("\t|      1998|\t|%*.*d|\n", 10, -1, 1998);
+       i += ft_printf("\t|      1998|\t|%*.*d|\n", 10, -10, 1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("Trying format u:\n");
+       i += ft_printf("\tWithout flags:\n");
+
+       i += ft_printf("\n\tInput value\tOutput value\n");
+       i += ft_printf("\t-1\t\t\t%u\n", -1);
+       i += ft_printf("\t0\t\t\t%u\n", 0);
+       i += ft_printf("\t1\t\t\t%u\n", 1);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t32767\t\t%u\n", 32767);
+       i += ft_printf("\t32768\t\t%u\n", 32768);
+       i += ft_printf("\t32769\t\t%u\n", 32769);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t65535\t\t%u\n", 65535);
+       i += ft_printf("\t65536\t\t%u\n", 65536);
+       i += ft_printf("\t65537\t\t%u\n", 65537);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t2147483647\t%u\n", 2147483647);
+       i += ft_printf("\t2147483648\t%u\n", 2147483648);
+       i += ft_printf("\t2147483649\t%u\n", 2147483649);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t4294967295\t%u\n", 4294967295);
+       i += ft_printf("\t4294967296\t%u\n", 4294967296);
+       i += ft_printf("\t4294967297\t%u\n", 4294967297);
+
+       i += ft_printf("\n");
+       i += ft_printf("\tWith flags applicable to format u (-0):\n");
+
+       i += ft_printf("\n\tExpected outcome\tActual outcome\n");
+       i += ft_printf("\t|      1998|\t\t|%10u|\n", 1998);
+       i += ft_printf("\t|      1998|\t\t|% 10u|\n", 1998);
+       i += ft_printf("\t|      1998|\t\t|%        10u|\n", 1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|      1998|\t\t|%+10u|\n", 1998);
+       i += ft_printf("\t|      1998|\t\t|%+ 10u|\n", 1998);
+       i += ft_printf("\t|      1998|\t\t|% + + +++     10u|\n", 1998);
+       i += ft_printf("\t|      1998|\t\t|% +10u|\n", 1998);
+       i += ft_printf("\t|      1998|\t\t|%+ + +++   ++  10u|\n", 1998);
+       i += ft_printf("\t|      1998|\t\t|%  + + +   ++10u|\n", 1998);
+       i += ft_printf("\t|      1998|\t\t|%+ +  + ++     +   10u|\n", 1998);
+       i += ft_printf("\t|      1998|\t\t|%+ +  + ++     +   +10u|\n", 1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|0000001998|\t\t|% 010u|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|%0 10u|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|%0    000    0 0010u|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|% 0    000    0 0010u|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|%0    000    0 00 10u|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|% 0    000    0 00 10u|\n", 1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|0000001998|\t\t|%0+10u|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|%+010u|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|%0+ 10u|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|%0 +10u|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|% 0+10u|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|% +010u|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|%+0 10u|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|%+ 010u|\n", 1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|0000001998|\t\t|%010u|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|%0000000000010u|\n", 1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|1998      |\t\t|%-10u|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%0-10u|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%-010u|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%-0000-----00-00-0-10u|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%-0000---0-0-0--0-0-0010u|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%0000---0-0-0--0-0-0-10u|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%0000---0-0-0--0-0-0010u|\n", 1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|1998      |\t\t|%- 10u|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|% -10u|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%0 -10u|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|% 0-10u|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|% -010u|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%0- 10u|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%-0 10u|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%- 010u|\n", 1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|1998      |\t\t|%-+10u|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%+-10u|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|% +-10u|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%+ -10u|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%+- 10u|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|% -+10u|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%- +10u|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%-+ 10u|\n", 1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\tMinimum width smaller than input:\n");
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|2147483647|\n\t|%5u|\n", 2147483647);
+       i += ft_printf("\t|2147483647|\n\t|%05u|\n", 2147483647);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|2147483647|\n\t|% 5u|\n", 2147483647);
+       i += ft_printf("\t|2147483647|\n\t|% 05u|\n", 2147483647);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|+2147483647|\n\t|%+05u|\n", 2147483647);
+       i += ft_printf("\t|+2147483647|\n\t|%+5u|\n", 2147483647);
+
+       i += ft_printf("\n");
+       i += ft_printf("\tPrecision:\n");
+
+       i += ft_printf("\n");
+       i += ft_printf("\t||\t|%.0u|\n\n", 0);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|      1998|\t|%10.0u|\n", 1998);
+       i += ft_printf("\t|      1998|\t|%10.1u|\n", 1998);
+       i += ft_printf("\t|      1998|\t|%10.2u|\n", 1998);
+       i += ft_printf("\t|      1998|\t|%10.3u|\n", 1998);
+       i += ft_printf("\t|      1998|\t|%10.4u|\n", 1998);
+       i += ft_printf("\t|     01998|\t|%10.5u|\n", 1998);
+       i += ft_printf("\t|    001998|\t|%10.6u|\n", 1998);
+       i += ft_printf("\t|   0001998|\t|%10.7u|\n", 1998);
+       i += ft_printf("\t|  00001998|\t|%10.8u|\n", 1998);
+       i += ft_printf("\t| 000001998|\t|%10.9u|\n", 1998);
+       i += ft_printf("\t|0000001998|\t|%10.10u|\n", 1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\tFormat arguments given by *:\n");
+       
+       i += ft_printf("\n");
+       i += ft_printf("\t|     01998|\t|%*.5u|\n", 10, 1998);
+       i += ft_printf("\t|     01998|\t|%10.*u|\n", 5, 1998);
+       i += ft_printf("\t|     01998|\t|%*.*u|\n", 10, 5, 1998);
+       i += ft_printf("\t|      1998|\t|%*.*u|\n", 10, -1, 1998);
+       i += ft_printf("\t|      1998|\t|%*.*u|\n", 10, -10, 1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("Trying format u:\n");
+
+       i += ft_printf("\n");
+       i += ft_printf("\t||\t|%.0u|\n", 0);
+
+       i += ft_printf("\n");
+       i += ft_printf("Trying format o:\n");
+       i += ft_printf("\tWithout flags:\n");
+
+       i += ft_printf("\n\tInput value\tOutput value\n");
+       i += ft_printf("\t-1\t\t\t%o\n", -1);
+       i += ft_printf("\t0\t\t\t%o\n", 0);
+       i += ft_printf("\t1\t\t\t%o\n", 1);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t32767\t\t%o\n", 32767);
+       i += ft_printf("\t32768\t\t%o\n", 32768);
+       i += ft_printf("\t32769\t\t%o\n", 32769);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t65535\t\t%o\n", 65535);
+       i += ft_printf("\t65536\t\t%o\n", 65536);
+       i += ft_printf("\t65537\t\t%o\n", 65537);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t2147483647\t%o\n", 2147483647);
+       i += ft_printf("\t2147483648\t%o\n", 2147483648);
+       i += ft_printf("\t2147483649\t%o\n", 2147483649);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t4294967295\t%o\n", 4294967295);
+       i += ft_printf("\t4294967296\t%o\n", 4294967296);
+       i += ft_printf("\t4294967297\t%o\n", 4294967297);
+
+       i += ft_printf("\n");
+       i += ft_printf("\tWith flags applicable to format o (-0):\n");
+
+       i += ft_printf("\n\tExpected outcome\tActual outcome\n");
+       i += ft_printf("\t|      1998|\t\t|%10o|\n", 1998);
+       i += ft_printf("\t|      1998|\t\t|% 10o|\n", 1998);
+       i += ft_printf("\t|      1998|\t\t|%        10o|\n", 1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|      1998|\t\t|%+10o|\n", 1998);
+       i += ft_printf("\t|      1998|\t\t|%+ 10o|\n", 1998);
+       i += ft_printf("\t|      1998|\t\t|% + + +++     10o|\n", 1998);
+       i += ft_printf("\t|      1998|\t\t|% +10o|\n", 1998);
+       i += ft_printf("\t|      1998|\t\t|%+ + +++   ++  10o|\n", 1998);
+       i += ft_printf("\t|      1998|\t\t|%  + + +   ++10o|\n", 1998);
+       i += ft_printf("\t|      1998|\t\t|%+ +  + ++     +   10o|\n", 1998);
+       i += ft_printf("\t|      1998|\t\t|%+ +  + ++     +   +10o|\n", 1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|0000001998|\t\t|% 010o|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|%0 10o|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|%0    000    0 0010o|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|% 0    000    0 0010o|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|%0    000    0 00 10o|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|% 0    000    0 00 10o|\n", 1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|0000001998|\t\t|%0+10o|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|%+010o|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|%0+ 10o|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|%0 +10o|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|% 0+10o|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|% +010o|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|%+0 10o|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|%+ 010o|\n", 1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|0000001998|\t\t|%010o|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|%0000000000010o|\n", 1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|1998      |\t\t|%-10o|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%0-10o|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%-010o|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%-0000-----00-00-0-10o|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%-0000---0-0-0--0-0-0010o|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%0000---0-0-0--0-0-0-10o|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%0000---0-0-0--0-0-0010o|\n", 1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|1998      |\t\t|%- 10o|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|% -10o|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%0 -10o|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|% 0-10o|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|% -010o|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%0- 10o|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%-0 10o|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%- 010o|\n", 1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|1998      |\t\t|%-+10o|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%+-10o|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|% +-10o|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%+ -10o|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%+- 10o|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|% -+10o|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%- +10o|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%-+ 10o|\n", 1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\tMinimum width smaller than input:\n");
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|2147483647|\n\t|%5o|\n", 2147483647);
+       i += ft_printf("\t|2147483647|\n\t|%05o|\n", 2147483647);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|2147483647|\n\t|% 5o|\n", 2147483647);
+       i += ft_printf("\t|2147483647|\n\t|% 05o|\n", 2147483647);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|+2147483647|\n\t|%+05o|\n", 2147483647);
+       i += ft_printf("\t|+2147483647|\n\t|%+5o|\n", 2147483647);
+
+       i += ft_printf("\n");
+       i += ft_printf("\tPrecision:\n");
+
+       i += ft_printf("\n");
+       i += ft_printf("\t||\t|%.0o|\n\n", 0);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|      1998|\t|%10.0o|\n", 1998);
+       i += ft_printf("\t|      1998|\t|%10.1o|\n", 1998);
+       i += ft_printf("\t|      1998|\t|%10.2o|\n", 1998);
+       i += ft_printf("\t|      1998|\t|%10.3o|\n", 1998);
+       i += ft_printf("\t|      1998|\t|%10.4o|\n", 1998);
+       i += ft_printf("\t|     01998|\t|%10.5o|\n", 1998);
+       i += ft_printf("\t|    001998|\t|%10.6o|\n", 1998);
+       i += ft_printf("\t|   0001998|\t|%10.7o|\n", 1998);
+       i += ft_printf("\t|  00001998|\t|%10.8o|\n", 1998);
+       i += ft_printf("\t| 000001998|\t|%10.9o|\n", 1998);
+       i += ft_printf("\t|0000001998|\t|%10.10o|\n", 1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\tFormat arguments given by *:\n");
+       
+       i += ft_printf("\n");
+       i += ft_printf("\t|     01998|\t|%*.5o|\n", 10, 1998);
+       i += ft_printf("\t|     01998|\t|%10.*o|\n", 5, 1998);
+       i += ft_printf("\t|     01998|\t|%*.*o|\n", 10, 5, 1998);
+       i += ft_printf("\t|      1998|\t|%*.*o|\n", 10, -1, 1998);
+       i += ft_printf("\t|      1998|\t|%*.*o|\n", 10, -10, 1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("Trying format x:\n");
+       i += ft_printf("\tWithout flags:\n");
+
+       i += ft_printf("\n\tInput value\tOutput value\n");
+       i += ft_printf("\t-1\t\t\t%x\n", -1);
+       i += ft_printf("\t0\t\t\t%x\n", 0);
+       i += ft_printf("\t1\t\t\t%x\n", 1);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t32767\t\t%x\n", 32767);
+       i += ft_printf("\t32768\t\t%x\n", 32768);
+       i += ft_printf("\t32769\t\t%x\n", 32769);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t65535\t\t%x\n", 65535);
+       i += ft_printf("\t65536\t\t%x\n", 65536);
+       i += ft_printf("\t65537\t\t%x\n", 65537);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t2147483647\t%x\n", 2147483647);
+       i += ft_printf("\t2147483648\t%x\n", 2147483648);
+       i += ft_printf("\t2147483649\t%x\n", 2147483649);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t4294967295\t%x\n", 4294967295);
+       i += ft_printf("\t4294967296\t%x\n", 4294967296);
+       i += ft_printf("\t4294967297\t%x\n", 4294967297);
+
+       i += ft_printf("\n");
+       i += ft_printf("\tWith flags applicable to format x (-0):\n");
+
+       i += ft_printf("\n\tExpected outcome\tActual outcome\n");
+       i += ft_printf("\t|      1998|\t\t|%10x|\n", 1998);
+       i += ft_printf("\t|      1998|\t\t|% 10x|\n", 1998);
+       i += ft_printf("\t|      1998|\t\t|%        10x|\n", 1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|      1998|\t\t|%+10x|\n", 1998);
+       i += ft_printf("\t|      1998|\t\t|%+ 10x|\n", 1998);
+       i += ft_printf("\t|      1998|\t\t|% + + +++     10x|\n", 1998);
+       i += ft_printf("\t|      1998|\t\t|% +10x|\n", 1998);
+       i += ft_printf("\t|      1998|\t\t|%+ + +++   ++  10x|\n", 1998);
+       i += ft_printf("\t|      1998|\t\t|%  + + +   ++10x|\n", 1998);
+       i += ft_printf("\t|      1998|\t\t|%+ +  + ++     +   10x|\n", 1998);
+       i += ft_printf("\t|      1998|\t\t|%+ +  + ++     +   +10x|\n", 1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|0000001998|\t\t|% 010x|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|%0 10x|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|%0    000    0 0010x|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|% 0    000    0 0010x|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|%0    000    0 00 10x|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|% 0    000    0 00 10x|\n", 1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|0000001998|\t\t|%0+10x|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|%+010x|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|%0+ 10x|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|%0 +10x|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|% 0+10x|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|% +010x|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|%+0 10x|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|%+ 010x|\n", 1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|0000001998|\t\t|%010x|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|%0000000000010x|\n", 1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|1998      |\t\t|%-10x|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%0-10x|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%-010x|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%-0000-----00-00-0-10x|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%-0000---0-0-0--0-0-0010x|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%0000---0-0-0--0-0-0-10x|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%0000---0-0-0--0-0-0010x|\n", 1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|1998      |\t\t|%- 10x|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|% -10x|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%0 -10x|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|% 0-10x|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|% -010x|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%0- 10x|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%-0 10x|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%- 010x|\n", 1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|1998      |\t\t|%-+10x|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%+-10x|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|% +-10x|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%+ -10x|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%+- 10x|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|% -+10x|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%- +10x|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%-+ 10x|\n", 1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\tMinimum width smaller than input:\n");
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|2147483647|\n\t|%5x|\n", 2147483647);
+       i += ft_printf("\t|2147483647|\n\t|%05x|\n", 2147483647);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|2147483647|\n\t|% 5x|\n", 2147483647);
+       i += ft_printf("\t|2147483647|\n\t|% 05x|\n", 2147483647);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|+2147483647|\n\t|%+05x|\n", 2147483647);
+       i += ft_printf("\t|+2147483647|\n\t|%+5x|\n", 2147483647);
+
+       i += ft_printf("\n");
+       i += ft_printf("\tPrecision:\n");
+
+       i += ft_printf("\n");
+       i += ft_printf("\t||\t|%.0x|\n\n", 0);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|      1998|\t|%10.0x|\n", 1998);
+       i += ft_printf("\t|      1998|\t|%10.1x|\n", 1998);
+       i += ft_printf("\t|      1998|\t|%10.2x|\n", 1998);
+       i += ft_printf("\t|      1998|\t|%10.3x|\n", 1998);
+       i += ft_printf("\t|      1998|\t|%10.4x|\n", 1998);
+       i += ft_printf("\t|     01998|\t|%10.5x|\n", 1998);
+       i += ft_printf("\t|    001998|\t|%10.6x|\n", 1998);
+       i += ft_printf("\t|   0001998|\t|%10.7x|\n", 1998);
+       i += ft_printf("\t|  00001998|\t|%10.8x|\n", 1998);
+       i += ft_printf("\t| 000001998|\t|%10.9x|\n", 1998);
+       i += ft_printf("\t|0000001998|\t|%10.10x|\n", 1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\tFormat arguments given by *:\n");
+       
+       i += ft_printf("\n");
+       i += ft_printf("\t|     01998|\t|%*.5x|\n", 10, 1998);
+       i += ft_printf("\t|     01998|\t|%10.*x|\n", 5, 1998);
+       i += ft_printf("\t|     01998|\t|%*.*x|\n", 10, 5, 1998);
+       i += ft_printf("\t|      1998|\t|%*.*x|\n", 10, -1, 1998);
+       i += ft_printf("\t|      1998|\t|%*.*x|\n", 10, -10, 1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("Trying format X:\n");
+       i += ft_printf("\tWithout flags:\n");
+
+       i += ft_printf("\n\tInput value\tOutput value\n");
+       i += ft_printf("\t-1\t\t\t%X\n", -1);
+       i += ft_printf("\t0\t\t\t%X\n", 0);
+       i += ft_printf("\t1\t\t\t%X\n", 1);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t32767\t\t%X\n", 32767);
+       i += ft_printf("\t32768\t\t%X\n", 32768);
+       i += ft_printf("\t32769\t\t%X\n", 32769);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t65535\t\t%X\n", 65535);
+       i += ft_printf("\t65536\t\t%X\n", 65536);
+       i += ft_printf("\t65537\t\t%X\n", 65537);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t2147483647\t%X\n", 2147483647);
+       i += ft_printf("\t2147483648\t%X\n", 2147483648);
+       i += ft_printf("\t2147483649\t%X\n", 2147483649);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t4294967295\t%X\n", 4294967295);
+       i += ft_printf("\t4294967296\t%X\n", 4294967296);
+       i += ft_printf("\t4294967297\t%X\n", 4294967297);
+
+       i += ft_printf("\n");
+       i += ft_printf("\tWith flags applicable to format X (-0):\n");
+
+       i += ft_printf("\n\tExpected outcome\tActual outcome\n");
+       i += ft_printf("\t|      1998|\t\t|%10X|\n", 1998);
+       i += ft_printf("\t|      1998|\t\t|% 10X|\n", 1998);
+       i += ft_printf("\t|      1998|\t\t|%        10X|\n", 1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|      1998|\t\t|%+10X|\n", 1998);
+       i += ft_printf("\t|      1998|\t\t|%+ 10X|\n", 1998);
+       i += ft_printf("\t|      1998|\t\t|% + + +++     10X|\n", 1998);
+       i += ft_printf("\t|      1998|\t\t|% +10X|\n", 1998);
+       i += ft_printf("\t|      1998|\t\t|%+ + +++   ++  10X|\n", 1998);
+       i += ft_printf("\t|      1998|\t\t|%  + + +   ++10X|\n", 1998);
+       i += ft_printf("\t|      1998|\t\t|%+ +  + ++     +   10X|\n", 1998);
+       i += ft_printf("\t|      1998|\t\t|%+ +  + ++     +   +10X|\n", 1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|0000001998|\t\t|% 010X|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|%0 10X|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|%0    000    0 0010X|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|% 0    000    0 0010X|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|%0    000    0 00 10X|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|% 0    000    0 00 10X|\n", 1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|0000001998|\t\t|%0+10X|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|%+010X|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|%0+ 10X|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|%0 +10X|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|% 0+10X|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|% +010X|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|%+0 10X|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|%+ 010X|\n", 1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|0000001998|\t\t|%010X|\n", 1998);
+       i += ft_printf("\t|0000001998|\t\t|%0000000000010X|\n", 1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|1998      |\t\t|%-10X|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%0-10X|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%-010X|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%-0000-----00-00-0-10X|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%-0000---0-0-0--0-0-0010X|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%0000---0-0-0--0-0-0-10X|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%0000---0-0-0--0-0-0010X|\n", 1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|1998      |\t\t|%- 10X|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|% -10X|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%0 -10X|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|% 0-10X|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|% -010X|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%0- 10X|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%-0 10X|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%- 010X|\n", 1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|1998      |\t\t|%-+10X|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%+-10X|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|% +-10X|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%+ -10X|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%+- 10X|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|% -+10X|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%- +10X|\n", 1998);
+       i += ft_printf("\t|1998      |\t\t|%-+ 10X|\n", 1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\tMinimum width smaller than input:\n");
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|2147483647|\n\t|%5X|\n", 2147483647);
+       i += ft_printf("\t|2147483647|\n\t|%05X|\n", 2147483647);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|2147483647|\n\t|% 5X|\n", 2147483647);
+       i += ft_printf("\t|2147483647|\n\t|% 05X|\n", 2147483647);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|+2147483647|\n\t|%+05X|\n", 2147483647);
+       i += ft_printf("\t|+2147483647|\n\t|%+5X|\n", 2147483647);
+
+       i += ft_printf("\n");
+       i += ft_printf("\tPrecision:\n");
+
+       i += ft_printf("\n");
+       i += ft_printf("\t||\t|%.0X|\n\n", 0);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|      1998|\t|%10.0X|\n", 1998);
+       i += ft_printf("\t|      1998|\t|%10.1X|\n", 1998);
+       i += ft_printf("\t|      1998|\t|%10.2X|\n", 1998);
+       i += ft_printf("\t|      1998|\t|%10.3X|\n", 1998);
+       i += ft_printf("\t|      1998|\t|%10.4X|\n", 1998);
+       i += ft_printf("\t|     01998|\t|%10.5X|\n", 1998);
+       i += ft_printf("\t|    001998|\t|%10.6X|\n", 1998);
+       i += ft_printf("\t|   0001998|\t|%10.7X|\n", 1998);
+       i += ft_printf("\t|  00001998|\t|%10.8X|\n", 1998);
+       i += ft_printf("\t| 000001998|\t|%10.9X|\n", 1998);
+       i += ft_printf("\t|0000001998|\t|%10.10X|\n", 1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("\tFormat arguments given by *:\n");
+       
+       i += ft_printf("\n");
+       i += ft_printf("\t|     01998|\t|%*.5X|\n", 10, 1998);
+       i += ft_printf("\t|     01998|\t|%10.*X|\n", 5, 1998);
+       i += ft_printf("\t|     01998|\t|%*.*X|\n", 10, 5, 1998);
+       i += ft_printf("\t|      1998|\t|%*.*X|\n", 10, -1, 1998);
+       i += ft_printf("\t|      1998|\t|%*.*X|\n", 10, -10, 1998);
+
+       i += ft_printf("\n");
+       i += ft_printf("Testing alt mode (flag #):\n");
+
+       i += ft_printf("\tOctal:\n");
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|     03716|\t|%#10o|\n", 1998);
+       i += ft_printf("\t|0000003716|\t|%#010o|\n", 1998);
+       i += ft_printf("\t|0000003716|\t|%#.10o|\n", 1998);
+       i += ft_printf("\t|         0|\t|%#10o|\n", 0);
+       i += ft_printf("\t|         0|\t|%#10.0o|\n", 0);
+
+       i += ft_printf("\n");
+       i += ft_printf("\tLowercase hex:\n");
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|     0x7ce|\t|%#10x|\n", 1998);
+       i += ft_printf("\t|0x000007ce|\t|%#010x|\n", 1998);
+       i += ft_printf("\t|0x000007ce|\t|%#.8x|\n", 1998);
+       i += ft_printf("\t|         0|\t|%#10x|\n", 0);
+       i += ft_printf("\t|          |\t|%#10.0x|\n", 0);
+
+       i += ft_printf("\n");
+       i += ft_printf("\tUppercase hex:\n");
+
+       i += ft_printf("\n");
+       i += ft_printf("\t|     0X7CE|\t|%#10X|\n", 1998);
+       i += ft_printf("\t|0X000007CE|\t|%#010X|\n", 1998);
+       i += ft_printf("\t|0X000007CE|\t|%#.8X|\n", 1998);
+       i += ft_printf("\t|         0|\t|%#10X|\n", 0);
+       i += ft_printf("\t|          |\t|%#10.0X|\n", 0);
+
+       i += ft_printf("\n");
+       i += ft_printf("Testing format p:\n");
+
+       i += ft_printf("\t(nil)\t\t\t%p\n", 0);
+       i += ft_printf("\t(nil)\t\t\t%p\n", NULL);
+
+       i += ft_printf("\n");
+       i += ft_printf("\t%p\n", 1998);
+       i += ft_printf("\t%10p\n", 1998);
+       i += ft_printf("\t%.10p\n", 1998);
+       i += ft_printf("\t%020p\n", 1998);
+       i += ft_printf("\t%-20p\n", 1998);
+       i += ft_printf("\t%p\n", -1);
+
+       i += ft_printf("\n");
+       i += ft_printf("Testing format c:\n");
+
+       i += ft_printf("\t%c", 'a');
+       i += ft_printf("\t%c", '\n');
+       i += ft_printf("%c%c%c%c%c", '\t', 'b', 'c', 'd', '\n');
+       i += ft_printf("%c%c%c%10c%c%c", '\t', '\0', '|', '|', '\0', '\n');
+       i += ft_printf("%c%c%c%010c%c%c", '\t', '\0', '|', '|', '\0', '\n');
+       i += ft_printf("%c%c%-10c%c%c%c", '\t', '\0', '|', '|', '\0', '\n');
+       i += ft_printf("%c%.0c%c", '\t', '\0', '\n');
+       i += ft_printf("%c%.10c%c", '\t', 'a', '\n');
+
+       i += ft_printf("\n");
+       i += ft_printf("Testing format s:\n");
+
+       i += ft_printf("%s", "");
+       i += ft_printf("\t%s\n", "Hello");
+       i += ft_printf("\t%.31s\n", "This is a not a very long text. Because this second part is not printed.");
+
+       char    *s;
+   
+       s = ft_strdup("The end.");
+       i += ft_printf("\t%s%*s\n", "The end is 20 spaces away", ft_strlen(s) + 20, s);
+       free(s);
+
+       s = ft_strdup("This is always written whole.");
+       i += ft_printf("\t%s\n", s);
+       i += ft_printf("\t%.*s\n", ft_strlen(s), s);
+       i += ft_printf("\t%*s\n", ft_strlen(s), s);
+       i += ft_printf("\t%*.*s\n", ft_strlen(s), ft_strlen(s), s);
+       free(s);
+
+       s = ft_strdup("The number of spaces before this text is equal to half the number of characters in this text (rounded down).");
+       i += ft_printf("%*s", ft_strlen(s) * 3 / 2, s);
+       free(s);
+
+       i += ft_printf("\n");
+       i += ft_printf("This sentence is test of %%%% format.\n");
+
+       i += ft_printf("\n");
+       ft_printf("Characters written so far (without this line):\t%i\n", i);
 
        return (0);
 }
index 600d5cf83e9e46dadcaeb501748f5f4f1f63db9d..2551dfbb65192966849d505c099d6e00db0ac863 100644 (file)
--- a/padding.c
+++ b/padding.c
@@ -6,7 +6,7 @@
 /*   By: ljiriste <marvin@42.fr>                    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2023/09/05 11:25:46 by ljiriste          #+#    #+#             */
-/*   Updated: 2023/09/05 12:13:14 by ljiriste         ###   ########.fr       */
+/*   Updated: 2023/09/08 17:19:54 by ljiriste         ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
@@ -57,7 +57,10 @@ void create_padding(t_to_print *tp, t_conv conv)
        size_t  len;
 
        len = ft_strlen(tp->main_part);
-       tp->zero_pad = repeat_char('0', conv.prec - len);
+       if (conv.type == 's' || conv.type == 'c')
+               tp->zero_pad = ft_strdup("");
+       else
+               tp->zero_pad = repeat_char('0', conv.prec - len);
        len += ft_strlen(tp->zero_pad) + ft_strlen(tp->alt) + (tp->sign != '\0');
        if (conv.flags.left_adjust)
        {
@@ -67,7 +70,7 @@ void  create_padding(t_to_print *tp, t_conv conv)
        else
        {
                tp->right_pad = ft_strdup("");
-               if (!conv.flags.zero_pad || conv.type == 's')
+               if (!conv.flags.zero_pad || conv.type == 's' || conv.type == 'c')
                        tp->left_pad = repeat_char(' ', conv.minwidth - len);
                else if (conv.flags.zero_pad)
                {