Logo Search packages:      
Sourcecode: maildrop version File versions  Download package

reftest.c

/*
** Copyright 2000 Double Precision, Inc.
** See COPYING for distribution information.
*/

/*
** $Id: reftest.c,v 1.6 2001/04/21 02:00:23 mrsam Exp $
*/

#include    "config.h"

#include    <stdio.h>
#include    <stdlib.h>
#include    <string.h>
#include    <time.h>

#if   HAVE_STRINGS_H
#include    <strings.h>
#endif

#if   HAVE_LOCALE_H
#include    <locale.h>
#endif

#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; i<sizeof(p->subjtable)/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, "<message1>", NULL,
                   "subject 1",
                   "Thu, 29 Jun 2000 14:41:58 -0700", 1);

      rfc822_threadmsg(mt, "<message10>", NULL,
                   "subject 2",
                   "Thu, 29 Jun 2000 14:41:58 -0700", 2);

      rfc822_threadmsg(mt, "<message3>", "<message2>",
                   "subject 1",
                   "Thu, 29 Jun 2000 14:41:58 -0700", 3);

      rfc822_threadmsg(mt, "<message11>", NULL,
                   "Re: subject 4",
                   "Thu, 29 Jun 2000 14:41:58 -0700", 4);

      rfc822_threadmsg(mt, "<message12>", NULL,
                   "subject 4",
                   "Thu, 29 Jun 2000 14:41:58 -0700", 5);

      rfc822_threadmsg(mt, "<message13>", NULL,
                   "subject 5",
                   "Thu, 29 Jun 2000 14:41:58 -0700", 6);

      rfc822_threadmsg(mt, "<message14>", NULL,
                   "re: subject 5",
                   "Thu, 29 Jun 2000 14:41:58 -0700", 7);

      rfc822_threadprune(mt);
      rfc822_threadsortsubj(rfc822_threadgetroot(mt));
      rfc822_threadgathersubj(mt, rfc822_threadgetroot(mt));
      prpc(mt);
      prsubj(mt);
      rfc822_threadfree(mt);
}

static void test7()
{
      struct imap_refmsgtable *mt=rfc822_threadalloc();

      rfc822_threadmsg(mt, "<message1>", "<message1-dummy>",
                   "subject 1",
                   "Thu, 29 Jun 2000 14:41:58 -0700", 1);

      rfc822_threadmsg(mt, "<message2>", "<message2-dummy>",
                   "subject 1",
                   "Thu, 29 Jun 2000 14:41:58 -0700", 1);
      rfc822_threadprune(mt);
      rfc822_threadsortsubj(rfc822_threadgetroot(mt));
      rfc822_threadgathersubj(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, "<message4>", NULL,
                   "subject 2",
                   "Thu, 29 Jun 2000 14:41:51 -0700", 1);

      rfc822_threadmsg(mt, "<message2>", NULL,
                   "subject 1",
                   "Thu, 29 Jun 2000 14:41:52 -0700", 1);

      rfc822_threadmsg(mt, "<message1>", "<message1-dummy>",
                   "subject 1",
                   "Thu, 29 Jun 2000 14:41:53 -0700", 1);

      rfc822_threadmsg(mt, "<message3>", NULL,
                   "Re: subject 2",
                   "Thu, 29 Jun 2000 14:41:54 -0700", 1);

      rfc822_threadmsg(mt, "<message10>", NULL,
                   "subject 10",
                   "Thu, 29 Jun 2000 14:41:55 -0700", 1);

      rfc822_threadmsg(mt, "<message11>", NULL,
                   "subject 10",
                   "Thu, 29 Jun 2000 14:41:56 -0700", 1);

      rfc822_threadprune(mt);
      rfc822_threadsortsubj(rfc822_threadgetroot(mt));
      rfc822_threadgathersubj(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, "<message1>", NULL,
                   "subject 1",
                   "Thu, 20 Jun 2000 14:41:55 -0700", 1);

      rfc822_threadmsg(mt, "<message2>", NULL,
                   "subject 1",
                   "Thu, 19 Jun 2000 14:41:51 -0700", 2);

      rfc822_threadmsg(mt, "<message3>", NULL,
                   "subject 1",
                   "Thu, 21 Jun 2000 14:41:56 -0700", 3);

      rfc822_threadmsg(mt, "<message4>", "<message2>",
                   "subject 2",
                   "Thu, 21 Jun 2000 14:41:54 -0700", 6);

      rfc822_threadmsg(mt, "<message5>", "<message2>",
                   "subject 2",
                   "Thu, 21 Jun 2000 14:41:53 -0700", 5);

      rfc822_threadmsg(mt, "<message6>", "<message2>",
                   "subject 2",
                   "Thu, 20 Jun 2000 14:41:52 -0700", 4);


      rfc822_threadprune(mt);
      rfc822_threadsortsubj(rfc822_threadgetroot(mt));
      rfc822_threadgathersubj(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, "<message1>", NULL,
                   "subject 1",
                   "Thu, 20 Jun 2000 14:41:58 -0700", 1);

      rfc822_threadmsg(mt, "<message4>", "<message1>",
                   "subject 2",
                   "Thu, 21 Jun 2000 14:41:58 -0700", 6);

      rfc822_threadmsg(mt, "<message1>", NULL,
                   "subject 2",
                   "Thu, 21 Jun 2000 14:41:58 -0700", 5);

      rfc822_threadmsg(mt, "<message4>", "<message1>",
                   "subject 2",
                   "Thu, 21 Jun 2000 14:41:58 -0700", 6);

      rfc822_threadprune(mt);
      rfc822_threadsortsubj(rfc822_threadgetroot(mt));
      rfc822_threadgathersubj(mt, rfc822_threadgetroot(mt));
      rfc822_threadmergesubj(mt, rfc822_threadgetroot(mt));
      rfc822_threadsortbydate(mt);
      prpc(mt);
      rfc822_threadfree(mt);
}

int main(int argc, char **argv)
{

#if HAVE_SETLOCALE
      setlocale(LC_ALL, "C");
#endif

      test1();
      test2();
      test3();
      test4();
      test5();
      test6();
      test7();
      test8();
      test9();
      test10();
      return (0);
}

Generated by  Doxygen 1.6.0   Back to index