Move ccl_pquery to ccl module (ccl.h). Add proper CCL test.
[yaz-moved-to-github.git] / ccl / tstccl.c
index e46cad2..6ae30a4 100644 (file)
@@ -2,19 +2,27 @@
  * Copyright (c) 2002-2003, Index Data
  * See the file LICENSE for details.
  *
- * $Id: tstccl.c,v 1.1 2003-06-23 10:22:21 adam Exp $
+ * $Id: tstccl.c,v 1.2 2003-06-24 23:03:04 adam Exp $
  */
 
 /* CCL test */
 
 #include <yaz/ccl.h>
 
-static char *query_str[] = {
-    "x1",
-    "x1 and x2",
-    "ti=x3",
-    "dc.title=x4",
-    0
+struct ccl_tst {
+    char *query;
+    char *result;
+};
+
+static struct ccl_tst query_str[] = {
+    { "x1", "@attr 4=2 @attr 1=1016 x1 "},
+    { "(((((x1)))))", "@attr 4=2 @attr 1=1016 x1 "},
+    {"x1 and x2", "@and @attr 4=2 @attr 1=1016 x1 @attr 4=2 @attr 1=1016 x2 "},
+    { "ti=x3", "@attr 4=2 @attr 1=4 x3 "},
+    { "dc.title=x4", "@attr 1=/my/title x4 "},
+    { "x1 and", 0},
+    { "tix=x5", 0},
+    {0, 0}
 };
 
 void tst1(void)
@@ -29,20 +37,40 @@ void tst1(void)
 
     parser->bibset = bibset;
 
-    for (i = 0; query_str[i]; i++)
+    for (i = 0; query_str[i].query; i++)
     {
        struct ccl_token *token_list =
-           ccl_parser_tokenize(parser, query_str[i]);
+           ccl_parser_tokenize(parser, query_str[i].query);
        struct ccl_rpn_node *rpn = ccl_parser_find(parser, token_list);
        ccl_token_del (token_list);
        if (rpn)
        {
+           WRBUF wrbuf = wrbuf_alloc();
+           ccl_pquery(wrbuf, rpn);
+
+           if (!query_str[i].result)
+           {
+               printf ("Failed %s\n", query_str[i].query);
+               printf (" got:%s:\n", wrbuf_buf(wrbuf));
+               printf (" expected failure\n");
+               exit(3);
+           }
+           else if (strcmp(wrbuf_buf(wrbuf), query_str[i].result))
+           {
+               printf ("Failed %s\n", query_str[i].query);
+               printf (" got:%s:\n", wrbuf_buf(wrbuf));
+               printf (" expected:%s:\n", query_str[i].result);
+               exit(2);
+           }
            ccl_rpn_delete(rpn);
+           wrbuf_free(wrbuf, 1);
        }
-       else
+       else if (query_str[i].result)
        {
-           printf ("failed %s\n", query_str[i]);
-           exit(1+i);
+           printf ("Failed %s\n", query_str[i].query);
+           printf (" got failure\n");
+           printf (" expected:%s:\n", query_str[i].result);
+           exit(4);
        }
     }  
     ccl_parser_destroy (parser);