Minor refactor in tcpip code
[yaz-moved-to-github.git] / test / test_nmem.c
1 /* This file is part of the YAZ toolkit.
2  * Copyright (C) Index Data
3  * See the file LICENSE for details.
4  */
5
6 #if HAVE_CONFIG_H
7 #include <config.h>
8 #endif
9
10 #include <errno.h>
11 #include <string.h>
12 #include <stdlib.h>
13
14 #include <yaz/nmem.h>
15 #include <yaz/test.h>
16
17 void tst_nmem_malloc(void)
18 {
19     NMEM n;
20     int j;
21     char *cp;
22
23     n = nmem_create();
24     YAZ_CHECK(n);
25
26     for (j = 1; j<500; j++)
27     {
28         cp = (char *) nmem_malloc(n, j);
29         YAZ_CHECK(cp);
30         if ((int) sizeof(long) >= j)
31             *(long*) cp = 123L;
32 #if HAVE_LONG_LONG
33         if ((int) sizeof(long long) >= j)
34             *(long long*) cp = 123L;
35 #endif
36         if ((int) sizeof(double) >= j)
37             *(double*) cp = 12.2;
38     }
39
40     for (j = 2000; j<20000; j+= 2000)
41     {
42         cp = (char *) nmem_malloc(n, j);
43         YAZ_CHECK(cp);
44     }
45     nmem_destroy(n);
46 }
47
48 void tst_nmem_strsplit(void)
49 {
50     NMEM nmem = nmem_create();
51     int num = 0;
52     char **array = 0;
53
54     nmem_strsplit(nmem, ",", "", &array, &num);
55     YAZ_CHECK(num == 0);
56
57     nmem_strsplitx(nmem, ",", "", &array, &num, 0);
58     YAZ_CHECK(num == 1);
59     YAZ_CHECK(num > 0 && !strcmp(array[0], ""));
60
61     nmem_strsplit(nmem, ",", ",,", &array, &num);
62     YAZ_CHECK(num == 0);
63
64     nmem_strsplitx(nmem, ",", ",,", &array, &num, 0);
65     YAZ_CHECK(num == 3);
66     YAZ_CHECK(num > 0 && !strcmp(array[0], ""));
67     YAZ_CHECK(num > 1 && !strcmp(array[1], ""));
68     YAZ_CHECK(num > 2 && !strcmp(array[2], ""));
69
70     nmem_strsplit(nmem, ",", ",a,b,,cd", &array, &num);
71     YAZ_CHECK(num == 3);
72     YAZ_CHECK(num > 0 && !strcmp(array[0], "a"));
73     YAZ_CHECK(num > 1 && !strcmp(array[1], "b"));
74     YAZ_CHECK(num > 2 && !strcmp(array[2], "cd"));
75
76     nmem_strsplitx(nmem, ",", ",a,b,,cd", &array, &num, 0);
77     YAZ_CHECK(num == 5);
78     YAZ_CHECK(num > 0 && !strcmp(array[0], ""));
79     YAZ_CHECK(num > 1 && !strcmp(array[1], "a"));
80     YAZ_CHECK(num > 2 && !strcmp(array[2], "b"));
81     YAZ_CHECK(num > 3 && !strcmp(array[3], ""));
82     YAZ_CHECK(num > 4 && !strcmp(array[4], "cd"));
83
84     nmem_strsplit_escape(nmem, ",", ",a,b,,cd", &array, &num, 0, '\\');
85     YAZ_CHECK(num == 5);
86     YAZ_CHECK(num > 0 && !strcmp(array[0], ""));
87     YAZ_CHECK(num > 1 && !strcmp(array[1], "a"));
88     YAZ_CHECK(num > 2 && !strcmp(array[2], "b"));
89     YAZ_CHECK(num > 3 && !strcmp(array[3], ""));
90     YAZ_CHECK(num > 4 && !strcmp(array[4], "cd"));
91
92     nmem_strsplit_escape(nmem, ",", ",a,b\\,,cd", &array, &num, 0, '\\');
93     YAZ_CHECK(num == 4);
94     YAZ_CHECK(num > 0 && !strcmp(array[0], ""));
95     YAZ_CHECK(num > 1 && !strcmp(array[1], "a"));
96     YAZ_CHECK(num > 2 && !strcmp(array[2], "b,"));
97     YAZ_CHECK(num > 3 && !strcmp(array[3], "cd"));
98
99     nmem_strsplit_escape(nmem, ",", "\\,a,b\\,,c\\d", &array, &num, 0, '\\');
100     YAZ_CHECK(num == 3);
101     YAZ_CHECK(num > 0 && !strcmp(array[0], ",a"));
102     YAZ_CHECK(num > 1 && !strcmp(array[1], "b,"));
103     YAZ_CHECK(num > 2 && !strcmp(array[2], "cd"));
104
105     nmem_strsplit_escape2(nmem, ",", "\\,a,b\\,\\,c\\\\\\|d",
106                           &array, &num, 0, '\\', 1);
107     YAZ_CHECK(num == 2);
108     YAZ_CHECK(num > 0 && !strcmp(array[0], ",a"));
109     YAZ_CHECK(num > 1 && !strcmp(array[1], "b,,c\\|d"));
110
111
112     nmem_strsplit_escape2(nmem, ",", "\\,a,b\\,\\,c\\\\\\|d",
113                           &array, &num, 0, '\\', 0);
114     YAZ_CHECK(num == 2);
115     YAZ_CHECK(num > 0 && !strcmp(array[0], "\\,a"));
116     YAZ_CHECK(num > 1 && !strcmp(array[1], "b\\,\\,c\\\\\\|d"));
117
118     nmem_destroy(nmem);
119 }
120
121 int main (int argc, char **argv)
122 {
123     YAZ_CHECK_INIT(argc, argv);
124     YAZ_CHECK_LOG();
125     tst_nmem_malloc();
126     tst_nmem_strsplit();
127     YAZ_CHECK_TERM;
128 }
129 /*
130  * Local variables:
131  * c-basic-offset: 4
132  * c-file-style: "Stroustrup"
133  * indent-tabs-mode: nil
134  * End:
135  * vim: shiftwidth=4 tabstop=8 expandtab
136  */
137