--- lbbs/src/test_lml.c 2025/11/11 00:28:05 1.30 +++ lbbs/src/test_lml.c 2025/12/19 14:08:44 1.32 @@ -12,7 +12,9 @@ #include "lml.h" #include "log.h" +#include "trie_dict.h" #include +#include #include #include #include @@ -20,9 +22,11 @@ enum _test_lml_constant_t { - STR_OUT_BUF_SIZE = 256, + STR_OUT_BUF_SIZE = 4096, }; +static const char TRIE_DICT_SHM_FILE[] = "~trie_dict_shm.dat"; + const char *str_in[] = { "[left]ABCD[right]EFG", "A[u]B[italic]CD[/i]E[/u]F[b]G[/bold]", @@ -47,6 +51,24 @@ const char *str_in[] = { "\033[0m\033[I \033[1;32m;, ;,\033[m", "\n01234567890123456789012345678901234567890123456789012345678901234567890123456789\n2\n01234567890123456789012345678901234567890123456789012345678901234567890123456789\n4\n5\n", "A[012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789]B", + "[nolml]发信人:feilan.bbs@bbs.sjtu.edu.cn (蓝,本是路人),信区:cn.bbs.sci.medicine\n" + "标 题:Re: 阑尾有益寿延年功能 尾骨是有用的“小尾巴”\n" + "发信站:饮水思源\n" + "转信站:LeafOK!news.ccie.net.cn!SJTU\n" + "\n" + "昏\n" + "当然是阑尾\n" + "【 在 lang (浪子~继续减肥&戒酒) 的大作中提到: 】\n" + ": 阑尾?\n" + ": 扁桃体?\n" + ": 还是尾椎?\n" + ": 【 在 feilan (蓝,本是路人) 的大作中提到: 】\n" + ": : -________________-!!!\n" + ": : 完了\n" + ": : 我已经割掉了\n" + ": : 555555555555\n" + ": : ", + "[image http://us.ent4.yimg.com/movies.yahoo.com/images/hv/photo/movie_pix/images/hv/photo/movie_pix/]\n", }; const int str_cnt = sizeof(str_in) / sizeof(const char *); @@ -59,9 +81,17 @@ int main(int argc, char *argv[]) double lml_time_spent; char str_out_buf[STR_OUT_BUF_SIZE]; + FILE *fp; int i; int j; + // Apply the specified locale + if (setlocale(LC_ALL, "en_US.UTF-8") == NULL) + { + fprintf(stderr, "setlocale(LC_ALL, en_US.UTF-8) error\n"); + return -1; + } + if (log_begin("../log/bbsd.log", "../log/error.log") < 0) { printf("Open log error\n"); @@ -71,14 +101,40 @@ int main(int argc, char *argv[]) log_common_redir(STDOUT_FILENO); log_error_redir(STDERR_FILENO); + if ((fp = fopen(TRIE_DICT_SHM_FILE, "w")) == NULL) + { + log_error("fopen(%s) error", TRIE_DICT_SHM_FILE); + return -1; + } + fclose(fp); + + if (trie_dict_init(TRIE_DICT_SHM_FILE, TRIE_NODE_PER_POOL) < 0) + { + printf("trie_dict_init failed\n"); + return -1; + } + clock_begin = clock(); + if (lml_init() < 0) + { + printf("lml_init() error\n"); + log_end(); + return -1; + } + printf("Test #1: quote_mode = 0\n"); for (i = 0; i < str_cnt; i++) { j = lml_render(str_in[i], str_out_buf, sizeof(str_out_buf), 80, 0); - printf("Input(len=%ld): %s\nOutput(len=%d): %s\n", strlen(str_in[i]), str_in[i], j, str_out_buf); + printf("Input(len=%ld): %s\nOutput(len=%d): %s\n", + strlen(str_in[i]), str_in[i], j, str_out_buf); + if (j != strlen(str_out_buf)) + { + printf("Output len(%ld) != ret(%d)\n", strlen(str_out_buf), j); + return -1; + } } printf("Test #1: Done\n\n"); @@ -87,7 +143,13 @@ int main(int argc, char *argv[]) { j = lml_render(str_in[i], str_out_buf, sizeof(str_out_buf), 80, 1); - printf("Input(len=%ld): %s\nOutput(len=%d): %s\n", strlen(str_in[i]), str_in[i], j, str_out_buf); + printf("Input(len=%ld): %s\nOutput(len=%d): %s\n", + strlen(str_in[i]), str_in[i], j, str_out_buf); + if (j != strlen(str_out_buf)) + { + printf("Output len(%ld) != ret(%d)\n", strlen(str_out_buf), j); + return -1; + } } printf("Test #2: Done\n\n"); @@ -97,6 +159,15 @@ int main(int argc, char *argv[]) printf("\npage_exec_duration=%.2f, lml_exec_duration=%.2f\n", prog_time_spent, lml_time_spent); + lml_cleanup(); + trie_dict_cleanup(); + + if (unlink(TRIE_DICT_SHM_FILE) < 0) + { + log_error("unlink(%s) error", TRIE_DICT_SHM_FILE); + return -1; + } + log_end(); return 0;