* 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)
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);