Add check for proximity
[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.2 2004-08-11 12:01:22 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(void)
30 {
31     CCL_parser parser = ccl_parser_create ();
32     CCL_bibset bibset = ccl_qual_mk();
33     int i;
34
35     ccl_qual_fitem(bibset, "u=4    s=pw t=l,r", "ti");
36     ccl_qual_fitem(bibset, "1=1016 s=al,pw",    "term");
37     ccl_qual_fitem(bibset, "1=/my/title",         "dc.title");
38
39     parser->bibset = bibset;
40
41     for (i = 0; query_str[i].query; i++)
42     {
43         struct ccl_token *token_list =
44             ccl_parser_tokenize(parser, query_str[i].query);
45         struct ccl_rpn_node *rpn = ccl_parser_find(parser, token_list);
46         ccl_token_del (token_list);
47         if (rpn)
48         {
49             WRBUF wrbuf = wrbuf_alloc();
50             ccl_pquery(wrbuf, rpn);
51
52             if (!query_str[i].result)
53             {
54                 printf ("Failed %s\n", query_str[i].query);
55                 printf (" got:%s:\n", wrbuf_buf(wrbuf));
56                 printf (" expected failure\n");
57                 exit(3);
58             }
59             else if (strcmp(wrbuf_buf(wrbuf), query_str[i].result))
60             {
61                 printf ("Failed %s\n", query_str[i].query);
62                 printf (" got:%s:\n", wrbuf_buf(wrbuf));
63                 printf (" expected:%s:\n", query_str[i].result);
64                 exit(2);
65             }
66             ccl_rpn_delete(rpn);
67             wrbuf_free(wrbuf, 1);
68         }
69         else if (query_str[i].result)
70         {
71             printf ("Failed %s\n", query_str[i].query);
72             printf (" got failure\n");
73             printf (" expected:%s:\n", query_str[i].result);
74             exit(4);
75         }
76     }   
77     ccl_parser_destroy (parser);
78     ccl_qual_rm(&bibset);
79 }
80
81 int main(int argc, char **argv)
82 {
83     tst1();
84     exit(0);
85 }