From 57da7d5780b30af76ea3cc9b4c8ace1d42796147 Mon Sep 17 00:00:00 2001 From: Sabine linguanotto Date: Wed, 26 Feb 2020 02:23:35 +0100 Subject: [PATCH] le debugger en macro fonctionne avec le decompte des erreurs et les deux fichiers de sauvegarde --- ft_printf | Bin 49916 -> 66784 bytes main.c | 139 ++++++++++++++++++++++++++++++------------------------ out1.txt | 2 - out2.txt | 2 - outf.txt | 27 +---------- outft.txt | 1 + 6 files changed, 80 insertions(+), 91 deletions(-) delete mode 100644 out1.txt delete mode 100644 out2.txt diff --git a/ft_printf b/ft_printf index 03f78729b0e97ba4360c8e101d7c898a4647d929..c4f5bf011d77172ebdabebf580f8672d84cc773f 100755 GIT binary patch literal 66784 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 diff --git a/main.c b/main.c index 99e0af1..5f6e6a1 100644 --- a/main.c +++ b/main.c @@ -9,71 +9,76 @@ // then the result of real printf, // then the result of ft_printf, // and finally redirect the output into a file to compare - -//#define PRINT(string, args...) \ -// printf("(%s, %s)", #string, #args); \ -// printf("%*s", (int)(40 - ft_strlen(#string) - ft_strlen(#args)), ": "); \ -// printf("'" string "'\n", ##args); \ -// ft_printf("%45s" string "'\n\n", ": '", ##args); \ -// dup2(outf, 1); \ -// printf(string "\n", ##args); \ -// dup2(outft, 1); \ -// ft_printf(string "\n", ##args); \ -// dup2(save, 1); \ -// ft_compare(outf, outft); - #define PRINT(string, args...) \ - printf("zero"); \ - write(1, "\n", 1); \ + outf = open("outf.txt", O_WRONLY | O_TRUNC); \ + outft = open("outft.txt", O_WRONLY | O_TRUNC); \ + \ dup2(outf, 1); \ - write(1, "\n", 1); \ - dup2(save, 1); - // printf("un\n"); \ + printf(string "\n", ##args); \ + fflush(stdout); \ + \ dup2(outft, 1); \ - ft_printf("deux\n"); \ + ft_printf(string "\n", ##args); \ + fflush(stdout); \ + \ + close(outf); \ + close(outft); \ + outf = open("outf.txt", O_RDONLY); \ + outft = open("outft.txt", O_RDONLY); \ + \ dup2(save, 1); \ - printf("trois"); + printf("(%s, %s)", #string, #args); \ + fflush(stdout); \ + printf("%*s", (int)(40 - ft_strlen(#string) - ft_strlen(#args)), ": "); \ + fflush(stdout); \ + printf("'" string "'\n", ##args); \ + fflush(stdout); \ + printf("%s", ft_compare(outf, outft, &error)); \ + fflush(stdout); \ + ft_printf("%38s" string "'\n\n", ": '", ##args); \ + fflush(stdout); \ + \ + close(outf); \ + close(outft); - // #include - // ft_printf("Hi file\n"); - // int out = open("out.txt", O_WRONLY); - // int save = dup(1); - // dup2(out, 1); - // ft_printf("Ho fole\n"); - // dup2(save, 1); - // ft_printf("Ha fale\n"); - // dup2(out, 1); - // ft_printf("Hu fule\n"); - // dup2(save, 1); - // ft_printf("He fele\n"); - // close(save); - // close(out); +/* +** this fucntion look into the two files outf.txt and outft.txt in which +** the return values of printf and ft_printf are saved for one call +** (the content is emptied each time there are reopened by the macro) +** and it read them and compare them +*/ -char *ft_compare(int fd1, int fd2) +char *ft_compare(int fd1, int fd2, int *error) { int ret1 = 1; int ret2 = 1; - char *line1 = NULL; - char *line2 = NULL; + char *line = NULL; + char *tmp = NULL; while (ret1 > 0 && ret2 > 0) { - if ((ret1 = get_next_line(fd1, &line1)) > 0) - { - if ((ret2 = get_next_line(fd2, &line2)) > 0) - { - if (ft_strcmp(line1, line2) == 0) - return ("JACKPOT"); - else - return ("HO HO.."); - } - } + ret1 = get_next_line(fd1, &line); + tmp = line; + ret2 = get_next_line(fd2, &line); + if (ft_strcmp(tmp, line) != 0) + { + (*error)++; + return ("\033[91mHO HO..\033[0m"); + } } - if (ret1 == ret2) - return ("JACKPOT"); - return ("HO HO.."); + if (ret1 != ret2) + { + (*error)++; + return ("\033[91mHO HO..\033[0m"); + } + return ("JACKPOT"); } +/* +** this function was usefull at the very beginning to understand how va_arg +** works, it's an extension of the exemple code found in the man page +*/ + int ft_printf_test(char *string, ...) { va_list ap; @@ -114,10 +119,22 @@ int ft_printf_test(char *string, ...) return (0); } +/* +** this is the main function of tests, with a loooooot of tests, enjoy ;) +** if you call the executable without arguments, it will print the rules +** otherwise you can add one of three keywords : +** "man" for the very beginner tests +** "test" for the debug tests while building the programm +** "all" for the huge amount of possibly complete tests +*/ + int main(int ac, char **av) { - int outf = open("outf.txt", O_WRONLY); - int outft = open("outft.txt", O_WRONLY); + int outf; + int outft; + open("outf.txt", O_CREAT, 0644); + open("outft.txt", O_CREAT, 0644); + static int error = 0; int save = dup(1); /* ////////////////////////////////////////////////////////////////// */ @@ -162,7 +179,7 @@ int main(int ac, char **av) if (ac == 2 && !strcmp(av[1], "test")) { - PRINT("sdf"); + PRINT("s\ndf"); PRINT("%i", 23); long int k = -23; PRINT("%li", k); @@ -178,9 +195,9 @@ int main(int ac, char **av) PRINT("%.2i", 122); PRINT("%.25i", 123); PRINT("%0.6i", 124); -// PRINT("%-032.6i", 125); -// PRINT("%0-032.6i", 126); -// PRINT("%0-0.6i", 127); + // PRINT("%-032.6i", 125); + // PRINT("%0-032.6i", 126); + // PRINT("%0-0.6i", 127); PRINT("%s", "string"); PRINT("%.7s", "strong"); PRINT("%.2s", "strung"); @@ -191,10 +208,10 @@ int main(int ac, char **av) PRINT("%0i", -129); PRINT("%10i", -130); PRINT("%*i", 0,-131); -// PRINT("%0s", "stryng"); + // PRINT("%0s", "stryng"); PRINT("%10s", "strxng"); -// PRINT("%010s", "strzng"); -// PRINT("%010s" "__TEST__", "strzng"); + // PRINT("%010s", "strzng"); + // PRINT("%010s" "__TEST__", "strzng"); } @@ -761,8 +778,8 @@ int main(int ac, char **av) /* ////////////////////////////////////////////////////////////////// */ close(save); - close(outf); - close(outft); + if (error != 0) + printf("\033[91m%i ERRORS\033[0m\n", error); return (0); } diff --git a/out1.txt b/out1.txt deleted file mode 100644 index 4f03677..0000000 --- a/out1.txt +++ /dev/null @@ -1,2 +0,0 @@ -printf :test1 -printf :test2 diff --git a/out2.txt b/out2.txt deleted file mode 100644 index 11afd15..0000000 --- a/out2.txt +++ /dev/null @@ -1,2 +0,0 @@ -printf2:test1 -printf2:test2 diff --git a/outf.txt b/outf.txt index 5a7139b..b0a0f1c 100644 --- a/outf.txt +++ b/outf.txt @@ -1,26 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - + strxng diff --git a/outft.txt b/outft.txt index e69de29..b0a0f1c 100644 --- a/outft.txt +++ b/outft.txt @@ -0,0 +1 @@ + strxng