aboutsummaryrefslogtreecommitdiff
path: root/tests/test77.c
blob: dc55cb2444939defdc04c097bd76cebc791f5e8d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <stdio.h>    /* printf */
#include "utstring.h"

int main()
{
    UT_string *s,*t;
    char V_TestStr[] = "There are two needle\0s in this \0haystack with needle\0s.";
    char V_NeedleStr[] = "needle\0s";
    long *V_KMP_Table;
    long V_FindPos;
    size_t V_StartPos;
    size_t V_FindCnt = 0;


    utstring_new(s);
    utstring_new(t);

    utstring_bincpy(s, V_TestStr, sizeof(V_TestStr)-1);
    printf("\"%s\" len=%u\n", utstring_body(s), (unsigned)utstring_len(s));
    utstring_bincpy(t, V_NeedleStr, sizeof(V_NeedleStr)-1);
    printf("\"%s\" len=%u\n", utstring_body(t), (unsigned)utstring_len(t));

    V_KMP_Table = (long *)malloc(sizeof(long) * (utstring_len(t) + 1));
    if (V_KMP_Table != NULL) {
        _utstring_BuildTableR(utstring_body(t), utstring_len(t), V_KMP_Table);

        V_StartPos = utstring_len(s) - 1;
        do {
            V_FindPos = _utstring_findR(utstring_body(s),
                                        V_StartPos + 1,
                                        utstring_body(t),
                                        utstring_len(t),
                                        V_KMP_Table);
            if (V_FindPos >= 0) {
                V_FindCnt++;
                V_StartPos = V_FindPos - 1;
            }
            printf("utstring_find()=%ld\n", V_FindPos);
        } while (V_FindPos >= 0);
        printf("FindCnt=%u\n", (unsigned)V_FindCnt);

        free(V_KMP_Table);
    } else {
        printf("malloc() failed...\n");
    }

    utstring_free(t);
    utstring_clear(s);
    utstring_printf(s,"ABC ABCDAB ABCDABCDABDE");
    int o;

    o=utstring_find(  s, -9, "ABC", 3 ) ;
    printf("expect 15 %d\n",o);
    o=utstring_find(  s,  3, "ABC", 3 ) ;
    printf("expect  4 %d\n",o);
    o=utstring_find(  s, 16, "ABC", 3 ) ;
    printf("expect -1 %d\n",o);
    o=utstring_findR( s, -9, "ABC", 3 ) ;
    printf("expect 11 %d\n",o);
    o=utstring_findR( s, 12, "ABC", 3 ) ;
    printf("expect  4 %d\n",o);
    o=utstring_findR( s, 13, "ABC", 3 ) ;
    printf("expect 11 %d\n",o);
    o=utstring_findR( s,  2, "ABC", 3 ) ;
    printf("expect  0 %d\n",o);



    utstring_free(s);

    return 0;
}