Make test fail if circular refenced ODR does not fail
[yaz-moved-to-github.git] / test / tstodrstack.c
1 #include <stdlib.h>
2 #include <yaz/pquery.h>
3 #include <yaz/proto.h>
4
5 /** \brief build a 100 level query */
6 void test1()
7 {
8     ODR odr = odr_createmem(ODR_ENCODE);
9     YAZ_PQF_Parser parser = yaz_pqf_create();
10     Z_RPNQuery *rpn_query;
11     char qstr[10000];
12     int i;
13
14     *qstr = '\0';
15     for (i = 0; i<100; i++)
16         strcat(qstr, "@and 1 ");
17     strcat(qstr, "1");
18
19     rpn_query = yaz_pqf_parse (parser, odr, qstr);
20
21     if (!rpn_query)
22         exit(1);
23
24     if (!z_RPNQuery(odr, &rpn_query, 0, 0))
25     {
26         odr_perror(odr, "Encoding query");
27         exit(1);
28     }
29
30     yaz_pqf_destroy(parser);
31     odr_destroy(odr);
32 }
33
34 /** \brief build a circular referenced query */
35 void test2()
36 {
37     ODR odr = odr_createmem(ODR_ENCODE);
38     YAZ_PQF_Parser parser = yaz_pqf_create();
39     Z_RPNQuery *rpn_query;
40
41     rpn_query = yaz_pqf_parse (parser, odr, "@and @and a b c");
42
43     if (!rpn_query)
44         exit(1);
45
46     /* make the circular reference */
47     rpn_query->RPNStructure->u.complex->s1 = rpn_query->RPNStructure;
48
49     if (z_RPNQuery(odr, &rpn_query, 0, 0))  /* should fail */
50         exit(2);
51
52     yaz_pqf_destroy(parser);
53     odr_destroy(odr);
54 }
55
56 int main(int argc, char **argv)
57 {
58     test1();
59     test2();
60     exit(0);
61 }
62 /*
63  * Local variables:
64  * c-basic-offset: 4
65  * indent-tabs-mode: nil
66  * End:
67  * vim: shiftwidth=4 tabstop=8 expandtab
68  */