Import Debian package 0.61.0-1+lenny1
[hcoop/debian/courier-authlib.git] / rfc822 / reftest.c
CommitLineData
d9898ee8 1/*
2** Copyright 2000 Double Precision, Inc.
3** See COPYING for distribution information.
4*/
5
6/*
7** $Id: reftest.c,v 1.7 2003/05/30 01:24:16 mrsam Exp $
8*/
9
10#include "config.h"
11
12#include <stdio.h>
13#include <stdlib.h>
14#include <string.h>
15#include <time.h>
16
17#if HAVE_STRINGS_H
18#include <strings.h>
19#endif
20
21#if HAVE_LOCALE_H
22#include <locale.h>
23#endif
24
25#include "rfc822.h"
26#include "imaprefs.h"
27
28
29static void test1()
30{
31struct imap_refmsgtable *mt=rfc822_threadalloc();
32char buf[20];
33struct imap_refmsg *p;
34
35 strcpy(buf, "a@b");
36 p=rfc822_threadallocmsg(mt, buf);
37 strcpy(buf, "c@d");
38 p=rfc822_threadallocmsg(mt, buf);
39
40 printf("%s\n", (rfc822_threadsearchmsg(mt, "a@b")
41 ? "found":"not found"));
42 printf("%s\n", (rfc822_threadsearchmsg(mt, "c@d")
43 ? "found":"not found"));
44 printf("%s\n", (rfc822_threadsearchmsg(mt, "e@f")
45 ? "found":"not found"));
46
47 rfc822_threadfree(mt);
48}
49
50static void prtree(struct imap_refmsg *m)
51{
52 printf("<%s>", m->msgid ? m->msgid:"");
53
54 if (m->isdummy)
55 {
56 printf(" (dummy)");
57 }
58
59 printf(".parent=");
60 if (m->parent)
61 printf("<%s>", m->parent->msgid ? m->parent->msgid:"");
62 else
63 printf("ROOT");
64
65 printf("\n");
66
67 for (m=m->firstchild; m; m=m->nextsib)
68 prtree(m);
69}
70
71static void prpc(struct imap_refmsgtable *mt)
72{
73 struct imap_refmsg *root=rfc822_threadgetroot(mt), *m;
74
75 if (!root)
76 return;
77
78 for (m=root->firstchild; m; m=m->nextsib)
79 prtree(m);
80
81 printf("\n\n");
82}
83
84static void test2()
85{
86 struct imap_refmsgtable *mt=rfc822_threadalloc();
87
88 rfc822_threadmsg(mt, "<1>", NULL,
89 "subject 1",
90 "Thu, 29 Jun 2000 14:41:58 -0700", 0, 1);
91
92 rfc822_threadmsg(mt, "<2>",
93 "<1>",
94 "subject 1",
95 "Thu, 29 Jun 2000 14:41:58 -0700", 0, 1);
96
97 rfc822_threadmsg(mt, "<4>",
98 "<1> <2> <3>",
99 "subject 1",
100 "Thu, 29 Jun 2000 14:41:58 -0700", 0, 1);
101
102 prpc(mt);
103 rfc822_threadfree(mt);
104}
105
106static void test3()
107{
108 struct imap_refmsgtable *mt=rfc822_threadalloc();
109
110 rfc822_threadmsg(mt, "<4>",
111 "<2> <1> <3>",
112 "subject 1",
113 "Thu, 29 Jun 2000 14:41:58 -0700", 0, 1);
114
115 rfc822_threadmsg(mt, "<3>",
116 "<1> <2>",
117 "subject 1",
118 "Thu, 29 Jun 2000 14:41:58 -0700", 0, 1);
119
120 rfc822_threadmsg(mt, "<2>",
121 "<1>",
122 "subject 1",
123 "Thu, 29 Jun 2000 14:41:58 -0700", 0, 1);
124
125 rfc822_threadmsg(mt, "<1>", NULL,
126 "subject 1",
127 "Thu, 29 Jun 2000 14:41:58 -0700", 0, 1);
128
129 prpc(mt);
130 rfc822_threadfree(mt);
131}
132
133static void test4()
134{
135 struct imap_refmsgtable *mt=rfc822_threadalloc();
136
137 rfc822_threadmsg(mt, "<1>", NULL,
138 "subject 1",
139 "Thu, 29 Jun 2000 14:41:58 -0700", 0, 1);
140
141 rfc822_threadmsg(mt, "<2>", "<1>",
142 "subject 1",
143 "Thu, 29 Jun 2000 14:41:58 -0700", 0, 1);
144
145 rfc822_threadmsg(mt, "<4>", "<1> <2> <3>",
146 "subject 1",
147 "Thu, 29 Jun 2000 14:41:58 -0700", 0, 1);
148
149 prpc(mt);
150 rfc822_threadprune(mt);
151 prpc(mt);
152 rfc822_threadfree(mt);
153}
154
155static void test5()
156{
157 struct imap_refmsgtable *mt=rfc822_threadalloc();
158
159 rfc822_threadmsg(mt, "<4>", "<1> <2> <3>",
160 "subject 1",
161 "Thu, 29 Jun 2000 14:41:58 -0700", 0, 1);
162
163 rfc822_threadmsg(mt, "<3>", NULL,
164 "subject 1",
165 "Thu, 29 Jun 2000 14:41:58 -0700", 0, 1);
166
167 prpc(mt);
168 rfc822_threadprune(mt);
169 prpc(mt);
170 rfc822_threadfree(mt);
171}
172
173static void prsubj(struct imap_refmsgtable *p)
174{
175 struct imap_subjlookup *s;
176 int i;
177
178 for (i=0; i<sizeof(p->subjtable)/sizeof(p->subjtable[0]); i++)
179 for (s=p->subjtable[i]; s; s=s->nextsubj)
180 printf("subject(%s)=<%s>\n", s->subj,
181 s->msg->msgid ? s->msg->msgid:"");
182 printf("\n\n");
183}
184
185static void test6()
186{
187 struct imap_refmsgtable *mt=rfc822_threadalloc();
188
189 rfc822_threadmsg(mt, "<message1>", NULL,
190 "subject 1",
191 "Thu, 29 Jun 2000 14:41:58 -0700", 0, 1);
192
193 rfc822_threadmsg(mt, "<message10>", NULL,
194 "subject 2",
195 "Thu, 29 Jun 2000 14:41:58 -0700", 0, 2);
196
197 rfc822_threadmsg(mt, "<message3>", "<message2>",
198 "subject 1",
199 "Thu, 29 Jun 2000 14:41:58 -0700", 0, 3);
200
201 rfc822_threadmsg(mt, "<message11>", NULL,
202 "Re: subject 4",
203 "Thu, 29 Jun 2000 14:41:58 -0700", 0, 4);
204
205 rfc822_threadmsg(mt, "<message12>", NULL,
206 "subject 4",
207 "Thu, 29 Jun 2000 14:41:58 -0700", 0, 5);
208
209 rfc822_threadmsg(mt, "<message13>", NULL,
210 "subject 5",
211 "Thu, 29 Jun 2000 14:41:58 -0700", 0, 6);
212
213 rfc822_threadmsg(mt, "<message14>", NULL,
214 "re: subject 5",
215 "Thu, 29 Jun 2000 14:41:58 -0700", 0, 7);
216
217 rfc822_threadprune(mt);
218 rfc822_threadsortsubj(rfc822_threadgetroot(mt));
219 rfc822_threadgathersubj(mt, rfc822_threadgetroot(mt));
220 prpc(mt);
221 prsubj(mt);
222 rfc822_threadfree(mt);
223}
224
225static void test7()
226{
227 struct imap_refmsgtable *mt=rfc822_threadalloc();
228
229 rfc822_threadmsg(mt, "<message1>", "<message1-dummy>",
230 "subject 1",
231 "Thu, 29 Jun 2000 14:41:58 -0700", 0, 1);
232
233 rfc822_threadmsg(mt, "<message2>", "<message2-dummy>",
234 "subject 1",
235 "Thu, 29 Jun 2000 14:41:58 -0700", 0, 1);
236 rfc822_threadprune(mt);
237 rfc822_threadsortsubj(rfc822_threadgetroot(mt));
238 rfc822_threadgathersubj(mt, rfc822_threadgetroot(mt));
239 prpc(mt);
240 prsubj(mt);
241 rfc822_threadmergesubj(mt, rfc822_threadgetroot(mt));
242 prpc(mt);
243 rfc822_threadfree(mt);
244}
245
246static void test8()
247{
248 struct imap_refmsgtable *mt=rfc822_threadalloc();
249
250 rfc822_threadmsg(mt, "<message4>", NULL,
251 "subject 2",
252 "Thu, 29 Jun 2000 14:41:51 -0700", 0, 1);
253
254 rfc822_threadmsg(mt, "<message2>", NULL,
255 "subject 1",
256 "Thu, 29 Jun 2000 14:41:52 -0700", 0, 1);
257
258 rfc822_threadmsg(mt, "<message1>", "<message1-dummy>",
259 "subject 1",
260 "Thu, 29 Jun 2000 14:41:53 -0700", 0, 1);
261
262 rfc822_threadmsg(mt, "<message3>", NULL,
263 "Re: subject 2",
264 "Thu, 29 Jun 2000 14:41:54 -0700", 0, 1);
265
266 rfc822_threadmsg(mt, "<message10>", NULL,
267 "subject 10",
268 "Thu, 29 Jun 2000 14:41:55 -0700", 0, 1);
269
270 rfc822_threadmsg(mt, "<message11>", NULL,
271 "subject 10",
272 "Thu, 29 Jun 2000 14:41:56 -0700", 0, 1);
273
274 rfc822_threadprune(mt);
275 rfc822_threadsortsubj(rfc822_threadgetroot(mt));
276 rfc822_threadgathersubj(mt, rfc822_threadgetroot(mt));
277 prpc(mt);
278 prsubj(mt);
279 rfc822_threadmergesubj(mt, rfc822_threadgetroot(mt));
280 prpc(mt);
281 rfc822_threadfree(mt);
282}
283
284static void test9()
285{
286 struct imap_refmsgtable *mt=rfc822_threadalloc();
287
288 rfc822_threadmsg(mt, "<message1>", NULL,
289 "subject 1",
290 "Thu, 20 Jun 2000 14:41:55 -0700", 0, 1);
291
292 rfc822_threadmsg(mt, "<message2>", NULL,
293 "subject 1",
294 "Thu, 19 Jun 2000 14:41:51 -0700", 0, 2);
295
296 rfc822_threadmsg(mt, "<message3>", NULL,
297 "subject 1",
298 "Thu, 21 Jun 2000 14:41:56 -0700", 0, 3);
299
300 rfc822_threadmsg(mt, "<message4>", "<message2>",
301 "subject 2",
302 "Thu, 21 Jun 2000 14:41:54 -0700", 0, 6);
303
304 rfc822_threadmsg(mt, "<message5>", "<message2>",
305 "subject 2",
306 "Thu, 21 Jun 2000 14:41:53 -0700", 0, 5);
307
308 rfc822_threadmsg(mt, "<message6>", "<message2>",
309 "subject 2",
310 "Thu, 20 Jun 2000 14:41:52 -0700", 0, 4);
311
312
313 rfc822_threadprune(mt);
314 rfc822_threadsortsubj(rfc822_threadgetroot(mt));
315 rfc822_threadgathersubj(mt, rfc822_threadgetroot(mt));
316 rfc822_threadmergesubj(mt, rfc822_threadgetroot(mt));
317 rfc822_threadsortbydate(mt);
318 prpc(mt);
319 rfc822_threadfree(mt);
320}
321
322static void test10()
323{
324 struct imap_refmsgtable *mt=rfc822_threadalloc();
325
326 rfc822_threadmsg(mt, "<message1>", NULL,
327 "subject 1",
328 "Thu, 20 Jun 2000 14:41:58 -0700", 0, 1);
329
330 rfc822_threadmsg(mt, "<message4>", "<message1>",
331 "subject 2",
332 "Thu, 21 Jun 2000 14:41:58 -0700", 0, 6);
333
334 rfc822_threadmsg(mt, "<message1>", NULL,
335 "subject 2",
336 "Thu, 21 Jun 2000 14:41:58 -0700", 0, 5);
337
338 rfc822_threadmsg(mt, "<message4>", "<message1>",
339 "subject 2",
340 "Thu, 21 Jun 2000 14:41:58 -0700", 0, 6);
341
342 rfc822_threadprune(mt);
343 rfc822_threadsortsubj(rfc822_threadgetroot(mt));
344 rfc822_threadgathersubj(mt, rfc822_threadgetroot(mt));
345 rfc822_threadmergesubj(mt, rfc822_threadgetroot(mt));
346 rfc822_threadsortbydate(mt);
347 prpc(mt);
348 rfc822_threadfree(mt);
349}
350
351int main(int argc, char **argv)
352{
353
354#if HAVE_SETLOCALE
355 setlocale(LC_ALL, "C");
356#endif
357
358 test1();
359 test2();
360 test3();
361 test4();
362 test5();
363 test6();
364 test7();
365 test8();
366 test9();
367 test10();
368 return (0);
369}