// test_skip_block_comment.c #include #include void check_skip_block_comment(const char *str, const char *expect_remaining) { log_set_level(&__default_logger_root, 0); core_pos_t pos = core_pos_init(); core_mem_probe_stream_t mem_stream; core_probe_stream_t *stream = core_mem_probe_stream_init(&mem_stream, str, smcc_strlen(str), false); lex_parse_skip_block_comment(stream, &pos); // Check remaining content char buffer[256] = {0}; int i = 0; int ch; while ((ch = core_probe_stream_consume(stream)) != core_stream_eof && i < 255) { buffer[i++] = (char)ch; } if (expect_remaining) { TEST_CHECK(strcmp(buffer, expect_remaining) == 0); } } void test_simple_block_comment(void) { TEST_CASE("simple block comments"); check_skip_block_comment("/* comment */", ""); check_skip_block_comment("/* comment */ int x;", " int x;"); } void test_multiline_block_comment(void) { TEST_CASE("multiline block comments"); check_skip_block_comment("/* line1\nline2 */", ""); check_skip_block_comment("/* line1\nline2 */ int x;", " int x;"); } void test_nested_asterisk_block_comment(void) { TEST_CASE("nested asterisk block comments"); check_skip_block_comment("/* *** */", ""); check_skip_block_comment("/* *** */ int x;", " int x;"); } TEST_LIST = { {"test_simple_block_comment", test_simple_block_comment}, {"test_multiline_block_comment", test_multiline_block_comment}, {"test_nested_asterisk_block_comment", test_nested_asterisk_block_comment}, {NULL, NULL}, };