From fb41e23423854a865201c0803803191d1f65c8fa Mon Sep 17 00:00:00 2001 From: Charles Date: Sat, 2 Nov 2019 01:27:45 +0100 Subject: Fixed false positive, basic prettier, more test from pft --- .gitignore | 1 + Makefile | 14 +- header.h | 96 +++++---- helper.c | 63 +++++- main.c | 536 +++++++++++++++++++++++++++++++++++++++++++++++- moulitest_read_stdout.c | 74 ------- prettier.py | 43 ++++ 7 files changed, 690 insertions(+), 137 deletions(-) delete mode 100644 moulitest_read_stdout.c create mode 100644 prettier.py diff --git a/.gitignore b/.gitignore index 5a19436..f1ffed0 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ a.out ft_printf_test *.o *.ghc +*.dSYM diff --git a/Makefile b/Makefile index dc4e169..5ab6d2c 100644 --- a/Makefile +++ b/Makefile @@ -1,22 +1,28 @@ FT_PRINTF_PATH = ../ft_printf CC = gcc -CCFLAGS = -Wall -Wextra +CCFLAGS = -Wall -Wextra -Wno-format -g LDFLAGS = -L$(FT_PRINTF_PATH) -lftprintf -MAKE = make -j4 NAME = ft_printf_test +PYTHON = python3 RM = rm -f +MAKE = make -j4 SRC = main.c helper.c moulitest_read_stdout.c OBJ = $(SRC:.c=.o) -run: all +run: run_pretty + +run_pretty: all + ./$(NAME) | $(PYTHON) prettier.py + +run_raw: all ./$(NAME) all: $(NAME) -$(NAME): ft_printf_all $(OBJ) +$(NAME): ft_printf_all clean $(OBJ) $(CC) $(LDFLAGS) $(CCFLAGS) -o $@ $(OBJ) %.o: %.c diff --git a/header.h b/header.h index 31bfa81..e002077 100644 --- a/header.h +++ b/header.h @@ -8,12 +8,12 @@ # include # include -# define BUF_SIZE 2048 +# define BUF_SIZE 2048 * 10 int pid; bool signaled; -bool origin_signaled; -bool user_signaled; +static bool origin_signaled = false; +static bool user_signaled = false; int origin_ret; int user_ret; char *origin_buf; @@ -27,55 +27,53 @@ void print_signaled_ko(char *msg); void print_ok(void); void print_ko(void); -/* moulitest functions */ -void capture_close_saved_stdout(void); -void capture_stdout(void); -char *capture_stdout_get_buf(void); -void capture_stdout_destroy(void); +void test_setup(void); +void test_tear_down(void); +char *read_stdout_buf(void); -# define TEST_SEGFAULT(x) do { \ - if ((pid = fork()) < 0) \ - exit(EXIT_FAILURE); \ - if (pid == 0) { \ - do { x } while(0); \ - exit(EXIT_SUCCESS); \ - } \ - wait(&pid); \ - signaled = WIFSIGNALED(pid); \ +# define TEST_SEGFAULT(x) do { \ + if ((pid = fork()) < 0) \ + exit(EXIT_FAILURE); \ + if (pid == 0) { \ + do { x } while(0); \ + exit(EXIT_SUCCESS); \ + } else { \ + wait(&pid); \ + signaled = WIFSIGNALED(pid); \ + } \ } while(0); -# define TEST_PRINTF(...) do { \ - capture_stdout(); \ - TEST_SEGFAULT( \ - origin_ret = printf(__VA_ARGS__); \ - origin_buf = strdup(capture_stdout_get_buf()); \ - ); \ - origin_signaled = signaled; \ - TEST_SEGFAULT( \ - user_ret = ft_printf(__VA_ARGS__); \ - user_buf = strdup(capture_stdout_get_buf()); \ - ); \ - capture_stdout_destroy(); \ - user_signaled = signaled; \ -} while (0); +# define TEST_PRINTF(...) do { \ + test_setup(); \ + TEST_SEGFAULT(\ + origin_ret = printf(__VA_ARGS__); \ + );\ + origin_buf = strdup(read_stdout_buf()); \ + origin_signaled = signaled; \ + TEST_SEGFAULT(\ + user_ret = ft_printf(__VA_ARGS__); \ + );\ + user_buf = strdup(read_stdout_buf()); \ + user_signaled = signaled; \ + test_tear_down(); \ +} while (0) -# define ASSERT_PRINTF(...) do { \ - TEST_PRINTF(__VA_ARGS__); \ - if (!origin_signaled) \ - if (user_signaled) \ - print_signaled_ko(#__VA_ARGS__); \ - else \ - print_ok(); \ - else { \ - if (strcmp(origin_buf, user_buf) != 0) \ - print_buf_ko(#__VA_ARGS__); \ - else if (origin_ret != user_ret) \ - print_ret_ko(#__VA_ARGS__); \ - else \ - print_ko(); \ - } \ - free(origin_buf); \ - free(user_buf); \ -} while (0); +# define ASSERT_PRINTF(...) do { \ + TEST_PRINTF(__VA_ARGS__); \ + if (!origin_signaled && user_signaled) \ + print_signaled_ko(#__VA_ARGS__); \ + else if (origin_signaled && user_signaled) \ + print_ok(); \ + else if (!origin_signaled && !user_signaled) { \ + if (strcmp(origin_buf, user_buf) != 0) \ + print_buf_ko(#__VA_ARGS__); \ + else if (origin_ret != user_ret) \ + print_ret_ko(#__VA_ARGS__); \ + else \ + print_ok(); \ + } \ + if (!origin_signaled) free(origin_buf); \ + if (!user_signaled) free(user_buf); \ +} while(0); #endif diff --git a/helper.c b/helper.c index 1c16409..4b2a7ec 100644 --- a/helper.c +++ b/helper.c @@ -1,27 +1,78 @@ #include +#include #include "header.h" +/* #define BUF_SIZE (1 << 10) */ + +int pipefd[2]; +int saved_stdout = -1; +char buf[BUF_SIZE + 1] = {0}; + +void test_setup(void) +{ + if (saved_stdout != -1) + { + dup2(saved_stdout, STDOUT_FILENO); + close(saved_stdout); + saved_stdout = -1; + close(pipefd[0]); + close(pipefd[1]); + } + if (pipe(pipefd) != 0) + exit(EXIT_FAILURE); + saved_stdout = dup(STDOUT_FILENO); + dup2(pipefd[1], STDOUT_FILENO); +} + +void test_tear_down(void) +{ + if (saved_stdout != -1) + { + dup2(saved_stdout, STDOUT_FILENO); + close(saved_stdout); + saved_stdout = -1; + close(pipefd[0]); + close(pipefd[1]); + } +} + +#include +char *read_stdout_buf(void) +{ + fflush(stdout); + long flags = fcntl(pipefd[0], F_GETFL); + flags |= O_NONBLOCK; + fcntl(pipefd[0], F_SETFL, flags); + int ret = read(pipefd[0], buf, BUF_SIZE); + buf[ret] = '\0'; + fflush(stdout); + return (buf); +} + void print_buf_ko(char *msg) { print_ko(); printf("ft_printf(%s) has wrong output\n", msg); - printf("actual: \"%s\"", origin_buf); - printf("expected: \"%s\"", user_buf); + printf("actual: \"%s\"\n", user_buf); + printf("expected: \"%s\"\n", origin_buf); + fflush(stdout); } void print_ret_ko(char *msg) { print_ko(); printf("ft_printf(%s) has wrong return value\n", msg); - printf("actual: %d", origin_ret); - printf("expected: %d", user_ret); + printf("actual: %d\n", user_ret); + printf("expected: %d\n", origin_ret); + fflush(stdout); } void print_signaled_ko(char *msg) { print_ko(); printf("ft_printf(\"%s\") has been signaled (segfault and friends)\n", msg); + fflush(stdout); } -inline void print_ok(void) { printf("\033[32m[OK]\033[0m\n"); } -inline void print_ko(void) { printf("\033[31m[KO]\033[0m "); } +inline void print_ok(void) { printf("[OK]\n"); fflush(stdout); } +inline void print_ko(void) { printf("[KO] "); fflush(stdout);} diff --git a/main.c b/main.c index ed2b728..d279dcd 100644 --- a/main.c +++ b/main.c @@ -1,11 +1,539 @@ #include #include "header.h" +void test_pft_nacked(void); +void test_pft_string(void); +void test_pft_int(void); +void test_pft_percent(void); + int main(int argc, char **argv) { - ASSERT_PRINTF("%d", 10); - ASSERT_PRINTF("% asdf"); - ASSERT_PRINTF("%fsdf", 5.3); - + test_pft_nacked(); + test_pft_string(); + /* sleep(1); */ + test_pft_int(); + test_pft_percent(); return 0; } + +void test_pft_nacked(void) +{ + ASSERT_PRINTF("hello, world!"); + ASSERT_PRINTF(""); + ASSERT_PRINTF("\t\n\r\v\f\n"); +} + +void test_pft_percent(void) +{ + ASSERT_PRINTF("%%"); + /* ASSERT_PRINTF("%"); */ + ASSERT_PRINTF("%5%"); + ASSERT_PRINTF("%-5%"); + ASSERT_PRINTF("%05%"); + ASSERT_PRINTF("%-05%"); +} + +void test_pft_nocrash(void) +{ + /* ASSERT_PRINTF("%"); */ + ASSERT_PRINTF("%5"); + ASSERT_PRINTF("%05"); + ASSERT_PRINTF("%-05"); + ASSERT_PRINTF("%-5"); +} + +void test_pft_string(void) +{ + ASSERT_PRINTF("hello, %s.", "gavin"); + ASSERT_PRINTF("%s", "testing testing"); + ASSERT_PRINTF("%s%s", "hello", "world"); + ASSERT_PRINTF("..%s stuff %s", "a", "b"); + ASSERT_PRINTF("this %s is empty", ""); + ASSERT_PRINTF("this %s is %s", "hello", ""); + ASSERT_PRINTF("this %s is %s", "", "hello"); + ASSERT_PRINTF("%s%s%s", "1", "2", "3's a charm"); + + ASSERT_PRINTF("%32s", "abc"); + ASSERT_PRINTF("%16s", "nark nark"); + ASSERT_PRINTF("%5s", "goes over"); + ASSERT_PRINTF("%-32s", "abc"); + ASSERT_PRINTF("%-16s", "nark nark"); + ASSERT_PRINTF("%-5s", "goes over"); + ASSERT_PRINTF("%.7s", "hello"); + ASSERT_PRINTF("%.3s", "hello"); + ASSERT_PRINTF("%.s", "hello"); + ASSERT_PRINTF("%.0s", "hello"); + ASSERT_PRINTF("%.3s%.2s", "holla", "bitch"); + ASSERT_PRINTF("%.2s%.7s", "hello", "world"); + ASSERT_PRINTF("%.7s%.2s", "hello", "world"); + ASSERT_PRINTF("%.5s%7s", "yo", "boi"); + ASSERT_PRINTF("%7.5s", "yolo"); + ASSERT_PRINTF("%7.5s", "bombastic"); + ASSERT_PRINTF("%-7.5s", "yolo"); + ASSERT_PRINTF("%-7.5s", "tubular"); + ASSERT_PRINTF("%7.7s%7.7s", "hello", "world"); + ASSERT_PRINTF("%3.7s%7.7s", "hello", "world"); + ASSERT_PRINTF("%7.7s%3.7s", "hello", "world"); + ASSERT_PRINTF("%3.7s%3.7s", "hello", "world"); + ASSERT_PRINTF("%7.3s%7.7s", "hello", "world"); + ASSERT_PRINTF("%3.3s%7.7s", "hello", "world"); + ASSERT_PRINTF("%7.3s%3.7s", "hello", "world"); + ASSERT_PRINTF("%3.3s%3.7s", "hello", "world"); + ASSERT_PRINTF("%7.7s%7.3s", "hello", "world"); + ASSERT_PRINTF("%3.7s%7.3s", "hello", "world"); + ASSERT_PRINTF("%7.7s%3.3s", "hello", "world"); + ASSERT_PRINTF("%3.7s%3.3s", "hello", "world"); + ASSERT_PRINTF("%7.3s%7.3s", "hello", "world"); + ASSERT_PRINTF("%3.3s%7.3s", "hello", "world"); + ASSERT_PRINTF("%7.3s%3.3s", "hello", "world"); + ASSERT_PRINTF("%3.3s%3.3s", "hello", "world"); + ASSERT_PRINTF("%3s%3s", "hello", "world"); + ASSERT_PRINTF("%-7s%5s", "hello", "world"); + ASSERT_PRINTF("%7s%-5s", "hello", "world"); + ASSERT_PRINTF("hello, %s.", NULL); + ASSERT_PRINTF("%s", NULL); + ASSERT_PRINTF("%32s", NULL); + ASSERT_PRINTF("%2s", NULL); + ASSERT_PRINTF("%-32s", NULL); + ASSERT_PRINTF("%-16s", NULL); + ASSERT_PRINTF("%-3s", NULL); + ASSERT_PRINTF("%.9s", "NULL"); + ASSERT_PRINTF("%.3s", "NULL"); + ASSERT_PRINTF("%.s", "NULL"); + ASSERT_PRINTF("%.0s", "NULL"); + + static char *s_hidden = "hi low\0don't print me lol\0"; + ASSERT_PRINTF("%s", s_hidden); + ASSERT_PRINTF("%3s", s_hidden); + ASSERT_PRINTF("%9s", s_hidden); + ASSERT_PRINTF("%.s", s_hidden); + ASSERT_PRINTF("%.9s", s_hidden); + ASSERT_PRINTF("%.03s", s_hidden); + ASSERT_PRINTF("%.09s", s_hidden); + ASSERT_PRINTF("%.03s", NULL); + ASSERT_PRINTF("%.09s", NULL); + ASSERT_PRINTF("%.00s", "\0"); + ASSERT_PRINTF("%.01s", "\0"); + ASSERT_PRINTF("%.03s", "\0"); + ASSERT_PRINTF("%.09s", "\0"); + ASSERT_PRINTF("%3.s", s_hidden); + ASSERT_PRINTF("%10.s", s_hidden); + ASSERT_PRINTF("%3.s", NULL); + ASSERT_PRINTF("%10.s", NULL); + ASSERT_PRINTF("%1.s", "\0"); + ASSERT_PRINTF("%2.s", "\0"); + ASSERT_PRINTF("%9.s", "\0"); + ASSERT_PRINTF("%-3.s", s_hidden); + ASSERT_PRINTF("%-8.s", s_hidden); + ASSERT_PRINTF("%-3.s", NULL); + ASSERT_PRINTF("%-8.s", NULL); + ASSERT_PRINTF("%-1.s", "\0"); + ASSERT_PRINTF("%-2.s", "\0"); + ASSERT_PRINTF("%-6.s", "\0"); + ASSERT_PRINTF("%3.1s", s_hidden); + ASSERT_PRINTF("%10.1s", s_hidden); + ASSERT_PRINTF("%3.1s", NULL); + ASSERT_PRINTF("%9.1s", NULL); + ASSERT_PRINTF("%-3.1s", s_hidden); + ASSERT_PRINTF("%-10.1s", s_hidden); + ASSERT_PRINTF("%-3.1s", NULL); + ASSERT_PRINTF("%-9.1s", NULL); + ASSERT_PRINTF("%-3.1s", "\0"); + ASSERT_PRINTF("%-6.1s", "\0"); + ASSERT_PRINTF("%3.6s", s_hidden); + ASSERT_PRINTF("%20.6s", s_hidden); + ASSERT_PRINTF("%3.6s", NULL); + ASSERT_PRINTF("%20.6s", NULL); + ASSERT_PRINTF("%3.6s", "\0"); + ASSERT_PRINTF("%6.6s", "\0"); + ASSERT_PRINTF("%-3.6s", s_hidden); + ASSERT_PRINTF("%-20.6s", s_hidden); + ASSERT_PRINTF("%-3.8s", s_hidden); + ASSERT_PRINTF("%-10.8s", s_hidden); + ASSERT_PRINTF("%-3.8s", NULL); + ASSERT_PRINTF("%-10.8s", NULL); + ASSERT_PRINTF("%-.00s", s_hidden); + ASSERT_PRINTF("%-.09s", s_hidden); + ASSERT_PRINTF("%+- 06.06s", s_hidden); + ASSERT_PRINTF("% 0+-6.06s", s_hidden); + ASSERT_PRINTF("%0 +-6.06s", s_hidden); + ASSERT_PRINTF("%+-0 6.06s", s_hidden); + ASSERT_PRINTF("%-+ 06.06s", s_hidden); + ASSERT_PRINTF("% -+06.06s", s_hidden); + ASSERT_PRINTF("%+- 07.06s", s_hidden); + ASSERT_PRINTF("% 0+-8.06s", s_hidden); + ASSERT_PRINTF("%0 +-9.06s", s_hidden); + ASSERT_PRINTF("%+-0 10.06s", s_hidden); + ASSERT_PRINTF("%-+ 011.06s", s_hidden); + ASSERT_PRINTF("% -+012.06s", s_hidden); + ASSERT_PRINTF("%+- 06.04s", s_hidden); + ASSERT_PRINTF("% 0+-6.04s", s_hidden); + ASSERT_PRINTF("%0 +-6.04s", s_hidden); + ASSERT_PRINTF("%+-0 6.04s", s_hidden); + ASSERT_PRINTF("%-+ 06.04s", s_hidden); + ASSERT_PRINTF("% 0-+6.04s", s_hidden); + ASSERT_PRINTF("%+- 06.09s", s_hidden); + ASSERT_PRINTF("% 0+-6.09s", s_hidden); + ASSERT_PRINTF("%0 +-6.09s", s_hidden); + ASSERT_PRINTF("%+-0 6.09s", s_hidden); + ASSERT_PRINTF("%-+ 06.09s", s_hidden); + ASSERT_PRINTF("% 0-+6.09s", s_hidden); + ASSERT_PRINTF("%00s", s_hidden); + ASSERT_PRINTF("%000s", s_hidden); + ASSERT_PRINTF("%0000s", s_hidden); + ASSERT_PRINTF("%-00s", s_hidden); + ASSERT_PRINTF("%0-0s", s_hidden); + ASSERT_PRINTF("%00-s", s_hidden); + ASSERT_PRINTF("%03s", s_hidden); + ASSERT_PRINTF("%09s", s_hidden); + ASSERT_PRINTF("%+03s", s_hidden); + ASSERT_PRINTF("%+09s", s_hidden); + ASSERT_PRINTF("%-03s", s_hidden); + ASSERT_PRINTF("%-09s", s_hidden); + ASSERT_PRINTF("%+ 3s", s_hidden); + ASSERT_PRINTF("%+ 6s", s_hidden); +} + +void test_pft_int(void) +{ + ASSERT_PRINTF("this %i number", 17); + ASSERT_PRINTF("this %i number", -267); + ASSERT_PRINTF("this %i number", 0); + ASSERT_PRINTF("%i", 3); + ASSERT_PRINTF("%i", -1); + ASSERT_PRINTF("%i", 0); + ASSERT_PRINTF("this %d number", 17); + ASSERT_PRINTF("this %d number", -267); + ASSERT_PRINTF("this %d number", 0); + ASSERT_PRINTF("%i", 2147483647); + ASSERT_PRINTF("%i", (int)(-2147483678)); + ASSERT_PRINTF("%+i", 5); + ASSERT_PRINTF("%+i", -7); + ASSERT_PRINTF("%+i", 2147483647); + ASSERT_PRINTF("%7i", 33); + ASSERT_PRINTF("%7i", -14); + ASSERT_PRINTF("%3i", 0); + ASSERT_PRINTF("%5i", 52625); + ASSERT_PRINTF("%5i", -2562); + ASSERT_PRINTF("%4i", 94827); + ASSERT_PRINTF("%4i", -2464); + ASSERT_PRINTF("%-7i", 33); + ASSERT_PRINTF("%-7i", -14); + ASSERT_PRINTF("%-3i", 0); + ASSERT_PRINTF("%-5i", 52625); + ASSERT_PRINTF("%-5i", -2562); + ASSERT_PRINTF("%-4i", 94827); + ASSERT_PRINTF("%-4i", -2464); + ASSERT_PRINTF("%+5i", 35); + ASSERT_PRINTF("%+7i", 0); + ASSERT_PRINTF("%+24i", 2147483647); + ASSERT_PRINTF("%.5i", 2); + ASSERT_PRINTF("%.6i", -3); + ASSERT_PRINTF("%.3i", 0); + ASSERT_PRINTF("%.4i", 5263); + ASSERT_PRINTF("%.4i", -2372); + ASSERT_PRINTF("%.3i", 13862); + ASSERT_PRINTF("%.3i",-23646); + ASSERT_PRINTF("%+.7i", 234); + ASSERT_PRINTF("%+.7i", -446); + ASSERT_PRINTF("%+.3i", 3723); + ASSERT_PRINTF("%05i", 43); + ASSERT_PRINTF("%07i", -54); + ASSERT_PRINTF("%03i", 0); + ASSERT_PRINTF("%03i", 634); + ASSERT_PRINTF("%04i", -532); + ASSERT_PRINTF("%04i", -4825); + ASSERT_PRINTF("%+05i", 432); + ASSERT_PRINTF("%+04i", 0); + ASSERT_PRINTF("%8.5i", 34); + ASSERT_PRINTF("%10.5i", -216); + ASSERT_PRINTF("%8.5i", 0); + ASSERT_PRINTF("%8.3i", 8375); + ASSERT_PRINTF("%8.3i", -8473); + ASSERT_PRINTF("%3.7i", 3267); + ASSERT_PRINTF("%3.7i", -2375); + ASSERT_PRINTF("%3.3i", 6983); + ASSERT_PRINTF("%3.3i", -8462); + ASSERT_PRINTF("%-8.5i", 34); + ASSERT_PRINTF("%-10.5i", -216); + ASSERT_PRINTF("%-8.5i", 0); + ASSERT_PRINTF("%-8.3i", 8375); + ASSERT_PRINTF("%-8.3i", -8473); + ASSERT_PRINTF("%-3.7i", 3267); + ASSERT_PRINTF("%-3.7i", -2375); + ASSERT_PRINTF("%-3.3i", 6983); + ASSERT_PRINTF("%-3.3i", -8462); + ASSERT_PRINTF("%+8.5i", 34); + ASSERT_PRINTF("%+10.5i", -216); + ASSERT_PRINTF("%+8.5i", 0); + ASSERT_PRINTF("%+8.3i", 8375); + ASSERT_PRINTF("%+8.3i", -8473); + ASSERT_PRINTF("%+3.7i", 3267); + ASSERT_PRINTF("%+3.7i", -2375); + ASSERT_PRINTF("%+3.3i", 6983); + ASSERT_PRINTF("%+3.3i", -8462); + ASSERT_PRINTF("%+-8.5i", 34); + ASSERT_PRINTF("%+-10.5i", -216); + ASSERT_PRINTF("%+-8.5i", 0); + ASSERT_PRINTF("%+-8.3i", 8375); + ASSERT_PRINTF("%+-8.3i", -8473); + ASSERT_PRINTF("%+-3.7i", 3267); + ASSERT_PRINTF("%+-3.7i", -2375); + ASSERT_PRINTF("%+-3.3i", 6983); + ASSERT_PRINTF("%+-3.3i", -8462); + ASSERT_PRINTF("%08.5i", 34); + ASSERT_PRINTF("%010.5i", -216); + ASSERT_PRINTF("%08.5i", 0); + ASSERT_PRINTF("%08.3i", 8375); + ASSERT_PRINTF("%08.3i", -8473); + ASSERT_PRINTF("%03.7i", 3267); + ASSERT_PRINTF("%03.7i", -2375); + ASSERT_PRINTF("%03.3i", 6983); + ASSERT_PRINTF("%03.3i", -8462); + ASSERT_PRINTF("%0-8.5i", 34); + ASSERT_PRINTF("%0-10.5i", -216); + ASSERT_PRINTF("%0-8.5i", 0); + ASSERT_PRINTF("%0-8.3i", 8375); + ASSERT_PRINTF("%0-8.3i", -8473); + ASSERT_PRINTF("%0-3.7i", 3267); + ASSERT_PRINTF("%0-3.7i", -2375); + ASSERT_PRINTF("%0-3.3i", 6983); + ASSERT_PRINTF("%0-3.3i", -8462); + ASSERT_PRINTF("%0+8.5i", 34); + ASSERT_PRINTF("%0+10.5i", -216); + ASSERT_PRINTF("%0+8.5i", 0); + ASSERT_PRINTF("%0+8.3i", 8375); + ASSERT_PRINTF("%0+8.3i", -8473); + ASSERT_PRINTF("%0+3.7i", 3267); + ASSERT_PRINTF("%0+3.7i", -2375); + ASSERT_PRINTF("%0+3.3i", 6983); + ASSERT_PRINTF("%0+3.3i", -8462); + ASSERT_PRINTF("%0+-8.5i", 34); + ASSERT_PRINTF("%0+-10.5i", -216); + ASSERT_PRINTF("%0+-8.5i", 0); + ASSERT_PRINTF("%0+-8.3i", 8375); + ASSERT_PRINTF("%0+-8.3i", -8473); + ASSERT_PRINTF("%0+-3.7i", 3267); + ASSERT_PRINTF("%0+-3.7i", -2375); + ASSERT_PRINTF("%0+-3.3i", 6983); + ASSERT_PRINTF("%0+-3.3i", -8462); + static char ch_pos_1 = 100, ch_neg_1 = -87; + static short sh_pos_1 = 3047, sh_neg_1 = -8875; + static int i_pos_1 = 878023; + static long l_pos_1 = 22337203685477, l_neg_1 = -22337203685477; + static long long ll_pos_1 = 22337203685477, ll_neg_1 = -22337203685477; + static long lmax = 9223372036854775807; + static long lmin = -9223372036854775807; + static long long llmax = 9223372036854775807; + static long long llmin = -9223372036854775807ll; + ASSERT_PRINTF("%hhi", (char)45); + ASSERT_PRINTF("%hhi", (char)-45); + ASSERT_PRINTF("%hi", (short)385); + ASSERT_PRINTF("%hi", (short)-385); + ASSERT_PRINTF("%li", (long)32); + ASSERT_PRINTF("%li", (long)-32); + ASSERT_PRINTF("%lli", (long long)43); + ASSERT_PRINTF("%lli", (long long)-43); + ASSERT_PRINTF("%hhi", ch_pos_1); + ASSERT_PRINTF("%hhi", ch_neg_1); + ASSERT_PRINTF("%hi", sh_pos_1); + ASSERT_PRINTF("%hi", sh_neg_1); + ASSERT_PRINTF("%li", l_pos_1); + ASSERT_PRINTF("%li", lmax); + ASSERT_PRINTF("%lli", llmax); + ASSERT_PRINTF("%li", l_neg_1); + ASSERT_PRINTF("%lli", ll_pos_1); + ASSERT_PRINTF("%lli", ll_neg_1); + ASSERT_PRINTF("%li", 22337203685477); + ASSERT_PRINTF("%li", -22337203685477); + ASSERT_PRINTF("%lli", 522337203685470ll); + ASSERT_PRINTF("%lli", -522337203685470ll); + ASSERT_PRINTF("%lli", 9223372036854775807ll); + ASSERT_PRINTF("%lli", llmin); + ASSERT_PRINTF("%li", 9223372036854775807l); + ASSERT_PRINTF("%li", lmin); + ASSERT_PRINTF("%hi", (short)32767); + ASSERT_PRINTF("%hi", (short)(-32768)); + ASSERT_PRINTF("%hhi", (char)127); + ASSERT_PRINTF("%hhi", (char)(-128)); + ASSERT_PRINTF("%037li", 22337203685477l); + ASSERT_PRINTF("%.37li", -22337203685477l); + ASSERT_PRINTF("%37lli", 522337203685470ll); + ASSERT_PRINTF("%-37lli", -522337203685470ll); + ASSERT_PRINTF("%+li", 22337203685477l); + ASSERT_PRINTF("[%i] [%i]", i_pos_1, i_pos_1); + ASSERT_PRINTF("[%i] [%li]", i_pos_1, l_pos_1); + ASSERT_PRINTF("[%i] [%lli]", i_pos_1, ll_pos_1); + ASSERT_PRINTF("[%i] [%hi]", i_pos_1, sh_pos_1); + ASSERT_PRINTF("[%i] [%hhi]", i_pos_1, ch_pos_1); + ASSERT_PRINTF("%lli%hhi%lli", ll_pos_1, ch_neg_1, ll_neg_1); + ASSERT_PRINTF("%hi%li%hhi", sh_pos_1, l_neg_1, ch_neg_1); + ASSERT_PRINTF("%li%hhi%hi", l_neg_1, ch_pos_1, sh_pos_1); + ASSERT_PRINTF("%i%lli%hhi", i_pos_1, ll_neg_1, ch_pos_1); + ASSERT_PRINTF("%lli%i%li", ll_neg_1, i_pos_1, l_pos_1); + ASSERT_PRINTF("this % i number", 17); + ASSERT_PRINTF("this % i number", -267); + ASSERT_PRINTF("this % i number", 0); + ASSERT_PRINTF("% i", 3); + ASSERT_PRINTF("% i", -1); + ASSERT_PRINTF("% i", 0); + ASSERT_PRINTF("this % d number", 17); + ASSERT_PRINTF("this % d number", -267); + ASSERT_PRINTF("this % d number", 0); + ASSERT_PRINTF("% i", 2147483647); + ASSERT_PRINTF("% i", (int)(-2147483678)); + ASSERT_PRINTF("% +i", 5); + ASSERT_PRINTF("% +i", -7); + ASSERT_PRINTF("% +i", 2147483647); + ASSERT_PRINTF("% 7i", 33); + ASSERT_PRINTF("% 7i", -14); + ASSERT_PRINTF("% 3i", 0); + ASSERT_PRINTF("% 5i", 52625); + ASSERT_PRINTF("% 5i", -2562); + ASSERT_PRINTF("% 4i", 94827); + ASSERT_PRINTF("% 4i", -2464); + ASSERT_PRINTF("% -7i", 33); + ASSERT_PRINTF("% -7i", -14); + ASSERT_PRINTF("% -3i", 0); + ASSERT_PRINTF("% -5i", 52625); + ASSERT_PRINTF("% -5i", -2562); + ASSERT_PRINTF("% -4i", 94827); + ASSERT_PRINTF("% -4i", -2464); + ASSERT_PRINTF("% +5i", 35); + ASSERT_PRINTF("% +7i", 0); + ASSERT_PRINTF("% +24i", 2147483647); + ASSERT_PRINTF("% .5i", 2); + ASSERT_PRINTF("% .6i", -3); + ASSERT_PRINTF("% .3i", 0); + ASSERT_PRINTF("% .4i", 5263); + ASSERT_PRINTF("% .4i", -2372); + ASSERT_PRINTF("% .3i", 13862); + ASSERT_PRINTF("% .3i",-23646); + ASSERT_PRINTF("% +.7i", 234); + ASSERT_PRINTF("% +.7i", -446); + ASSERT_PRINTF("% +.3i", 3723); + ASSERT_PRINTF("% 05i", 43); + ASSERT_PRINTF("% 07i", -54); + ASSERT_PRINTF("% 03i", 0); + ASSERT_PRINTF("% 03i", 634); + ASSERT_PRINTF("% 04i", -532); + ASSERT_PRINTF("% 04i", -4825); + ASSERT_PRINTF("% +05i", 432); + ASSERT_PRINTF("% +04i", 0); + ASSERT_PRINTF("% 8.5i", 34); + ASSERT_PRINTF("% 10.5i", -216); + ASSERT_PRINTF("% 8.5i", 0); + ASSERT_PRINTF("% 8.3i", 8375); + ASSERT_PRINTF("% 8.3i", -8473); + ASSERT_PRINTF("% 3.7i", 3267); + ASSERT_PRINTF("% 3.7i", -2375); + ASSERT_PRINTF("% 3.3i", 6983); + ASSERT_PRINTF("% 3.3i", -8462); + ASSERT_PRINTF("% -8.5i", 34); + ASSERT_PRINTF("% -10.5i", -216); + ASSERT_PRINTF("% -8.5i", 0); + ASSERT_PRINTF("% -8.3i", 8375); + ASSERT_PRINTF("% -8.3i", -8473); + ASSERT_PRINTF("% -3.7i", 3267); + ASSERT_PRINTF("% -3.7i", -2375); + ASSERT_PRINTF("% -3.3i", 6983); + ASSERT_PRINTF("% -3.3i", -8462); + ASSERT_PRINTF("% +8.5i", 34); + ASSERT_PRINTF("% +10.5i", -216); + ASSERT_PRINTF("% +8.5i", 0); + ASSERT_PRINTF("% +8.3i", 8375); + ASSERT_PRINTF("% +8.3i", -8473); + ASSERT_PRINTF("% +3.7i", 3267); + ASSERT_PRINTF("% +3.7i", -2375); + ASSERT_PRINTF("% +3.3i", 6983); + ASSERT_PRINTF("% +3.3i", -8462); + ASSERT_PRINTF("% +-8.5i", 34); + ASSERT_PRINTF("% +-10.5i", -216); + ASSERT_PRINTF("% +-8.5i", 0); + ASSERT_PRINTF("% +-8.3i", 8375); + ASSERT_PRINTF("% +-8.3i", -8473); + ASSERT_PRINTF("% +-3.7i", 3267); + ASSERT_PRINTF("% +-3.7i", -2375); + ASSERT_PRINTF("% +-3.3i", 6983); + ASSERT_PRINTF("% +-3.3i", -8462); + ASSERT_PRINTF("% 08.5i", 34); + ASSERT_PRINTF("% 010.5i", -216); + ASSERT_PRINTF("% 08.5i", 0); + ASSERT_PRINTF("% 08.3i", 8375); + ASSERT_PRINTF("% 08.3i", -8473); + ASSERT_PRINTF("% 03.7i", 3267); + ASSERT_PRINTF("% 03.7i", -2375); + ASSERT_PRINTF("% 03.3i", 6983); + ASSERT_PRINTF("% 03.3i", -8462); + ASSERT_PRINTF("% 0-8.5i", 34); + ASSERT_PRINTF("% 0-10.5i", -216); + ASSERT_PRINTF("% 0-8.5i", 0); + ASSERT_PRINTF("% 0-8.3i", 8375); + ASSERT_PRINTF("% 0-8.3i", -8473); + ASSERT_PRINTF("% 0-3.7i", 3267); + ASSERT_PRINTF("% 0-3.7i", -2375); + ASSERT_PRINTF("% 0-3.3i", 6983); + ASSERT_PRINTF("% 0-3.3i", -8462); + ASSERT_PRINTF("% 0+8.5i", 34); + ASSERT_PRINTF("% 0+10.5i", -216); + ASSERT_PRINTF("% 0+8.5i", 0); + ASSERT_PRINTF("% 0+8.3i", 8375); + ASSERT_PRINTF("% 0+8.3i", -8473); + ASSERT_PRINTF("% 0+3.7i", 3267); + ASSERT_PRINTF("% 0+3.7i", -2375); + ASSERT_PRINTF("% 0+3.3i", 6983); + ASSERT_PRINTF("% 0+3.3i", -8462); + ASSERT_PRINTF("% 0+-8.5i", 34); + ASSERT_PRINTF("% 0+-10.5i", -216); + ASSERT_PRINTF("% 0+-8.5i", 0); + ASSERT_PRINTF("% 0+-8.3i", 8375); + ASSERT_PRINTF("% 0+-8.3i", -8473); + ASSERT_PRINTF("% 0+-3.7i", 3267); + ASSERT_PRINTF("% 0+-3.7i", -2375); + ASSERT_PRINTF("% 0+-3.3i", 6983); + ASSERT_PRINTF("% 0+-3.3i", -8462); + ASSERT_PRINTF("% hhi", (char)45); + ASSERT_PRINTF("% hhi", (char)-45); + ASSERT_PRINTF("% hi", (short)385); + ASSERT_PRINTF("% hi", (short)-385); + ASSERT_PRINTF("% li", (long)32); + ASSERT_PRINTF("% li", (long)-32); + ASSERT_PRINTF("% lli", (long long)43); + ASSERT_PRINTF("% lli", (long long)-43); + ASSERT_PRINTF("% hhi", ch_pos_1); + ASSERT_PRINTF("% hhi", ch_neg_1); + ASSERT_PRINTF("% hi", sh_pos_1); + ASSERT_PRINTF("% hi", sh_neg_1); + ASSERT_PRINTF("% li", l_pos_1); + ASSERT_PRINTF("% li", l_neg_1); + ASSERT_PRINTF("% lli", ll_pos_1); + ASSERT_PRINTF("% lli", ll_neg_1); + ASSERT_PRINTF("% li", 22337203685477l); + ASSERT_PRINTF("% li", -22337203685477l); + ASSERT_PRINTF("% lli", 522337203685470ll); + ASSERT_PRINTF("% lli", -522337203685470ll); + ASSERT_PRINTF("% lli", 9223372036854775807ll); + ASSERT_PRINTF("% lli", llmin); + ASSERT_PRINTF("% li", 9223372036854775807l); + ASSERT_PRINTF("% li", lmin); + ASSERT_PRINTF("% hi", (short)32767); + ASSERT_PRINTF("% hi", (short)(-32768)); + ASSERT_PRINTF("% hhi", (char)(127)); + ASSERT_PRINTF("% hhi", (char)(-128)); + ASSERT_PRINTF("%.0i", 0); + ASSERT_PRINTF("%.i", 0); + ASSERT_PRINTF("%5.0i", 0); + ASSERT_PRINTF("%5.i", 0); + ASSERT_PRINTF("%-5.0i", 0); + ASSERT_PRINTF("%-5.i", 0); + ASSERT_PRINTF("%+.0i", 0); + ASSERT_PRINTF("%+.i", 0); + ASSERT_PRINTF("%+5.0i", 0); + ASSERT_PRINTF("%+5.i", 0); + ASSERT_PRINTF("%+-5.0i", 0); + ASSERT_PRINTF("%+-5.i", 0); + ASSERT_PRINTF("%hhi", -129); + ASSERT_PRINTF("%hhi", 128); + ASSERT_PRINTF("%hi", 32768); + ASSERT_PRINTF("%hi", -32769); +} diff --git a/moulitest_read_stdout.c b/moulitest_read_stdout.c deleted file mode 100644 index e2e61d2..0000000 --- a/moulitest_read_stdout.c +++ /dev/null @@ -1,74 +0,0 @@ -/* - * This is a copy and paste from - * https://github.com/yyang42/moulitest/blob/205892c29f77027dc45c6a09b6ec26b5a5f8116c/testframework/v3/srcs/capture/capture.c - */ - -#include -#include -#include -#include -/* #include */ -#include -#include - -#define MAX_LEN 42000 -#define BUF_SIZE MAX_LEN + 1 -#define READ 0 -#define WRITE 1 -#define NO_FD_OPENED -1 - -int saved_stdout = NO_FD_OPENED; -int out_pipe[2]; -char out_buffer[10 * 1000]; - -void capture_close_saved_stdout(void) -{ - extern int saved_stdout; - - if (saved_stdout != NO_FD_OPENED) - { - /* fprintf(stderr, "== close %d ==\n", saved_stdout); */ - dup2(saved_stdout, STDOUT_FILENO); - close(saved_stdout); /* important ! */ - saved_stdout = NO_FD_OPENED; - close(out_pipe[READ]); - close(out_pipe[WRITE]); - } -} - -void capture_stdout(void) -{ - capture_close_saved_stdout(); - if(pipe(out_pipe) != 0) { /* make a pipe */ - assert(0); - } - assert(saved_stdout < 100); - saved_stdout = dup(STDOUT_FILENO); /* save stdout for display later */ - dup2(out_pipe[WRITE], STDOUT_FILENO); /* redirect stdout to the pipe */ -} - -static void capture_unblock_fd(int fd) -{ - int flags = fcntl(fd, F_GETFL, 0); - fcntl(fd, F_SETFL, flags | O_NONBLOCK); -} - -char *capture_stdout_get_buf(void) -{ - int ret; - fflush(stdout); - - capture_unblock_fd(out_pipe[0]); - *(out_buffer) = '\0'; - ret = read(out_pipe[READ], out_buffer, MAX_LEN); /* read from pipe into buffer */ - out_buffer[ret] = '\0'; - return (out_buffer); -} - -void capture_stdout_destroy(void) -{ - extern int saved_stdout; - dup2(saved_stdout, STDOUT_FILENO); /* reconnect stdout for testing */ - capture_close_saved_stdout(); - //free(cap); -} diff --git a/prettier.py b/prettier.py new file mode 100644 index 0000000..40b4666 --- /dev/null +++ b/prettier.py @@ -0,0 +1,43 @@ +import sys + +def green(*strings): + return "".join([f"\033[32m{s}\033[0m" for s in strings]) + +def red(*strings): + return "".join([f"\033[31m{s}\033[0m" for s in strings]) + + +def parse(): + logs = { + "ok": 0, + "ko": 0, + "ko_info": [] + } + + for line in sys.stdin: + line = line.strip() + if line.find("[OK]") != -1: + logs["ok"] += 1 + print(green("."), end="") + elif line.find("[KO]") != -1: + logs["ko"] += 1 + logs["ko_info"].append({ + "msg": line[line.find("[KO]") + 5:], + "expected": sys.stdin.readline(), + "actual": sys.stdin.readline() + }) + print(red("!"), end="") + sys.stdout.flush() + return logs + + +# def write_logs(logs): + +def print_logs(logs): + print(f"Total {green('OK:', logs['ok'])} {red('KO:', logs['ko'])}") + +if __name__ == "__main__": + logs = parse() + print() + # write_logs(logs) + print_logs(logs) -- cgit