aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--Makefile14
-rw-r--r--header.h96
-rw-r--r--helper.c63
-rw-r--r--main.c536
-rw-r--r--moulitest_read_stdout.c74
-rw-r--r--prettier.py43
7 files changed, 690 insertions, 137 deletions
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 <string.h>
# include <stdbool.h>
-# 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 <stdio.h>
+#include <unistd.h>
#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 <fcntl.h>
+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 <stdio.h>
#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 <stdio.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <stdlib.h>
-/* #include <capture.h> */
-#include <errno.h>
-#include <assert.h>
-
-#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)