#include #include #include #include #include static scc_probe_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); scc_mem_probe_stream_t *mem_stream = malloc(sizeof(scc_mem_probe_stream_t)); scc_probe_stream_t *stream = scc_mem_probe_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); scc_pproc_t pp; scc_mem_probe_stream_t stream; scc_probe_stream_t *output_stream = scc_pproc_init(&pp, from_file_stream(fsrc)); scc_probe_stream_t *expect_stream = from_file_stream(fexpect); TEST_CASE(src_fname); while (1) { int output_ch = scc_probe_stream_consume(output_stream); int expect_ch = scc_probe_stream_consume(expect_stream); TEST_CHECK(output_ch == expect_ch); TEST_MSG("output: %c %x, expect: %c %x", output_ch, output_ch, expect_ch, expect_ch); if (output_ch != expect_ch) { break; } if (output_ch == scc_stream_eof) { break; } } scc_pproc_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}, };