From 4144bb99e4e514ea5e24996a3b12b08e6cf5583a Mon Sep 17 00:00:00 2001 From: Lukas Jiriste Date: Fri, 8 Sep 2023 18:07:04 +0200 Subject: [PATCH] The test is "complete" and the functions were patched so that they pass the test. --- Libft | 2 +- Makefile | 2 +- conversion.c | 61 ++- formatting.c | 41 +- main.c | 1007 ++++++++++++++++++++++++++++++++++++++++++++------ padding.c | 9 +- 6 files changed, 973 insertions(+), 149 deletions(-) diff --git a/Libft b/Libft index f3d297f..f56fd06 160000 --- a/Libft +++ b/Libft @@ -1 +1 @@ -Subproject commit f3d297fe160d8798b15c8a830b57281288abaaf6 +Subproject commit f56fd060021c191397b4bbb600d5e9f4f1203fee diff --git a/Makefile b/Makefile index a1634f0..5a6de6f 100644 --- 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 diff --git a/conversion.c b/conversion.c index 8e77512..f10d4cd 100644 --- a/conversion.c +++ b/conversion.c @@ -6,7 +6,7 @@ /* By: ljiriste +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* 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)); } diff --git a/formatting.c b/formatting.c index 68c67f9..ae6f8ec 100644 --- a/formatting.c +++ b/formatting.c @@ -6,31 +6,46 @@ /* By: ljiriste +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* 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 // NULL +#include #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 0eaee8b..feedf74 100644 --- a/main.c +++ b/main.c @@ -6,128 +6,905 @@ /* By: ljiriste +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* 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 #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); } diff --git a/padding.c b/padding.c index 600d5cf..2551dfb 100644 --- a/padding.c +++ b/padding.c @@ -6,7 +6,7 @@ /* By: ljiriste +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* 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) { -- 2.30.2