chiark / gitweb /
debugging for thing that crashed
[innduct.git] / tests / lib / vector-t.c
1 /* $Id: vector-t.c 5678 2002-08-28 23:21:32Z rra $ */
2 /* vector test suite. */
3
4 #include "config.h"
5 #include "clibrary.h"
6
7 #include "inn/vector.h"
8 #include "libinn.h"
9 #include "libtest.h"
10
11 int
12 main(void)
13 {
14     struct vector *vector;
15     struct cvector *cvector;
16     const char cstring[] = "This is a\ttest.  ";
17     const char tabs[] = "test\t\ting\t";
18     static const char nulls1[] = "This\0is\0a\0test.";
19     static const char nulls2[] = "This is a\t\0es\0.  ";
20     char empty[] = "";
21     char *string;
22     char *p;
23
24     puts("87");
25
26     vector = vector_new();
27     ok(1, vector != NULL);
28     vector_add(vector, cstring);
29     ok_int(2, 1, vector->count);
30     ok(3, vector->strings[0] != cstring);
31     vector_resize(vector, 4);
32     ok_int(4, 4, vector->allocated);
33     vector_add(vector, cstring);
34     vector_add(vector, cstring);
35     vector_add(vector, cstring);
36     ok_int(5, 4, vector->allocated);
37     ok_int(6, 4, vector->count);
38     ok(7, vector->strings[1] != vector->strings[2]);
39     ok(8, vector->strings[2] != vector->strings[3]);
40     ok(9, vector->strings[3] != vector->strings[0]);
41     ok(10, vector->strings[0] != cstring);
42     vector_clear(vector);
43     ok_int(11, 0, vector->count);
44     ok_int(12, 4, vector->allocated);
45     string = xstrdup(cstring);
46     vector_add(vector, cstring);
47     vector_add(vector, string);
48     ok_int(13, 2, vector->count);
49     ok(14, vector->strings[1] != string);
50     vector_resize(vector, 1);
51     ok_int(15, 1, vector->count);
52     ok(16, vector->strings[0] != cstring);
53     vector_free(vector);
54     free(string);
55
56     cvector = cvector_new();
57     ok(17, cvector != NULL);
58     cvector_add(cvector, cstring);
59     ok_int(18, 1, cvector->count);
60     ok(19, cvector->strings[0] == cstring);
61     cvector_resize(cvector, 4);
62     ok_int(20, 4, cvector->allocated);
63     cvector_add(cvector, cstring);
64     cvector_add(cvector, cstring);
65     cvector_add(cvector, cstring);
66     ok_int(21, 4, cvector->allocated);
67     ok_int(22, 4, cvector->count);
68     ok(23, cvector->strings[1] == cvector->strings[2]);
69     ok(24, cvector->strings[2] == cvector->strings[3]);
70     ok(25, cvector->strings[3] == cvector->strings[0]);
71     ok(26, cvector->strings[0] == cstring);
72     cvector_clear(cvector);
73     ok_int(27, 0, cvector->count);
74     ok_int(28, 4, cvector->allocated);
75     string = xstrdup(cstring);
76     cvector_add(cvector, cstring);
77     cvector_add(cvector, string);
78     ok_int(29, 2, cvector->count);
79     ok(30, cvector->strings[1] == string);
80     cvector_resize(cvector, 1);
81     ok_int(31, 1, cvector->count);
82     ok(32, cvector->strings[0] == cstring);
83     cvector_free(cvector);
84     free(string);
85
86     vector = vector_split_space("This is a\ttest.  ", NULL);
87     ok_int(33, 4, vector->count);
88     ok_int(34, 4, vector->allocated);
89     ok_string(35, "This", vector->strings[0]);
90     ok_string(36, "is", vector->strings[1]);
91     ok_string(37, "a", vector->strings[2]);
92     ok_string(38, "test.", vector->strings[3]);
93     vector_add(vector, cstring);
94     ok_string(39, cstring, vector->strings[4]);
95     ok(40, vector->strings[4] != cstring);
96     ok_int(41, 5, vector->allocated);
97     vector = vector_split(cstring, 't', vector);
98     ok_int(42, 3, vector->count);
99     ok_int(43, 5, vector->allocated);
100     ok_string(44, "This is a\t", vector->strings[0]);
101     ok_string(45, "es", vector->strings[1]);
102     ok_string(46, ".  ", vector->strings[2]);
103     ok(47, vector->strings[0] != cstring);
104     p = vector_join(vector, "fe");
105     ok_string(48, "This is a\tfeesfe.  ", p);
106     free(p);
107     vector_free(vector);
108
109     string = xstrdup(cstring);
110     cvector = cvector_split_space(string, NULL);
111     ok_int(49, 4, cvector->count);
112     ok_int(50, 4, cvector->allocated);
113     ok_string(51, "This", cvector->strings[0]);
114     ok_string(52, "is", cvector->strings[1]);
115     ok_string(53, "a", cvector->strings[2]);
116     ok_string(54, "test.", cvector->strings[3]);
117     ok(55, memcmp(string, nulls1, 16) == 0);
118     cvector_add(cvector, cstring);
119     ok(56, cvector->strings[4] == cstring);
120     ok_int(57, 5, cvector->allocated);
121     free(string);
122     string = xstrdup(cstring);
123     cvector = cvector_split(string, 't', cvector);
124     ok_int(58, 3, cvector->count);
125     ok_int(59, 5, cvector->allocated);
126     ok_string(60, "This is a\t", cvector->strings[0]);
127     ok_string(61, "es", cvector->strings[1]);
128     ok_string(62, ".  ", cvector->strings[2]);
129     ok(63, cvector->strings[0] == string);
130     ok(64, memcmp(string, nulls2, 18) == 0);
131     p = cvector_join(cvector, "oo");
132     ok_string(65, "This is a\tooesoo.  ", p);
133     free(p);
134     cvector_free(cvector);
135     free(string);
136
137     vector = vector_split("", ' ', NULL);
138     ok_int(66, 1, vector->count);
139     ok_string(67, "", vector->strings[0]);
140     vector_free(vector);
141     cvector = cvector_split(empty, ' ', NULL);
142     ok_int(68, 1, cvector->count);
143     ok_string(69, "", vector->strings[0]);
144     cvector_free(cvector);
145
146     vector = vector_split_space("", NULL);
147     ok_int(70, 0, vector->count);
148     vector_free(vector);
149     cvector = cvector_split_space(empty, NULL);
150     ok_int(71, 0, cvector->count);
151     cvector_free(cvector);
152
153     vector = vector_split(tabs, '\t', NULL);
154     ok_int(72, 4, vector->count);
155     ok_string(73, "test", vector->strings[0]);
156     ok_string(74, "", vector->strings[1]);
157     ok_string(75, "ing", vector->strings[2]);
158     ok_string(76, "", vector->strings[3]);
159     p = vector_join(vector, "");
160     ok_string(77, "testing", p);
161     free(p);
162     vector_free(vector);
163
164     string = xstrdup(tabs);
165     cvector = cvector_split(string, '\t', NULL);
166     ok_int(78, 4, cvector->count);
167     ok_string(79, "test", cvector->strings[0]);
168     ok_string(80, "", cvector->strings[1]);
169     ok_string(81, "ing", cvector->strings[2]);
170     ok_string(82, "", cvector->strings[3]);
171     p = cvector_join(cvector, "");
172     ok_string(83, "testing", p);
173     free(p);
174     cvector_free(cvector);
175     free(string);
176
177     vector = vector_split_space("foo\nbar", NULL);
178     ok_int(84, 1, vector->count);
179     ok_string(85, "foo\nbar", vector->strings[0]);
180     vector_free(vector);
181
182     string = xstrdup("foo\nbar");
183     cvector = cvector_split_space(string, NULL);
184     ok_int(86, 1, cvector->count);
185     ok_string(87, "foo\nbar", cvector->strings[0]);
186     cvector_free(cvector);
187
188     return 0;
189 }