#ifndef FT_PRINTF_TEST_HEADER_H # define FT_PRINTF_TEST_HEADER_H # include # include # include # include # include # include # define BUF_SIZE 2048 * 10 int pid; bool signaled; static bool origin_signaled = false; static bool user_signaled = false; int origin_ret; int user_ret; char *origin_buf; char *user_buf; int ft_printf(const char *format, ...); void print_buf_ko(char *msg); void print_ret_ko(char *msg); void print_signaled_ko(char *msg); void print_ok(void); void print_ko(void); void test_setup(void); void test_tear_down(void); char *read_stdout_buf(void); void test_pft_nacked(void); void test_pft_percent(void); void test_pft_string(void); void test_pft_int_i(void); void test_pft_int_d(void); void test_ptf_uint(void); void test_ptf_hex_low(void); void test_ptf_hex_up(void); void test_pft_ptr(void); void test_pft_char(void); void test_moulitest_00(void); void test_moulitest_01(void); void test_moulitest_02(void); void test_moulitest_03(void); void test_moulitest_04(void); void test_moulitest_05(void); void test_moulitest_06(void); void test_moulitest_09(void); void test_moulitest_12(void); void test_moulitest_14(void); void test_moulitest_15(void); void test_moulitest_16(void); void test_moulitest_18(void); void test_moulitest_40(void); void test_moulitest_41(void); void test_moulitest_42(void); void test_moulitest_43(void); void test_moulitest_45(void); void test_moulitest_50(void); void test_moulitest_51(void); void test_moulitest_52(void); void test_moulitest_60(void); void test_moulitest_61(void); void test_moulitest_69(void); void test_moulitest_70(void); void test_moulitest_71(void); void test_moulitest_72(void); void test_moulitest_73(void); void test_moulitest_74(void); void test_moulitest_79(void); void test_moulitest_90(void); void test_moulitest_91(void); void test_moulitest_wildcard_01(void); void test_moulitest_wildcard_02(void); void test_moulitest_wildcard_03(void); # 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 { \ 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 && 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