/[LeafOK_CVS]/lbbs/src/test_lml.c
ViewVC logotype

Diff of /lbbs/src/test_lml.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.5 by sysadm, Tue Jun 3 02:30:18 2025 UTC Revision 1.31 by sysadm, Sat Nov 22 10:35:51 2025 UTC
# Line 1  Line 1 
1  /***************************************************************************  /* SPDX-License-Identifier: GPL-3.0-or-later */
2                                               test_lml.c  -  description  /*
3                                                           -------------------   * test_lml
4          Copyright            : (C) 2004-2025 by Leaflet   *   - tester for LML render
5          Email                : leaflet@leafok.com   *
6   ***************************************************************************/   * Copyright (C) 2004-2025  Leaflet <leaflet@leafok.com>
7     */
8  /***************************************************************************  
9   *                                                                         *  #ifdef HAVE_CONFIG_H
10   *   This program is free software; you can redistribute it and/or modify  *  #include "config.h"
11   *   it under the terms of the GNU General Public License as published by  *  #endif
  *   the Free Software Foundation; either version 3 of the License, or     *  
  *   (at your option) any later version.                                   *  
  *                                                                         *  
  ***************************************************************************/  
12    
13  #include "lml.h"  #include "lml.h"
14  #include "log.h"  #include "log.h"
15    #include <errno.h>
16    #include <locale.h>
17  #include <stdio.h>  #include <stdio.h>
18  #include <string.h>  #include <string.h>
19    #include <time.h>
20  #include <unistd.h>  #include <unistd.h>
 #include <errno.h>  
21    
22  #define STR_OUT_BUF_SIZE 1024  enum _test_lml_constant_t
23    {
24            STR_OUT_BUF_SIZE = 4096,
25    };
26    
27  const char *str_in[] = {  const char *str_in[] = {
28          "[left]ABCD[right]EFG",          "[left]ABCD[right]EFG",
29          "A[u]B[italic]CD[/i]E[/underline][b]FG[/bold]",          "A[u]B[italic]CD[/i]E[/u]F[b]G[/bold]",
30          "A[url BCDE[/url]FG",          "A[url BC DE]测试a网址[/url]FG",
31          "AB[email CDE]F[/eMAil]G01[emaiL]23456[/email]789",          "AB[email CDE]F[/eMAil]G01[emaiL]23456[/email]789",
32          "A[user DE]BC[  /User  ]FG",          "A[user DE]BC[/User]FG",
33          "[article A B CD]EF[/article   ]G",          "[article A B CD]EF[  /article]G[article 789]123[/article]456",
34          "A[ image  BCD]EFG",          "A[ image  BCD]EFG",
35          "AB[ Flash  CDE ]FG",          "AB[ Flash  CDE ]FG",
36          "AB[bwf]CDEFG",          "AB[bwf]CDEFG",
37          "[lef]A[rightBCD[right]EF[left[left[]G[left",          "[lef]A[rightBCD[right]EF[left[left[]G[left",
38          "A[ color  BCD]EF[/color]G[color black]0[/color][color magenta]1[color cyan]23[/color]4[color red]5[/color]6[color yellOw]7[/color]8[color green]9[color blue]0[/color]",          "A[ color  BCD]EF[/color]G[color black]0[/color][color magenta]1[color cyan]23[/color]4[color red]5[/color]6[color yellOw]7[/color]8[color green]9[color blue]0[/color]",
39          "A[quote]B[quote]C[quote]D[quote]E[/quote]F[/quote]G[/quote]0[/quote]1[/quote]2[quote]3[/quote]4[/quote]56789",          "A[quote]B[quote]C[quote]D[quote]E[/quote]F[/quote]G[/quote]0[/quote]1[/quote]2[quote]3[/quote]4[/quote]56789",
40          ": ABCDE[quote]FG\r\nab[/quote]cd[quote]ef[quote]g\r\n: : 012[/quote]345[/quote]6789\nABC[quote]DEFG"          ": ABCDE[quote]FG\r\nab[/quote]cd[quote]ef[quote]g\r\n: : 012[/quote]345[/quote]6789\nABC[quote]DEFG",
41            "\033[1;35;42mABC\033[0mDE\033[334mF\033[33mG\033[12345\033[m",
42            "123456",
43            "[color red]Red[/color][plain][color blue]Blue[/color][plain]",
44            "[color yellow]Yellow[/color][nolml][left][color blue]Blue[/color][right][lml][color red]Red[/color]",
45            "[abc][left ][ right ][ colory ][left  \nABCD[left]EFG[right ",
46            "ABCD]EFG",
47            ": : A123456789B123456789C123456789D123456789E123456789F123456789G123456789H123456789I123456789J123456789",
48            "\033[0m\033[I             \033[1;32m;,                                           ;,\033[m",
49            "\n01234567890123456789012345678901234567890123456789012345678901234567890123456789\n2\n01234567890123456789012345678901234567890123456789012345678901234567890123456789\n4\n5\n",
50            "A[012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789]B",
51            "[nolml]发信人:feilan.bbs@bbs.sjtu.edu.cn (蓝,本是路人),信区:cn.bbs.sci.medicine\n"
52            "标  题:Re: 阑尾有益寿延年功能 尾骨是有用的“小尾巴”\n"
53            "发信站:饮水思源\n"
54            "转信站:LeafOK!news.ccie.net.cn!SJTU\n"
55            "\n"
56            "昏\n"
57            "当然是阑尾\n"
58            "【 在 lang (浪子~继续减肥&戒酒) 的大作中提到: 】\n"
59            ": 阑尾?\n"
60            ": 扁桃体?\n"
61            ": 还是尾椎?\n"
62            ": 【 在 feilan (蓝,本是路人) 的大作中提到: 】\n"
63            ": : -________________-!!!\n"
64            ": : 完了\n"
65            ": : 我已经割掉了\n"
66            ": : 555555555555\n"
67            ": : ",
68  };  };
69    
70  int str_cnt = 13;  const int str_cnt = sizeof(str_in) / sizeof(const char *);
71    
72  int main(int argc, char *argv[])  int main(int argc, char *argv[])
73  {  {
74            clock_t clock_begin;
75            clock_t clock_end;
76            double prog_time_spent;
77            double lml_time_spent;
78    
79          char str_out_buf[STR_OUT_BUF_SIZE];          char str_out_buf[STR_OUT_BUF_SIZE];
80          int i;          int i;
81          int j;          int j;
82    
83            // Apply the specified locale
84            if (setlocale(LC_ALL, "en_US.UTF-8") == NULL)
85            {
86                    fprintf(stderr, "setlocale(LC_ALL, en_US.UTF-8) error\n");
87                    return -1;
88            }
89    
90          if (log_begin("../log/bbsd.log", "../log/error.log") < 0)          if (log_begin("../log/bbsd.log", "../log/error.log") < 0)
91          {          {
92                  printf("Open log error\n");                  printf("Open log error\n");
93                  return -1;                  return -1;
94          }          }
95    
96          log_std_redirect(STDOUT_FILENO);          log_common_redir(STDOUT_FILENO);
97          log_err_redirect(STDERR_FILENO);          log_error_redir(STDERR_FILENO);
98    
99            clock_begin = clock();
100    
101            printf("Test #1: quote_mode = 0\n");
102            for (i = 0; i < str_cnt; i++)
103            {
104                    j = lml_render(str_in[i], str_out_buf, sizeof(str_out_buf), 80, 0);
105    
106                    printf("Input(len=%ld): %s\nOutput(len=%d): %s\n",
107                               strlen(str_in[i]), str_in[i], j, str_out_buf);
108                    if (j != strlen(str_out_buf))
109                    {
110                            printf("Output len(%ld) != ret(%d)\n", strlen(str_out_buf), j);
111                            return -1;
112                    }
113            }
114            printf("Test #1: Done\n\n");
115    
116            printf("Test #2: quote_mode = 1\n");
117          for (i = 0; i < str_cnt; i++)          for (i = 0; i < str_cnt; i++)
118          {          {
119                  j = lml_plain(str_in[i], str_out_buf, sizeof(str_out_buf));                  j = lml_render(str_in[i], str_out_buf, sizeof(str_out_buf), 80, 1);
120    
121                  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",
122                               strlen(str_in[i]), str_in[i], j, str_out_buf);
123                    if (j != strlen(str_out_buf))
124                    {
125                            printf("Output len(%ld) != ret(%d)\n", strlen(str_out_buf), j);
126                            return -1;
127                    }
128          }          }
129            printf("Test #2: Done\n\n");
130    
131            clock_end = clock();
132            prog_time_spent = (double)(clock_end - clock_begin) / (CLOCKS_PER_SEC / 1000);
133            lml_time_spent = (double)lml_total_exec_duration / (CLOCKS_PER_SEC / 1000);
134    
135            printf("\npage_exec_duration=%.2f, lml_exec_duration=%.2f\n", prog_time_spent, lml_time_spent);
136    
137          log_end();          log_end();
138    


Legend:
Removed lines/characters  
Changed lines/characters
  Added lines/characters

webmaster@leafok.com
ViewVC Help
Powered by ViewVC 1.3.0-beta1