1 /* Copyright (C) 2006, Index Data ApS
2 * See the file LICENSE for details.
4 * $Id: nfatest1.c,v 1.1 2006-05-03 09:04:33 heikki Exp $
17 char *printfunc(void *result) {
19 sprintf(buf,"\"%s\"", (char*) result);
23 void test_match(yaz_nfa *n,
24 yaz_nfa_char *buf, int buflen,
25 int expcode, char *expstr) {
29 i=yaz_nfa_match(n,&c,buflen,&resptr);
31 printf("\n'%s' returned %d. Moved c by %d, and resulted in '%s'\n",
32 expstr, i, (c-buf),(char*)resptr);
34 YAZ_CHECK_EQ(i,expcode);
35 YAZ_CHECK_EQ(strcmp(expstr,(char*)resptr),0);
38 void construction_test() {
39 yaz_nfa* n= yaz_nfa_init();
40 yaz_nfa_state *s,*s0,*s1,*s2,*s3,*s4,*s5;
42 yaz_nfa_char seq1[]={'p','r','e','f','i','x',0};
43 yaz_nfa_char seq2[]={'p','r','e','l','i','m',0};
44 yaz_nfa_char tst1[]={'c','0'};
45 yaz_nfa_char tst2[]={'c','k','0'};
46 yaz_nfa_char tst3[]={'c','x','0'};
47 yaz_nfa_char tst4[]={'z','k','0'};
48 yaz_nfa_char tst5[]={'y','k','k','k','k','k','k','y','0'};
53 s=yaz_nfa_get_first(n);
56 s0=yaz_nfa_add_state(n);
58 s=yaz_nfa_get_first(n);
60 s=yaz_nfa_get_next(n,s);
63 s1=yaz_nfa_add_state(n);
64 i=yaz_nfa_set_result(n,s1,"first");
67 i=yaz_nfa_set_result(n,s1,"DUPLICATE");
70 p=yaz_nfa_get_result(n,s1);
72 YAZ_CHECK( strcmp((char*)p,"first")==0 );
74 i=yaz_nfa_set_result(n,s1,0);
76 p=yaz_nfa_get_result(n,s1);
78 i=yaz_nfa_set_result(n,s1,"first");
81 s2=yaz_nfa_add_state(n);
82 s3=yaz_nfa_add_state(n);
83 yaz_nfa_set_result(n,s3,"a-k,x-z");
85 s=yaz_nfa_get_first(n);
87 s=yaz_nfa_get_next(n,s);
91 yaz_nfa_add_transition(n,s0,s1,'a','k');
92 yaz_nfa_add_transition(n,s1,s1,'k','k');
93 yaz_nfa_add_transition(n,s0,s2,'p','p');
94 yaz_nfa_add_transition(n,s1,s3,'x','z');
96 s=yaz_nfa_add_range(n, 0, 'k','s' );
97 yaz_nfa_set_result(n,s,"K-S");
99 s4=yaz_nfa_add_range(n, s2, 'l','r' );
100 s5=yaz_nfa_add_range(n, s2, 'l','r' );
102 s=yaz_nfa_add_range(n, 0, 'c','c' );
104 s=yaz_nfa_add_range(n, 0, 'z','z' );
105 yaz_nfa_add_empty_transition(n,s,s);
106 yaz_nfa_set_result(n,s,"loop");
108 s=yaz_nfa_add_range(n, 0, 'y','y' );
109 s1=yaz_nfa_add_state(n);
110 yaz_nfa_set_backref(n,s1,1,1);
111 yaz_nfa_add_empty_transition(n,s,s1);
113 yaz_nfa_add_transition(n,s,s,'k','k');
114 s=yaz_nfa_add_range(n, s, 'y','y' );
115 yaz_nfa_set_result(n,s,"y k+ y");
116 yaz_nfa_set_backref(n,s,1,0);
118 s=yaz_nfa_add_sequence(n, 0, seq1 );
119 yaz_nfa_set_result(n,s,"PREFIX");
120 s=yaz_nfa_add_sequence(n, 0, seq2 );
121 yaz_nfa_set_result(n,s,"PRELIM");
124 yaz_nfa_dump(0,n, printfunc);
127 test_match(n,seq2,3,YAZ_NFA_OVERRUN,"K-S");
128 test_match(n,seq2,6,YAZ_NFA_SUCCESS,"PRELIM");
129 test_match(n,tst1,3,YAZ_NFA_SUCCESS,"first");
130 test_match(n,tst2,3,YAZ_NFA_SUCCESS,"first");
131 test_match(n,tst3,3,YAZ_NFA_SUCCESS,"a-k,x-z");
132 test_match(n,tst4,9,YAZ_NFA_LOOP,"loop");
133 test_match(n,tst5,9,YAZ_NFA_SUCCESS,"y k+ y");
138 int main(int argc, char **argv)
140 YAZ_CHECK_INIT(argc, argv);