Added include stdlib.h
[yaz-moved-to-github.git] / test / tstccl.c
1 /*
2  * Copyright (c) 2002-2003, Index Data
3  * See the file LICENSE for details.
4  *
5  * $Id: tstccl.c,v 1.3 2004-09-22 11:21:51 adam Exp $
6  */
7
8 /* CCL test */
9
10 #include <yaz/ccl.h>
11
12 struct ccl_tst {
13     char *query;
14     char *result;
15 };
16
17 static struct ccl_tst query_str[] = {
18     { "x1", "@attr 4=2 @attr 1=1016 x1 "},
19     { "(((((x1)))))", "@attr 4=2 @attr 1=1016 x1 "},
20     {"x1 and x2", "@and @attr 4=2 @attr 1=1016 x1 @attr 4=2 @attr 1=1016 x2 "},
21     { "ti=x3", "@attr 4=2 @attr 1=4 x3 "},
22     { "dc.title=x4", "@attr 1=/my/title x4 "},
23     { "x1 and", 0},
24     { "tix=x5", 0},
25     { "spid%æserne", "@prox 0 1 0 2 k 2 @attr 4=2 @attr 1=1016 spid @attr 4=2 @attr 1=1016 æserne "},
26     {0, 0}
27 };
28
29 void tst1(int pass)
30 {
31     CCL_parser parser = ccl_parser_create ();
32     CCL_bibset bibset = ccl_qual_mk();
33     int i;
34     char tstline[128];
35
36     switch(pass)
37     {
38     case 0:
39         ccl_qual_fitem(bibset, "u=4    s=pw t=l,r", "ti");
40         ccl_qual_fitem(bibset, "1=1016 s=al,pw",    "term");
41         ccl_qual_fitem(bibset, "1=/my/title",         "dc.title");
42         break;
43     case 1:
44         strcpy(tstline, "ti u=4    s=pw t=l,r");
45         ccl_qual_line(bibset, tstline);
46
47         strcpy(tstline, "term 1=1016 s=al,pw   # default term");
48         ccl_qual_line(bibset, tstline);
49
50         strcpy(tstline, "dc.title 1=/my/title");
51         ccl_qual_line(bibset, tstline);
52         break;
53     case 2:
54         ccl_qual_buf(bibset, "ti u=4    s=pw t=l,r\n"
55                      "term 1=1016 s=al,pw\r\n"
56                      "\n"
57                      "dc.title 1=/my/title\n");
58         break;
59     default:
60         exit(23);
61     }
62
63     parser->bibset = bibset;
64
65     for (i = 0; query_str[i].query; i++)
66     {
67         struct ccl_token *token_list =
68             ccl_parser_tokenize(parser, query_str[i].query);
69         struct ccl_rpn_node *rpn = ccl_parser_find(parser, token_list);
70         ccl_token_del (token_list);
71         if (rpn)
72         {
73             WRBUF wrbuf = wrbuf_alloc();
74             ccl_pquery(wrbuf, rpn);
75
76             if (!query_str[i].result)
77             {
78                 printf ("Failed %s\n", query_str[i].query);
79                 printf (" got:%s:\n", wrbuf_buf(wrbuf));
80                 printf (" expected failure\n");
81                 exit(3);
82             }
83             else if (strcmp(wrbuf_buf(wrbuf), query_str[i].result))
84             {
85                 printf ("Failed %s\n", query_str[i].query);
86                 printf (" got:%s:\n", wrbuf_buf(wrbuf));
87                 printf (" expected:%s:\n", query_str[i].result);
88                 exit(2);
89             }
90             ccl_rpn_delete(rpn);
91             wrbuf_free(wrbuf, 1);
92         }
93         else if (query_str[i].result)
94         {
95             printf ("Failed %s\n", query_str[i].query);
96             printf (" got failure\n");
97             printf (" expected:%s:\n", query_str[i].result);
98             exit(4);
99         }
100     }   
101     ccl_parser_destroy (parser);
102     ccl_qual_rm(&bibset);
103 }
104
105 int main(int argc, char **argv)
106 {
107     tst1(0);
108     tst1(1);
109     tst1(2);
110     exit(0);
111 }