/* ** Copyright 2000 Double Precision, Inc. ** See COPYING for distribution information. */ /* ** $Id$ */ #include "config.h" #include #include #include #include #include "rfc822.h" #include "imaprefs.h" static void test1() { struct imap_refmsgtable *mt=rfc822_threadalloc(); char buf[20]; struct imap_refmsg *p; strcpy(buf, "a@b"); p=rfc822_threadallocmsg(mt, buf); strcpy(buf, "c@d"); p=rfc822_threadallocmsg(mt, buf); printf("%s\n", (rfc822_threadsearchmsg(mt, "a@b") ? "found":"not found")); printf("%s\n", (rfc822_threadsearchmsg(mt, "c@d") ? "found":"not found")); printf("%s\n", (rfc822_threadsearchmsg(mt, "e@f") ? "found":"not found")); rfc822_threadfree(mt); } static void prtree(struct imap_refmsg *m) { printf("<%s>", m->msgid ? m->msgid:""); if (m->isdummy) { printf(" (dummy)"); } printf(".parent="); if (m->parent) printf("<%s>", m->parent->msgid ? m->parent->msgid:""); else printf("ROOT"); printf("\n"); for (m=m->firstchild; m; m=m->nextsib) prtree(m); } static void prpc(struct imap_refmsgtable *mt) { struct imap_refmsg *root=rfc822_threadgetroot(mt), *m; if (!root) return; for (m=root->firstchild; m; m=m->nextsib) prtree(m); printf("\n\n"); } static void test2() { struct imap_refmsgtable *mt=rfc822_threadalloc(); rfc822_threadmsg(mt, "<1>", NULL, "subject 1", "Thu, 29 Jun 2000 14:41:58 -0700", 1); rfc822_threadmsg(mt, "<2>", "<1>", "subject 1", "Thu, 29 Jun 2000 14:41:58 -0700", 1); rfc822_threadmsg(mt, "<4>", "<1> <2> <3>", "subject 1", "Thu, 29 Jun 2000 14:41:58 -0700", 1); prpc(mt); rfc822_threadfree(mt); } static void test3() { struct imap_refmsgtable *mt=rfc822_threadalloc(); rfc822_threadmsg(mt, "<4>", "<2> <1> <3>", "subject 1", "Thu, 29 Jun 2000 14:41:58 -0700", 1); rfc822_threadmsg(mt, "<3>", "<1> <2>", "subject 1", "Thu, 29 Jun 2000 14:41:58 -0700", 1); rfc822_threadmsg(mt, "<2>", "<1>", "subject 1", "Thu, 29 Jun 2000 14:41:58 -0700", 1); rfc822_threadmsg(mt, "<1>", NULL, "subject 1", "Thu, 29 Jun 2000 14:41:58 -0700", 1); prpc(mt); rfc822_threadfree(mt); } static void test4() { struct imap_refmsgtable *mt=rfc822_threadalloc(); rfc822_threadmsg(mt, "<1>", NULL, "subject 1", "Thu, 29 Jun 2000 14:41:58 -0700", 1); rfc822_threadmsg(mt, "<2>", "<1>", "subject 1", "Thu, 29 Jun 2000 14:41:58 -0700", 1); rfc822_threadmsg(mt, "<4>", "<1> <2> <3>", "subject 1", "Thu, 29 Jun 2000 14:41:58 -0700", 1); prpc(mt); rfc822_threadprune(mt); prpc(mt); rfc822_threadfree(mt); } static void test5() { struct imap_refmsgtable *mt=rfc822_threadalloc(); rfc822_threadmsg(mt, "<4>", "<1> <2> <3>", "subject 1", "Thu, 29 Jun 2000 14:41:58 -0700", 1); rfc822_threadmsg(mt, "<3>", NULL, "subject 1", "Thu, 29 Jun 2000 14:41:58 -0700", 1); prpc(mt); rfc822_threadprune(mt); prpc(mt); rfc822_threadfree(mt); } static void prsubj(struct imap_refmsgtable *p) { struct imap_subjlookup *s; int i; for (i=0; isubjtable)/sizeof(p->subjtable[0]); i++) for (s=p->subjtable[i]; s; s=s->nextsubj) printf("subject(%s)=<%s>\n", s->subj, s->msg->msgid ? s->msg->msgid:""); printf("\n\n"); } static void test6() { struct imap_refmsgtable *mt=rfc822_threadalloc(); rfc822_threadmsg(mt, "", NULL, "subject 1", "Thu, 29 Jun 2000 14:41:58 -0700", 1); rfc822_threadmsg(mt, "", NULL, "subject 2", "Thu, 29 Jun 2000 14:41:58 -0700", 1); rfc822_threadmsg(mt, "", "", "subject 1", "Thu, 29 Jun 2000 14:41:58 -0700", 1); rfc822_threadmsg(mt, "", NULL, "Re: subject 4", "Thu, 29 Jun 2000 14:41:58 -0700", 1); rfc822_threadmsg(mt, "", NULL, "subject 4", "Thu, 29 Jun 2000 14:41:58 -0700", 1); rfc822_threadmsg(mt, "", NULL, "subject 5", "Thu, 29 Jun 2000 14:41:58 -0700", 1); rfc822_threadmsg(mt, "", NULL, "re: subject 5", "Thu, 29 Jun 2000 14:41:58 -0700", 1); rfc822_threadprune(mt); rfc822_threadsortsubj(mt, rfc822_threadgetroot(mt)); prpc(mt); prsubj(mt); rfc822_threadfree(mt); } static void test7() { struct imap_refmsgtable *mt=rfc822_threadalloc(); rfc822_threadmsg(mt, "", "", "subject 1", "Thu, 29 Jun 2000 14:41:58 -0700", 1); rfc822_threadmsg(mt, "", "", "subject 1", "Thu, 29 Jun 2000 14:41:58 -0700", 1); rfc822_threadprune(mt); rfc822_threadsortsubj(mt, rfc822_threadgetroot(mt)); prpc(mt); prsubj(mt); rfc822_threadmergesubj(mt, rfc822_threadgetroot(mt)); prpc(mt); rfc822_threadfree(mt); } static void test8() { struct imap_refmsgtable *mt=rfc822_threadalloc(); rfc822_threadmsg(mt, "", NULL, "subject 2", "Thu, 29 Jun 2000 14:41:58 -0700", 1); rfc822_threadmsg(mt, "", NULL, "subject 1", "Thu, 29 Jun 2000 14:41:58 -0700", 1); rfc822_threadmsg(mt, "", "", "subject 1", "Thu, 29 Jun 2000 14:41:58 -0700", 1); rfc822_threadmsg(mt, "", NULL, "Re: subject 2", "Thu, 29 Jun 2000 14:41:58 -0700", 1); rfc822_threadmsg(mt, "", NULL, "subject 10", "Thu, 29 Jun 2000 14:41:58 -0700", 1); rfc822_threadmsg(mt, "", NULL, "subject 10", "Thu, 29 Jun 2000 14:41:58 -0700", 1); rfc822_threadprune(mt); rfc822_threadsortsubj(mt, rfc822_threadgetroot(mt)); prpc(mt); prsubj(mt); rfc822_threadmergesubj(mt, rfc822_threadgetroot(mt)); prpc(mt); rfc822_threadfree(mt); } static void test9() { struct imap_refmsgtable *mt=rfc822_threadalloc(); rfc822_threadmsg(mt, "", NULL, "subject 1", "Thu, 20 Jun 2000 14:41:58 -0700", 1); rfc822_threadmsg(mt, "", NULL, "subject 1", "Thu, 19 Jun 2000 14:41:58 -0700", 2); rfc822_threadmsg(mt, "", NULL, "subject 1", "Thu, 21 Jun 2000 14:41:58 -0700", 3); rfc822_threadmsg(mt, "", "", "subject 2", "Thu, 21 Jun 2000 14:41:58 -0700", 6); rfc822_threadmsg(mt, "", "", "subject 2", "Thu, 21 Jun 2000 14:41:58 -0700", 5); rfc822_threadmsg(mt, "", "", "subject 2", "Thu, 20 Jun 2000 14:41:58 -0700", 4); rfc822_threadprune(mt); rfc822_threadsortsubj(mt, rfc822_threadgetroot(mt)); rfc822_threadmergesubj(mt, rfc822_threadgetroot(mt)); rfc822_threadsortbydate(mt); prpc(mt); rfc822_threadfree(mt); } static void test10() { struct imap_refmsgtable *mt=rfc822_threadalloc(); rfc822_threadmsg(mt, "", NULL, "subject 1", "Thu, 20 Jun 2000 14:41:58 -0700", 1); rfc822_threadmsg(mt, "", "", "subject 2", "Thu, 21 Jun 2000 14:41:58 -0700", 6); rfc822_threadmsg(mt, "", NULL, "subject 2", "Thu, 21 Jun 2000 14:41:58 -0700", 5); rfc822_threadmsg(mt, "", "", "subject 2", "Thu, 21 Jun 2000 14:41:58 -0700", 6); rfc822_threadprune(mt); rfc822_threadsortsubj(mt, rfc822_threadgetroot(mt)); rfc822_threadmergesubj(mt, rfc822_threadgetroot(mt)); rfc822_threadsortbydate(mt); prpc(mt); rfc822_threadfree(mt); } int main(int argc, char **argv) { test1(); test2(); test3(); test4(); test5(); test6(); test7(); test8(); test9(); test10(); return (0); }