#include #include #include #include #include static core_stream_t *from_file_stream(FILE *fp) { if (fseek(fp, 0, SEEK_END) != 0) { perror("fseek failed"); return NULL; } usize fsize = ftell(fp); if (fseek(fp, 0, SEEK_SET)) { perror("fseek failed"); return NULL; } char *buffer = (char *)malloc(fsize); usize read_ret = fread(buffer, 1, fsize, fp); fclose(fp); core_mem_stream_t *mem_stream = malloc(sizeof(core_mem_stream_t)); core_stream_t *stream = core_mem_stream_init(mem_stream, buffer, fsize, true); return stream; } static void test_file(const char *name) { char src_fname[1024]; char expected_fname[1024]; snprintf(src_fname, sizeof(src_fname), __FILE__ "/../pp/%s.c", name); snprintf(expected_fname, sizeof(expected_fname), __FILE__ "/../pp/%s.expect", name); FILE *fsrc = fopen(src_fname, "r"); assert(fsrc != NULL); FILE *fexpect = fopen(expected_fname, "r"); assert(fexpect != NULL); smcc_pp_t pp; core_mem_stream_t stream; core_stream_t *output_stream = pp_init(&pp, from_file_stream(fsrc)); core_stream_t *expect_stream = from_file_stream(fexpect); while (1) { int output_ch = core_stream_next_char(output_stream); int expect_ch = core_stream_next_char(expect_stream); TEST_CHECK(output_ch == expect_ch); TEST_MSG("output: %c, expect: %c", output_ch, expect_ch); if (output_ch == core_stream_eof) { break; } } pp_drop(&pp); } static void test_basic(void) { char name[32]; // for (int i = 1; i <= 22; ++i) { // snprintf(name, sizeof(name), "%02d", i); // test_file(name); // } } TEST_LIST = { {"basic", test_basic}, {NULL, NULL}, };