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

Diff of /lbbs/src/test_section_list.c

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

Revision 1.1 by sysadm, Wed May 21 04:07:42 2025 UTC Revision 1.9 by sysadm, Thu May 22 06:20:47 2025 UTC
# Line 24  Line 24 
24  const char *sname[] = {  const char *sname[] = {
25          "Test",          "Test",
26          "ABCDEFG",          "ABCDEFG",
27          "_1234_"          "_1234_"};
 };  
28    
29  const char *stitle[] = {  const char *stitle[] = {
30          " Test Section ",          " Test Section ",
31          "字母组合ABC",          "字母组合ABC",
32          "_数字_123"          "_数字_123"};
 };  
33    
34  const char *master_name[] = {  const char *master_name[] = {
35          "sysadm",          "sysadm",
36          "SYSOP",          "SYSOP",
37          ""          ""};
 };  
38    
39  int section_count = 3;  int section_conf_count = 3;
40    int section_count = BBS_max_section;
41    
42  int main(int argc, char *argv[])  int main(int argc, char *argv[])
43  {  {
44          SECTION_DATA *p_section[BBS_max_section];          SECTION_LIST *p_section[BBS_max_section];
45            ARTICLE *p_article;
46          ARTICLE article;          ARTICLE article;
47            int block_count;
48          int i, j;          int i, j;
49          int last_aid;          int last_aid;
50            int current_tid;
51            int section_first_aid;
52            int group_count;
53            int article_count;
54    
55          if (log_begin("../log/bbsd.log", "../log/error.log") < 0)          if (log_begin("../log/bbsd.log", "../log/error.log") < 0)
56          {          {
# Line 57  int main(int argc, char *argv[]) Line 61  int main(int argc, char *argv[])
61          log_std_redirect(STDOUT_FILENO);          log_std_redirect(STDOUT_FILENO);
62          log_err_redirect(STDERR_FILENO);          log_err_redirect(STDERR_FILENO);
63    
64          if (section_data_pool_init("../conf/menu.conf", BBS_article_block_limit_per_section * BBS_max_section) < 0)          // - 1 to make blocks allocated is less than required, to trigger error handling
65            block_count = BBS_article_limit_per_section * BBS_max_section / ARTICLE_PER_BLOCK - 1;
66    
67            if (article_block_init("../conf/menu.conf", block_count) < 0)
68          {          {
69                  log_error("section_data_pool_init() error\n");                  log_error("section_data_pool_init() error\n");
70                  return -2;                  return -2;
71          }          }
72    
73            printf("Testing #1 ...\n");
74    
75          last_aid = 0;          last_aid = 0;
76    
77          for (i = 0; i < section_count; i++)          for (i = 0; i < section_count; i++)
78          {          {
79                  if ((p_section[i] = section_data_create(sname[i], stitle[i], master_name[i])) == NULL)                  p_section[i] = section_list_create(sname[i % section_conf_count],
80                                                                                       stitle[i % section_conf_count],
81                                                                                       master_name[i % section_conf_count]);
82                    if (p_section[i] == NULL)
83                  {                  {
84                          log_error("section_data_create(i=%d) error\n", i);                          log_error("section_data_create(i=%d) error\n", i);
85                          return -3;                          return -3;
86                  }                  }
87            }
88    
89                  for (j = 0; j < BBS_article_limit_per_block * BBS_article_block_limit_per_section; j++)          for (j = 0; j < BBS_article_limit_per_section; j++)
90            {
91                    for (i = 0; i < section_count; i++)
92                  {                  {
93                          last_aid++;                          last_aid++;
94    
# Line 87  int main(int argc, char *argv[]) Line 102  int main(int argc, char *argv[])
102                          article.ontop = 0;                          article.ontop = 0;
103                          article.lock = 0;                          article.lock = 0;
104    
105                          section_data_append_article(p_section[i], &article);                          if (section_list_append_article(p_section[i], &article) < 0)
106                            {
107                                    printf("append article (aid = %d) error at section %d index %d\n", article.aid, i, j);
108                                    break;
109                            }
110                  }                  }
111          }          }
112    
113          for (i = 0; i < section_count; i++)          for (i = 0; i < section_count; i++)
114          {          {
115                  if (section_data_free_block(p_section[i]) != 0)                  // printf("Loaded %d articles into section %d\n", p_section[i]->article_count, i);
116            }
117    
118            last_aid = 0;
119    
120            for (i = 0; i < section_count; i++)
121            {
122                    if (p_section[i]->article_count == 0)
123                  {                  {
124                          log_error("section_data_free_block(i=%d) error\n", i);                          continue;
                         return -4;  
125                  }                  }
126    
127                    for (j = 0; j < p_section[i]->article_count; j++)
128                    {
129                            last_aid++;
130    
131                            p_article = article_block_find_by_aid(last_aid);
132                            if (p_article == NULL || p_article->aid != last_aid)
133                            {
134                                    printf("article_block_find_by_aid() at section %d index %d, %d != %d\n", i, j, p_article->aid, last_aid);
135                            }
136    
137                            p_article = article_block_find_by_index(last_aid - 1);
138                            if (p_article == NULL || p_article->aid != last_aid)
139                            {
140                                    printf("article_block_find_by_index() at section %d index %d, %d != %d\n", i, j, p_article->aid, last_aid);
141                            }
142    
143                            if (section_list_set_article_visible(p_section[i], p_article->aid, 0) != 1)
144                            {
145                                    printf("section_list_set_article_visible(aid = %d) error\n", p_article->aid);
146                            }
147                    }
148    
149                    // printf("Verified %d articles in section %d\n", p_section[i]->article_count, i);
150            }
151    
152            printf("Testing #2 ...\n");
153    
154            if (article_block_reset() != 0)
155            {
156                    log_error("section_data_free_block(i=%d) error\n", i);
157                    return -4;
158          }          }
159    
160          section_data_pool_cleanup();          for (i = 0; i < section_count; i++)
161            {
162                    section_list_reset_articles(p_section[i]);
163            }
164    
165            group_count = 100;
166            last_aid = 0;
167    
168            for (i = 0; i < section_count; i++)
169            {
170                    section_first_aid = last_aid + 1;
171    
172                    for (j = 0; j < BBS_article_limit_per_section; j++)
173                    {
174                            last_aid++;
175    
176                            // Set article data
177                            article.aid = last_aid;
178                            article.cid = article.aid;
179                            // Group articles into group_count topics
180                            article.tid = ((article.aid < section_first_aid + group_count) ? 0 : (section_first_aid + j % group_count));
181                            article.uid = 1; // TODO: randomize
182                            article.visible = 1;
183                            article.excerption = 0;
184                            article.ontop = 0;
185                            article.lock = 0;
186    
187                            if (section_list_append_article(p_section[i], &article) < 0)
188                            {
189                                    printf("append article (aid = %d) error at section %d index %d\n", article.aid, i, j);
190                                    break;
191                            }
192                    }
193    
194                    // printf("Loaded %d articles into section %d\n", p_section[i]->article_count, i);
195            }
196    
197            for (i = 0; i < section_count; i++)
198            {
199                    if (p_section[i]->article_count == 0)
200                    {
201                            continue;
202                    }
203    
204                    article_count = 0;
205                    last_aid = 0;
206    
207                    p_article = p_section[i]->p_article_head;
208    
209                    do
210                    {
211                            article_count++;
212    
213                            if (p_article->aid <= last_aid)
214                            {
215                                    printf("Non-ascending aid found %d <= %d at article\n", p_article->aid, last_aid);
216                            }
217                            last_aid = p_article->aid;
218    
219                            p_article = p_article->p_next;
220                    } while (p_article != p_section[i]->p_article_head);
221    
222                    if (article_count != p_section[i]->article_count)
223                    {
224                            printf("Count of articles in section %d is different from expected %d != %d\n",
225                                       i, article_count, p_section[i]->article_count);
226                            break;
227                    }
228    
229                    // printf("Verified %d articles in section %d\n", group_count, i);
230            }
231    
232            for (i = 0; i < section_count; i++)
233            {
234                    if (p_section[i]->article_count == 0)
235                    {
236                            continue;
237                    }
238    
239                    for (j = 0; j < group_count; j++)
240                    {
241                            last_aid = p_section[i]->p_article_head->aid + j;
242    
243                            p_article = article_block_find_by_aid(last_aid);
244                            if (p_article == NULL)
245                            {
246                                    printf("NULL p_article at section %d index %d\n", i, j);
247                                    break;
248                            }
249                            if (p_article->aid != last_aid)
250                            {
251                                    printf("Inconsistent aid at section %d index %d, %d != %d\n", i, j, p_article->aid, last_aid);
252                                    break;
253                            }
254    
255                            article_count = 1;
256                            last_aid = 0;
257                            current_tid = p_article->aid;
258    
259                            do
260                            {
261                                    if (p_article->aid <= last_aid)
262                                    {
263                                            printf("Non-ascending aid found %d <= %d\n", p_article->aid, last_aid);
264                                    }
265                                    last_aid = p_article->aid;
266    
267                                    p_article = p_article->p_topic_next;
268    
269                                    if (p_article == NULL)
270                                    {
271                                            printf("NULL p_article found\n");
272                                            break;
273                                    }
274                                    if (p_article->tid == 0) // loop
275                                    {
276                                            break;
277                                    }
278                                    if (p_article->tid != current_tid)
279                                    {
280                                            printf("Inconsistent tid %d != %d\n", p_article->tid, current_tid);
281                                            break;
282                                    }
283    
284                                    article_count++;
285                            } while (1);
286    
287                            if (article_count != p_section[i]->article_count / group_count)
288                            {
289                                    printf("Count of articles in topic %d is different from expected %d != %d\n",
290                                               j + 1, article_count, p_section[i]->article_count / group_count);
291                                    break;
292                            }
293                    }
294    
295                    // printf("Verified %d topics in section %d\n", group_count, i);
296            }
297    
298            printf("Testing #3 ...\n");
299    
300            for (i = 0; i < section_conf_count; i++)
301            {
302                    if (section_list_find_by_name(sname[i]) == NULL)
303                    {
304                            printf("section_data_find_section_by_name(%s) error\n", sname[i]);
305                    }
306            }
307    
308            printf("Press ENTER to exit...");
309            getchar();
310    
311            article_block_cleanup();
312    
313          log_end();          log_end();
314    


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

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