1*00b67f09SDavid van Moolenbroek /* $NetBSD: dynstr_test.c,v 1.3 2014/12/10 04:38:03 christos Exp $ */
2*00b67f09SDavid van Moolenbroek
3*00b67f09SDavid van Moolenbroek /*
4*00b67f09SDavid van Moolenbroek * Automated Testing Framework (atf)
5*00b67f09SDavid van Moolenbroek *
6*00b67f09SDavid van Moolenbroek * Copyright (c) 2008 The NetBSD Foundation, Inc.
7*00b67f09SDavid van Moolenbroek * All rights reserved.
8*00b67f09SDavid van Moolenbroek *
9*00b67f09SDavid van Moolenbroek * Redistribution and use in source and binary forms, with or without
10*00b67f09SDavid van Moolenbroek * modification, are permitted provided that the following conditions
11*00b67f09SDavid van Moolenbroek * are met:
12*00b67f09SDavid van Moolenbroek * 1. Redistributions of source code must retain the above copyright
13*00b67f09SDavid van Moolenbroek * notice, this list of conditions and the following disclaimer.
14*00b67f09SDavid van Moolenbroek * 2. Redistributions in binary form must reproduce the above copyright
15*00b67f09SDavid van Moolenbroek * notice, this list of conditions and the following disclaimer in the
16*00b67f09SDavid van Moolenbroek * documentation and/or other materials provided with the distribution.
17*00b67f09SDavid van Moolenbroek *
18*00b67f09SDavid van Moolenbroek * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND
19*00b67f09SDavid van Moolenbroek * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
20*00b67f09SDavid van Moolenbroek * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
21*00b67f09SDavid van Moolenbroek * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
22*00b67f09SDavid van Moolenbroek * IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY
23*00b67f09SDavid van Moolenbroek * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24*00b67f09SDavid van Moolenbroek * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
25*00b67f09SDavid van Moolenbroek * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26*00b67f09SDavid van Moolenbroek * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
27*00b67f09SDavid van Moolenbroek * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
28*00b67f09SDavid van Moolenbroek * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
29*00b67f09SDavid van Moolenbroek * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30*00b67f09SDavid van Moolenbroek */
31*00b67f09SDavid van Moolenbroek
32*00b67f09SDavid van Moolenbroek #include <stdarg.h>
33*00b67f09SDavid van Moolenbroek #include <stdint.h>
34*00b67f09SDavid van Moolenbroek #include <stdio.h>
35*00b67f09SDavid van Moolenbroek #include <stdlib.h>
36*00b67f09SDavid van Moolenbroek #include <string.h>
37*00b67f09SDavid van Moolenbroek
38*00b67f09SDavid van Moolenbroek #include <atf-c.h>
39*00b67f09SDavid van Moolenbroek
40*00b67f09SDavid van Moolenbroek #include "dynstr.h"
41*00b67f09SDavid van Moolenbroek #include "test_helpers.h"
42*00b67f09SDavid van Moolenbroek
43*00b67f09SDavid van Moolenbroek /* ---------------------------------------------------------------------
44*00b67f09SDavid van Moolenbroek * Tests for the "atf_dynstr" type.
45*00b67f09SDavid van Moolenbroek * --------------------------------------------------------------------- */
46*00b67f09SDavid van Moolenbroek
47*00b67f09SDavid van Moolenbroek /*
48*00b67f09SDavid van Moolenbroek * Constructors and destructors.
49*00b67f09SDavid van Moolenbroek */
50*00b67f09SDavid van Moolenbroek
51*00b67f09SDavid van Moolenbroek ATF_TC(init);
ATF_TC_HEAD(init,tc)52*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(init, tc)
53*00b67f09SDavid van Moolenbroek {
54*00b67f09SDavid van Moolenbroek atf_tc_set_md_var(tc, "descr", "Checks the empty constructor");
55*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(init,tc)56*00b67f09SDavid van Moolenbroek ATF_TC_BODY(init, tc)
57*00b67f09SDavid van Moolenbroek {
58*00b67f09SDavid van Moolenbroek atf_dynstr_t str;
59*00b67f09SDavid van Moolenbroek
60*00b67f09SDavid van Moolenbroek RE(atf_dynstr_init(&str));
61*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(atf_dynstr_length(&str), 0);
62*00b67f09SDavid van Moolenbroek ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "") == 0);
63*00b67f09SDavid van Moolenbroek atf_dynstr_fini(&str);
64*00b67f09SDavid van Moolenbroek }
65*00b67f09SDavid van Moolenbroek
66*00b67f09SDavid van Moolenbroek static
67*00b67f09SDavid van Moolenbroek void
init_fmt(atf_dynstr_t * str,const char * fmt,...)68*00b67f09SDavid van Moolenbroek init_fmt(atf_dynstr_t *str, const char *fmt, ...)
69*00b67f09SDavid van Moolenbroek {
70*00b67f09SDavid van Moolenbroek va_list ap;
71*00b67f09SDavid van Moolenbroek
72*00b67f09SDavid van Moolenbroek va_start(ap, fmt);
73*00b67f09SDavid van Moolenbroek RE(atf_dynstr_init_ap(str, fmt, ap));
74*00b67f09SDavid van Moolenbroek va_end(ap);
75*00b67f09SDavid van Moolenbroek }
76*00b67f09SDavid van Moolenbroek
77*00b67f09SDavid van Moolenbroek ATF_TC(init_ap);
ATF_TC_HEAD(init_ap,tc)78*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(init_ap, tc)
79*00b67f09SDavid van Moolenbroek {
80*00b67f09SDavid van Moolenbroek atf_tc_set_md_var(tc, "descr", "Checks the formatted constructor using "
81*00b67f09SDavid van Moolenbroek "a va_list argument");
82*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(init_ap,tc)83*00b67f09SDavid van Moolenbroek ATF_TC_BODY(init_ap, tc)
84*00b67f09SDavid van Moolenbroek {
85*00b67f09SDavid van Moolenbroek atf_dynstr_t str;
86*00b67f09SDavid van Moolenbroek
87*00b67f09SDavid van Moolenbroek init_fmt(&str, "String 1");
88*00b67f09SDavid van Moolenbroek ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "String 1") == 0);
89*00b67f09SDavid van Moolenbroek atf_dynstr_fini(&str);
90*00b67f09SDavid van Moolenbroek
91*00b67f09SDavid van Moolenbroek init_fmt(&str, "String %d", 2);
92*00b67f09SDavid van Moolenbroek ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "String 2") == 0);
93*00b67f09SDavid van Moolenbroek atf_dynstr_fini(&str);
94*00b67f09SDavid van Moolenbroek
95*00b67f09SDavid van Moolenbroek init_fmt(&str, "%s %d", "String", 3);
96*00b67f09SDavid van Moolenbroek ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "String 3") == 0);
97*00b67f09SDavid van Moolenbroek atf_dynstr_fini(&str);
98*00b67f09SDavid van Moolenbroek
99*00b67f09SDavid van Moolenbroek init_fmt(&str, "%s%s%s%s%s%s%s", "This ", "should ", "be ", "a ",
100*00b67f09SDavid van Moolenbroek "large ", "string ", "aaaabbbbccccdddd");
101*00b67f09SDavid van Moolenbroek ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str),
102*00b67f09SDavid van Moolenbroek "This should be a large string "
103*00b67f09SDavid van Moolenbroek "aaaabbbbccccdddd") == 0);
104*00b67f09SDavid van Moolenbroek atf_dynstr_fini(&str);
105*00b67f09SDavid van Moolenbroek }
106*00b67f09SDavid van Moolenbroek
107*00b67f09SDavid van Moolenbroek ATF_TC(init_fmt);
ATF_TC_HEAD(init_fmt,tc)108*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(init_fmt, tc)
109*00b67f09SDavid van Moolenbroek {
110*00b67f09SDavid van Moolenbroek atf_tc_set_md_var(tc, "descr", "Checks the formatted constructor using "
111*00b67f09SDavid van Moolenbroek "a variable list of parameters");
112*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(init_fmt,tc)113*00b67f09SDavid van Moolenbroek ATF_TC_BODY(init_fmt, tc)
114*00b67f09SDavid van Moolenbroek {
115*00b67f09SDavid van Moolenbroek atf_dynstr_t str;
116*00b67f09SDavid van Moolenbroek
117*00b67f09SDavid van Moolenbroek RE(atf_dynstr_init_fmt(&str, "String 1"));
118*00b67f09SDavid van Moolenbroek ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "String 1") == 0);
119*00b67f09SDavid van Moolenbroek atf_dynstr_fini(&str);
120*00b67f09SDavid van Moolenbroek
121*00b67f09SDavid van Moolenbroek RE(atf_dynstr_init_fmt(&str, "String %d", 2));
122*00b67f09SDavid van Moolenbroek ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "String 2") == 0);
123*00b67f09SDavid van Moolenbroek atf_dynstr_fini(&str);
124*00b67f09SDavid van Moolenbroek
125*00b67f09SDavid van Moolenbroek RE(atf_dynstr_init_fmt(&str, "%s %d", "String", 3));
126*00b67f09SDavid van Moolenbroek ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "String 3") == 0);
127*00b67f09SDavid van Moolenbroek atf_dynstr_fini(&str);
128*00b67f09SDavid van Moolenbroek
129*00b67f09SDavid van Moolenbroek RE(atf_dynstr_init_fmt(&str, "%s%s%s%s%s%s%s", "This ", "should ",
130*00b67f09SDavid van Moolenbroek "be ", "a ", "large ", "string ",
131*00b67f09SDavid van Moolenbroek "aaaabbbbccccdddd"));
132*00b67f09SDavid van Moolenbroek ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str),
133*00b67f09SDavid van Moolenbroek "This should be a large string "
134*00b67f09SDavid van Moolenbroek "aaaabbbbccccdddd") == 0);
135*00b67f09SDavid van Moolenbroek atf_dynstr_fini(&str);
136*00b67f09SDavid van Moolenbroek }
137*00b67f09SDavid van Moolenbroek
138*00b67f09SDavid van Moolenbroek ATF_TC(init_raw);
ATF_TC_HEAD(init_raw,tc)139*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(init_raw, tc)
140*00b67f09SDavid van Moolenbroek {
141*00b67f09SDavid van Moolenbroek atf_tc_set_md_var(tc, "descr", "Checks the construction of a string "
142*00b67f09SDavid van Moolenbroek "using a raw memory pointer");
143*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(init_raw,tc)144*00b67f09SDavid van Moolenbroek ATF_TC_BODY(init_raw, tc)
145*00b67f09SDavid van Moolenbroek {
146*00b67f09SDavid van Moolenbroek const char *src = "String 1, String 2";
147*00b67f09SDavid van Moolenbroek atf_dynstr_t str;
148*00b67f09SDavid van Moolenbroek
149*00b67f09SDavid van Moolenbroek RE(atf_dynstr_init_raw(&str, src, 0));
150*00b67f09SDavid van Moolenbroek ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "") == 0);
151*00b67f09SDavid van Moolenbroek atf_dynstr_fini(&str);
152*00b67f09SDavid van Moolenbroek
153*00b67f09SDavid van Moolenbroek RE(atf_dynstr_init_raw(&str, src, 8));
154*00b67f09SDavid van Moolenbroek ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "String 1") == 0);
155*00b67f09SDavid van Moolenbroek atf_dynstr_fini(&str);
156*00b67f09SDavid van Moolenbroek
157*00b67f09SDavid van Moolenbroek RE(atf_dynstr_init_raw(&str, src + 10, 8));
158*00b67f09SDavid van Moolenbroek ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "String 2") == 0);
159*00b67f09SDavid van Moolenbroek atf_dynstr_fini(&str);
160*00b67f09SDavid van Moolenbroek
161*00b67f09SDavid van Moolenbroek RE(atf_dynstr_init_raw(&str, "String\0Lost", 11));
162*00b67f09SDavid van Moolenbroek ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "String") == 0);
163*00b67f09SDavid van Moolenbroek atf_dynstr_fini(&str);
164*00b67f09SDavid van Moolenbroek
165*00b67f09SDavid van Moolenbroek {
166*00b67f09SDavid van Moolenbroek atf_error_t err = atf_dynstr_init_raw(&str, "NULL", SIZE_MAX - 1);
167*00b67f09SDavid van Moolenbroek ATF_REQUIRE(atf_is_error(err));
168*00b67f09SDavid van Moolenbroek ATF_REQUIRE(atf_error_is(err, "no_memory"));
169*00b67f09SDavid van Moolenbroek atf_error_free(err);
170*00b67f09SDavid van Moolenbroek }
171*00b67f09SDavid van Moolenbroek }
172*00b67f09SDavid van Moolenbroek
173*00b67f09SDavid van Moolenbroek ATF_TC(init_rep);
ATF_TC_HEAD(init_rep,tc)174*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(init_rep, tc)
175*00b67f09SDavid van Moolenbroek {
176*00b67f09SDavid van Moolenbroek atf_tc_set_md_var(tc, "descr", "Checks the construction of a string by "
177*00b67f09SDavid van Moolenbroek "repeating characters");
178*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(init_rep,tc)179*00b67f09SDavid van Moolenbroek ATF_TC_BODY(init_rep, tc)
180*00b67f09SDavid van Moolenbroek {
181*00b67f09SDavid van Moolenbroek const size_t maxlen = 8192;
182*00b67f09SDavid van Moolenbroek char buf[maxlen + 1];
183*00b67f09SDavid van Moolenbroek size_t i;
184*00b67f09SDavid van Moolenbroek
185*00b67f09SDavid van Moolenbroek buf[0] = '\0';
186*00b67f09SDavid van Moolenbroek
187*00b67f09SDavid van Moolenbroek for (i = 0; i < maxlen; i++) {
188*00b67f09SDavid van Moolenbroek atf_dynstr_t str;
189*00b67f09SDavid van Moolenbroek
190*00b67f09SDavid van Moolenbroek RE(atf_dynstr_init_rep(&str, i, 'a'));
191*00b67f09SDavid van Moolenbroek
192*00b67f09SDavid van Moolenbroek if (strcmp(atf_dynstr_cstring(&str), buf) != 0) {
193*00b67f09SDavid van Moolenbroek fprintf(stderr, "Failed at iteration %zd\n", i);
194*00b67f09SDavid van Moolenbroek atf_tc_fail("Failed to construct dynstr by repeating %zd "
195*00b67f09SDavid van Moolenbroek "times the '%c' character", i, 'a');
196*00b67f09SDavid van Moolenbroek }
197*00b67f09SDavid van Moolenbroek
198*00b67f09SDavid van Moolenbroek atf_dynstr_fini(&str);
199*00b67f09SDavid van Moolenbroek
200*00b67f09SDavid van Moolenbroek strcat(buf, "a");
201*00b67f09SDavid van Moolenbroek }
202*00b67f09SDavid van Moolenbroek
203*00b67f09SDavid van Moolenbroek {
204*00b67f09SDavid van Moolenbroek atf_dynstr_t str;
205*00b67f09SDavid van Moolenbroek atf_error_t err;
206*00b67f09SDavid van Moolenbroek
207*00b67f09SDavid van Moolenbroek err = atf_dynstr_init_rep(&str, SIZE_MAX, 'a');
208*00b67f09SDavid van Moolenbroek ATF_REQUIRE(atf_is_error(err));
209*00b67f09SDavid van Moolenbroek ATF_REQUIRE(atf_error_is(err, "no_memory"));
210*00b67f09SDavid van Moolenbroek atf_error_free(err);
211*00b67f09SDavid van Moolenbroek
212*00b67f09SDavid van Moolenbroek err = atf_dynstr_init_rep(&str, SIZE_MAX - 1, 'a');
213*00b67f09SDavid van Moolenbroek ATF_REQUIRE(atf_is_error(err));
214*00b67f09SDavid van Moolenbroek ATF_REQUIRE(atf_error_is(err, "no_memory"));
215*00b67f09SDavid van Moolenbroek atf_error_free(err);
216*00b67f09SDavid van Moolenbroek }
217*00b67f09SDavid van Moolenbroek }
218*00b67f09SDavid van Moolenbroek
219*00b67f09SDavid van Moolenbroek ATF_TC(init_substr);
ATF_TC_HEAD(init_substr,tc)220*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(init_substr, tc)
221*00b67f09SDavid van Moolenbroek {
222*00b67f09SDavid van Moolenbroek atf_tc_set_md_var(tc, "descr", "Checks the construction of a string "
223*00b67f09SDavid van Moolenbroek "using a substring of another one");
224*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(init_substr,tc)225*00b67f09SDavid van Moolenbroek ATF_TC_BODY(init_substr, tc)
226*00b67f09SDavid van Moolenbroek {
227*00b67f09SDavid van Moolenbroek atf_dynstr_t src;
228*00b67f09SDavid van Moolenbroek atf_dynstr_t str;
229*00b67f09SDavid van Moolenbroek
230*00b67f09SDavid van Moolenbroek RE(atf_dynstr_init_fmt(&src, "Str 1, Str 2"));
231*00b67f09SDavid van Moolenbroek
232*00b67f09SDavid van Moolenbroek RE(atf_dynstr_init_substr(&str, &src, 0, 0));
233*00b67f09SDavid van Moolenbroek ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "") == 0);
234*00b67f09SDavid van Moolenbroek atf_dynstr_fini(&str);
235*00b67f09SDavid van Moolenbroek
236*00b67f09SDavid van Moolenbroek RE(atf_dynstr_init_substr(&str, &src, 0, atf_dynstr_npos));
237*00b67f09SDavid van Moolenbroek ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "Str 1, Str 2") == 0);
238*00b67f09SDavid van Moolenbroek atf_dynstr_fini(&str);
239*00b67f09SDavid van Moolenbroek
240*00b67f09SDavid van Moolenbroek RE(atf_dynstr_init_substr(&str, &src, 0, 100));
241*00b67f09SDavid van Moolenbroek ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "Str 1, Str 2") == 0);
242*00b67f09SDavid van Moolenbroek atf_dynstr_fini(&str);
243*00b67f09SDavid van Moolenbroek
244*00b67f09SDavid van Moolenbroek RE(atf_dynstr_init_substr(&str, &src, 0, 5));
245*00b67f09SDavid van Moolenbroek ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "Str 1") == 0);
246*00b67f09SDavid van Moolenbroek atf_dynstr_fini(&str);
247*00b67f09SDavid van Moolenbroek
248*00b67f09SDavid van Moolenbroek RE(atf_dynstr_init_substr(&str, &src, 100, atf_dynstr_npos));
249*00b67f09SDavid van Moolenbroek ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "") == 0);
250*00b67f09SDavid van Moolenbroek atf_dynstr_fini(&str);
251*00b67f09SDavid van Moolenbroek
252*00b67f09SDavid van Moolenbroek RE(atf_dynstr_init_substr(&str, &src, 7, atf_dynstr_npos));
253*00b67f09SDavid van Moolenbroek ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "Str 2") == 0);
254*00b67f09SDavid van Moolenbroek atf_dynstr_fini(&str);
255*00b67f09SDavid van Moolenbroek
256*00b67f09SDavid van Moolenbroek atf_dynstr_fini(&src);
257*00b67f09SDavid van Moolenbroek }
258*00b67f09SDavid van Moolenbroek
259*00b67f09SDavid van Moolenbroek ATF_TC(copy);
ATF_TC_HEAD(copy,tc)260*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(copy, tc)
261*00b67f09SDavid van Moolenbroek {
262*00b67f09SDavid van Moolenbroek atf_tc_set_md_var(tc, "descr", "Checks the atf_dynstr_copy constructor");
263*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(copy,tc)264*00b67f09SDavid van Moolenbroek ATF_TC_BODY(copy, tc)
265*00b67f09SDavid van Moolenbroek {
266*00b67f09SDavid van Moolenbroek atf_dynstr_t str, str2;
267*00b67f09SDavid van Moolenbroek
268*00b67f09SDavid van Moolenbroek RE(atf_dynstr_init_fmt(&str, "Test string"));
269*00b67f09SDavid van Moolenbroek RE(atf_dynstr_copy(&str2, &str));
270*00b67f09SDavid van Moolenbroek
271*00b67f09SDavid van Moolenbroek ATF_REQUIRE(atf_equal_dynstr_dynstr(&str, &str2));
272*00b67f09SDavid van Moolenbroek
273*00b67f09SDavid van Moolenbroek RE(atf_dynstr_append_fmt(&str2, " non-shared text"));
274*00b67f09SDavid van Moolenbroek
275*00b67f09SDavid van Moolenbroek ATF_REQUIRE(!atf_equal_dynstr_dynstr(&str, &str2));
276*00b67f09SDavid van Moolenbroek
277*00b67f09SDavid van Moolenbroek atf_dynstr_fini(&str2);
278*00b67f09SDavid van Moolenbroek atf_dynstr_fini(&str);
279*00b67f09SDavid van Moolenbroek }
280*00b67f09SDavid van Moolenbroek
281*00b67f09SDavid van Moolenbroek ATF_TC(fini_disown);
ATF_TC_HEAD(fini_disown,tc)282*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(fini_disown, tc)
283*00b67f09SDavid van Moolenbroek {
284*00b67f09SDavid van Moolenbroek atf_tc_set_md_var(tc, "descr", "Checks grabbing ownership of the "
285*00b67f09SDavid van Moolenbroek "internal plain C string");
286*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(fini_disown,tc)287*00b67f09SDavid van Moolenbroek ATF_TC_BODY(fini_disown, tc)
288*00b67f09SDavid van Moolenbroek {
289*00b67f09SDavid van Moolenbroek const char *cstr;
290*00b67f09SDavid van Moolenbroek char *cstr2;
291*00b67f09SDavid van Moolenbroek atf_dynstr_t str;
292*00b67f09SDavid van Moolenbroek
293*00b67f09SDavid van Moolenbroek RE(atf_dynstr_init_fmt(&str, "Test string 1"));
294*00b67f09SDavid van Moolenbroek cstr = atf_dynstr_cstring(&str);
295*00b67f09SDavid van Moolenbroek cstr2 = atf_dynstr_fini_disown(&str);
296*00b67f09SDavid van Moolenbroek
297*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(cstr, cstr2);
298*00b67f09SDavid van Moolenbroek free(cstr2);
299*00b67f09SDavid van Moolenbroek }
300*00b67f09SDavid van Moolenbroek
301*00b67f09SDavid van Moolenbroek /*
302*00b67f09SDavid van Moolenbroek * Getters.
303*00b67f09SDavid van Moolenbroek */
304*00b67f09SDavid van Moolenbroek
305*00b67f09SDavid van Moolenbroek ATF_TC(cstring);
ATF_TC_HEAD(cstring,tc)306*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(cstring, tc)
307*00b67f09SDavid van Moolenbroek {
308*00b67f09SDavid van Moolenbroek atf_tc_set_md_var(tc, "descr", "Checks the method to obtain a plain C "
309*00b67f09SDavid van Moolenbroek "string");
310*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(cstring,tc)311*00b67f09SDavid van Moolenbroek ATF_TC_BODY(cstring, tc)
312*00b67f09SDavid van Moolenbroek {
313*00b67f09SDavid van Moolenbroek const char *cstr;
314*00b67f09SDavid van Moolenbroek atf_dynstr_t str;
315*00b67f09SDavid van Moolenbroek
316*00b67f09SDavid van Moolenbroek RE(atf_dynstr_init_fmt(&str, "Test string 1"));
317*00b67f09SDavid van Moolenbroek cstr = atf_dynstr_cstring(&str);
318*00b67f09SDavid van Moolenbroek ATF_REQUIRE(cstr != NULL);
319*00b67f09SDavid van Moolenbroek ATF_REQUIRE(strcmp(cstr, "Test string 1") == 0);
320*00b67f09SDavid van Moolenbroek atf_dynstr_fini(&str);
321*00b67f09SDavid van Moolenbroek
322*00b67f09SDavid van Moolenbroek RE(atf_dynstr_init_fmt(&str, "Test string 2"));
323*00b67f09SDavid van Moolenbroek cstr = atf_dynstr_cstring(&str);
324*00b67f09SDavid van Moolenbroek ATF_REQUIRE(cstr != NULL);
325*00b67f09SDavid van Moolenbroek ATF_REQUIRE(strcmp(cstr, "Test string 2") == 0);
326*00b67f09SDavid van Moolenbroek atf_dynstr_fini(&str);
327*00b67f09SDavid van Moolenbroek }
328*00b67f09SDavid van Moolenbroek
329*00b67f09SDavid van Moolenbroek ATF_TC(length);
ATF_TC_HEAD(length,tc)330*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(length, tc)
331*00b67f09SDavid van Moolenbroek {
332*00b67f09SDavid van Moolenbroek atf_tc_set_md_var(tc, "descr", "Checks the method to obtain the length");
333*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(length,tc)334*00b67f09SDavid van Moolenbroek ATF_TC_BODY(length, tc)
335*00b67f09SDavid van Moolenbroek {
336*00b67f09SDavid van Moolenbroek size_t i;
337*00b67f09SDavid van Moolenbroek
338*00b67f09SDavid van Moolenbroek for (i = 0; i < 8192; i++) {
339*00b67f09SDavid van Moolenbroek atf_dynstr_t str;
340*00b67f09SDavid van Moolenbroek RE(atf_dynstr_init_rep(&str, i, 'a'));
341*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(atf_dynstr_length(&str), i);
342*00b67f09SDavid van Moolenbroek atf_dynstr_fini(&str);
343*00b67f09SDavid van Moolenbroek }
344*00b67f09SDavid van Moolenbroek }
345*00b67f09SDavid van Moolenbroek
346*00b67f09SDavid van Moolenbroek ATF_TC(rfind_ch);
ATF_TC_HEAD(rfind_ch,tc)347*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(rfind_ch, tc)
348*00b67f09SDavid van Moolenbroek {
349*00b67f09SDavid van Moolenbroek atf_tc_set_md_var(tc, "descr", "Checks the method to locate the first "
350*00b67f09SDavid van Moolenbroek "occurrence of a character starting from the end");
351*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(rfind_ch,tc)352*00b67f09SDavid van Moolenbroek ATF_TC_BODY(rfind_ch, tc)
353*00b67f09SDavid van Moolenbroek {
354*00b67f09SDavid van Moolenbroek atf_dynstr_t str;
355*00b67f09SDavid van Moolenbroek
356*00b67f09SDavid van Moolenbroek RE(atf_dynstr_init_fmt(&str, "Foo1/Bar2/,.Baz"));
357*00b67f09SDavid van Moolenbroek
358*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(atf_dynstr_rfind_ch(&str, '\0'), atf_dynstr_npos);
359*00b67f09SDavid van Moolenbroek
360*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(atf_dynstr_rfind_ch(&str, '0'), atf_dynstr_npos);
361*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(atf_dynstr_rfind_ch(&str, 'b'), atf_dynstr_npos);
362*00b67f09SDavid van Moolenbroek
363*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(atf_dynstr_rfind_ch(&str, 'F'), 0);
364*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(atf_dynstr_rfind_ch(&str, '/'), 9);
365*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(atf_dynstr_rfind_ch(&str, 'a'), 13);
366*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(atf_dynstr_rfind_ch(&str, 'z'), 14);
367*00b67f09SDavid van Moolenbroek
368*00b67f09SDavid van Moolenbroek atf_dynstr_fini(&str);
369*00b67f09SDavid van Moolenbroek }
370*00b67f09SDavid van Moolenbroek
371*00b67f09SDavid van Moolenbroek /*
372*00b67f09SDavid van Moolenbroek * Modifiers.
373*00b67f09SDavid van Moolenbroek */
374*00b67f09SDavid van Moolenbroek
375*00b67f09SDavid van Moolenbroek static
376*00b67f09SDavid van Moolenbroek void
check_append(atf_error_t (* append)(atf_dynstr_t *,const char *,...))377*00b67f09SDavid van Moolenbroek check_append(atf_error_t (*append)(atf_dynstr_t *, const char *, ...))
378*00b67f09SDavid van Moolenbroek {
379*00b67f09SDavid van Moolenbroek const size_t maxlen = 8192;
380*00b67f09SDavid van Moolenbroek char buf[maxlen + 1];
381*00b67f09SDavid van Moolenbroek size_t i;
382*00b67f09SDavid van Moolenbroek atf_dynstr_t str;
383*00b67f09SDavid van Moolenbroek
384*00b67f09SDavid van Moolenbroek printf("Appending with plain string\n");
385*00b67f09SDavid van Moolenbroek buf[0] = '\0';
386*00b67f09SDavid van Moolenbroek RE(atf_dynstr_init(&str));
387*00b67f09SDavid van Moolenbroek for (i = 0; i < maxlen; i++) {
388*00b67f09SDavid van Moolenbroek if (strcmp(atf_dynstr_cstring(&str), buf) != 0) {
389*00b67f09SDavid van Moolenbroek fprintf(stderr, "Failed at iteration %zd\n", i);
390*00b67f09SDavid van Moolenbroek atf_tc_fail("Failed to append character at iteration %zd", i);
391*00b67f09SDavid van Moolenbroek }
392*00b67f09SDavid van Moolenbroek
393*00b67f09SDavid van Moolenbroek RE(append(&str, "a"));
394*00b67f09SDavid van Moolenbroek strcat(buf, "a");
395*00b67f09SDavid van Moolenbroek }
396*00b67f09SDavid van Moolenbroek atf_dynstr_fini(&str);
397*00b67f09SDavid van Moolenbroek
398*00b67f09SDavid van Moolenbroek printf("Appending with formatted string\n");
399*00b67f09SDavid van Moolenbroek buf[0] = '\0';
400*00b67f09SDavid van Moolenbroek RE(atf_dynstr_init(&str));
401*00b67f09SDavid van Moolenbroek for (i = 0; i < maxlen; i++) {
402*00b67f09SDavid van Moolenbroek if (strcmp(atf_dynstr_cstring(&str), buf) != 0) {
403*00b67f09SDavid van Moolenbroek fprintf(stderr, "Failed at iteration %zd\n", i);
404*00b67f09SDavid van Moolenbroek atf_tc_fail("Failed to append character at iteration %zd", i);
405*00b67f09SDavid van Moolenbroek }
406*00b67f09SDavid van Moolenbroek
407*00b67f09SDavid van Moolenbroek RE(append(&str, "%s", "a"));
408*00b67f09SDavid van Moolenbroek strcat(buf, "a");
409*00b67f09SDavid van Moolenbroek }
410*00b67f09SDavid van Moolenbroek atf_dynstr_fini(&str);
411*00b67f09SDavid van Moolenbroek }
412*00b67f09SDavid van Moolenbroek
413*00b67f09SDavid van Moolenbroek static
414*00b67f09SDavid van Moolenbroek atf_error_t
append_ap_aux(atf_dynstr_t * str,const char * fmt,...)415*00b67f09SDavid van Moolenbroek append_ap_aux(atf_dynstr_t *str, const char *fmt, ...)
416*00b67f09SDavid van Moolenbroek {
417*00b67f09SDavid van Moolenbroek va_list ap;
418*00b67f09SDavid van Moolenbroek atf_error_t err;
419*00b67f09SDavid van Moolenbroek
420*00b67f09SDavid van Moolenbroek va_start(ap, fmt);
421*00b67f09SDavid van Moolenbroek err = atf_dynstr_append_ap(str, fmt, ap);
422*00b67f09SDavid van Moolenbroek va_end(ap);
423*00b67f09SDavid van Moolenbroek
424*00b67f09SDavid van Moolenbroek return err;
425*00b67f09SDavid van Moolenbroek }
426*00b67f09SDavid van Moolenbroek
427*00b67f09SDavid van Moolenbroek ATF_TC(append_ap);
ATF_TC_HEAD(append_ap,tc)428*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(append_ap, tc)
429*00b67f09SDavid van Moolenbroek {
430*00b67f09SDavid van Moolenbroek atf_tc_set_md_var(tc, "descr", "Checks that appending a string to "
431*00b67f09SDavid van Moolenbroek "another one works");
432*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(append_ap,tc)433*00b67f09SDavid van Moolenbroek ATF_TC_BODY(append_ap, tc)
434*00b67f09SDavid van Moolenbroek {
435*00b67f09SDavid van Moolenbroek check_append(append_ap_aux);
436*00b67f09SDavid van Moolenbroek }
437*00b67f09SDavid van Moolenbroek
438*00b67f09SDavid van Moolenbroek ATF_TC(append_fmt);
ATF_TC_HEAD(append_fmt,tc)439*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(append_fmt, tc)
440*00b67f09SDavid van Moolenbroek {
441*00b67f09SDavid van Moolenbroek atf_tc_set_md_var(tc, "descr", "Checks that appending a string to "
442*00b67f09SDavid van Moolenbroek "another one works");
443*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(append_fmt,tc)444*00b67f09SDavid van Moolenbroek ATF_TC_BODY(append_fmt, tc)
445*00b67f09SDavid van Moolenbroek {
446*00b67f09SDavid van Moolenbroek check_append(atf_dynstr_append_fmt);
447*00b67f09SDavid van Moolenbroek }
448*00b67f09SDavid van Moolenbroek
449*00b67f09SDavid van Moolenbroek ATF_TC(clear);
ATF_TC_HEAD(clear,tc)450*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(clear, tc)
451*00b67f09SDavid van Moolenbroek {
452*00b67f09SDavid van Moolenbroek atf_tc_set_md_var(tc, "descr", "Checks clearing a string");
453*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(clear,tc)454*00b67f09SDavid van Moolenbroek ATF_TC_BODY(clear, tc)
455*00b67f09SDavid van Moolenbroek {
456*00b67f09SDavid van Moolenbroek atf_dynstr_t str;
457*00b67f09SDavid van Moolenbroek
458*00b67f09SDavid van Moolenbroek printf("Clear an empty string\n");
459*00b67f09SDavid van Moolenbroek RE(atf_dynstr_init(&str));
460*00b67f09SDavid van Moolenbroek atf_dynstr_clear(&str);
461*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(atf_dynstr_length(&str), 0);
462*00b67f09SDavid van Moolenbroek ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "") == 0);
463*00b67f09SDavid van Moolenbroek atf_dynstr_fini(&str);
464*00b67f09SDavid van Moolenbroek
465*00b67f09SDavid van Moolenbroek printf("Clear a non-empty string\n");
466*00b67f09SDavid van Moolenbroek RE(atf_dynstr_init_fmt(&str, "Not empty"));
467*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(atf_dynstr_length(&str), strlen("Not empty"));
468*00b67f09SDavid van Moolenbroek ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "Not empty") == 0);
469*00b67f09SDavid van Moolenbroek atf_dynstr_clear(&str);
470*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(atf_dynstr_length(&str), 0);
471*00b67f09SDavid van Moolenbroek ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "") == 0);
472*00b67f09SDavid van Moolenbroek atf_dynstr_fini(&str);
473*00b67f09SDavid van Moolenbroek }
474*00b67f09SDavid van Moolenbroek
475*00b67f09SDavid van Moolenbroek static
476*00b67f09SDavid van Moolenbroek void
check_prepend(atf_error_t (* prepend)(atf_dynstr_t *,const char *,...))477*00b67f09SDavid van Moolenbroek check_prepend(atf_error_t (*prepend)(atf_dynstr_t *, const char *, ...))
478*00b67f09SDavid van Moolenbroek {
479*00b67f09SDavid van Moolenbroek const size_t maxlen = 8192;
480*00b67f09SDavid van Moolenbroek char buf[maxlen + 1];
481*00b67f09SDavid van Moolenbroek size_t i;
482*00b67f09SDavid van Moolenbroek atf_dynstr_t str;
483*00b67f09SDavid van Moolenbroek
484*00b67f09SDavid van Moolenbroek printf("Prepending with plain string\n");
485*00b67f09SDavid van Moolenbroek buf[0] = '\0';
486*00b67f09SDavid van Moolenbroek RE(atf_dynstr_init(&str));
487*00b67f09SDavid van Moolenbroek for (i = 0; i < maxlen; i++) {
488*00b67f09SDavid van Moolenbroek if (strcmp(atf_dynstr_cstring(&str), buf) != 0) {
489*00b67f09SDavid van Moolenbroek fprintf(stderr, "Failed at iteration %zd\n", i);
490*00b67f09SDavid van Moolenbroek atf_tc_fail("Failed to prepend character at iteration %zd", i);
491*00b67f09SDavid van Moolenbroek }
492*00b67f09SDavid van Moolenbroek
493*00b67f09SDavid van Moolenbroek memmove(buf + 1, buf, i + 1);
494*00b67f09SDavid van Moolenbroek if (i % 2 == 0) {
495*00b67f09SDavid van Moolenbroek RE(prepend(&str, "%s", "a"));
496*00b67f09SDavid van Moolenbroek buf[0] = 'a';
497*00b67f09SDavid van Moolenbroek } else {
498*00b67f09SDavid van Moolenbroek RE(prepend(&str, "%s", "b"));
499*00b67f09SDavid van Moolenbroek buf[0] = 'b';
500*00b67f09SDavid van Moolenbroek }
501*00b67f09SDavid van Moolenbroek }
502*00b67f09SDavid van Moolenbroek atf_dynstr_fini(&str);
503*00b67f09SDavid van Moolenbroek
504*00b67f09SDavid van Moolenbroek printf("Prepending with formatted string\n");
505*00b67f09SDavid van Moolenbroek buf[0] = '\0';
506*00b67f09SDavid van Moolenbroek RE(atf_dynstr_init(&str));
507*00b67f09SDavid van Moolenbroek for (i = 0; i < maxlen; i++) {
508*00b67f09SDavid van Moolenbroek if (strcmp(atf_dynstr_cstring(&str), buf) != 0) {
509*00b67f09SDavid van Moolenbroek fprintf(stderr, "Failed at iteration %zd\n", i);
510*00b67f09SDavid van Moolenbroek atf_tc_fail("Failed to prepend character at iteration %zd", i);
511*00b67f09SDavid van Moolenbroek }
512*00b67f09SDavid van Moolenbroek
513*00b67f09SDavid van Moolenbroek memmove(buf + 1, buf, i + 1);
514*00b67f09SDavid van Moolenbroek if (i % 2 == 0) {
515*00b67f09SDavid van Moolenbroek RE(prepend(&str, "%s", "a"));
516*00b67f09SDavid van Moolenbroek buf[0] = 'a';
517*00b67f09SDavid van Moolenbroek } else {
518*00b67f09SDavid van Moolenbroek RE(prepend(&str, "%s", "b"));
519*00b67f09SDavid van Moolenbroek buf[0] = 'b';
520*00b67f09SDavid van Moolenbroek }
521*00b67f09SDavid van Moolenbroek }
522*00b67f09SDavid van Moolenbroek atf_dynstr_fini(&str);
523*00b67f09SDavid van Moolenbroek }
524*00b67f09SDavid van Moolenbroek
525*00b67f09SDavid van Moolenbroek static
526*00b67f09SDavid van Moolenbroek atf_error_t
prepend_ap_aux(atf_dynstr_t * str,const char * fmt,...)527*00b67f09SDavid van Moolenbroek prepend_ap_aux(atf_dynstr_t *str, const char *fmt, ...)
528*00b67f09SDavid van Moolenbroek {
529*00b67f09SDavid van Moolenbroek va_list ap;
530*00b67f09SDavid van Moolenbroek atf_error_t err;
531*00b67f09SDavid van Moolenbroek
532*00b67f09SDavid van Moolenbroek va_start(ap, fmt);
533*00b67f09SDavid van Moolenbroek err = atf_dynstr_prepend_ap(str, fmt, ap);
534*00b67f09SDavid van Moolenbroek va_end(ap);
535*00b67f09SDavid van Moolenbroek
536*00b67f09SDavid van Moolenbroek return err;
537*00b67f09SDavid van Moolenbroek }
538*00b67f09SDavid van Moolenbroek
539*00b67f09SDavid van Moolenbroek ATF_TC(prepend_ap);
ATF_TC_HEAD(prepend_ap,tc)540*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(prepend_ap, tc)
541*00b67f09SDavid van Moolenbroek {
542*00b67f09SDavid van Moolenbroek atf_tc_set_md_var(tc, "descr", "Checks that prepending a string to "
543*00b67f09SDavid van Moolenbroek "another one works");
544*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(prepend_ap,tc)545*00b67f09SDavid van Moolenbroek ATF_TC_BODY(prepend_ap, tc)
546*00b67f09SDavid van Moolenbroek {
547*00b67f09SDavid van Moolenbroek check_prepend(prepend_ap_aux);
548*00b67f09SDavid van Moolenbroek }
549*00b67f09SDavid van Moolenbroek
550*00b67f09SDavid van Moolenbroek ATF_TC(prepend_fmt);
ATF_TC_HEAD(prepend_fmt,tc)551*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(prepend_fmt, tc)
552*00b67f09SDavid van Moolenbroek {
553*00b67f09SDavid van Moolenbroek atf_tc_set_md_var(tc, "descr", "Checks that prepending a string to "
554*00b67f09SDavid van Moolenbroek "another one works");
555*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(prepend_fmt,tc)556*00b67f09SDavid van Moolenbroek ATF_TC_BODY(prepend_fmt, tc)
557*00b67f09SDavid van Moolenbroek {
558*00b67f09SDavid van Moolenbroek check_prepend(atf_dynstr_prepend_fmt);
559*00b67f09SDavid van Moolenbroek }
560*00b67f09SDavid van Moolenbroek
561*00b67f09SDavid van Moolenbroek /*
562*00b67f09SDavid van Moolenbroek * Operators.
563*00b67f09SDavid van Moolenbroek */
564*00b67f09SDavid van Moolenbroek
565*00b67f09SDavid van Moolenbroek ATF_TC(equal_cstring);
ATF_TC_HEAD(equal_cstring,tc)566*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(equal_cstring, tc)
567*00b67f09SDavid van Moolenbroek {
568*00b67f09SDavid van Moolenbroek atf_tc_set_md_var(tc, "descr", "Checks the atf_equal_dynstr_cstring "
569*00b67f09SDavid van Moolenbroek "function");
570*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(equal_cstring,tc)571*00b67f09SDavid van Moolenbroek ATF_TC_BODY(equal_cstring, tc)
572*00b67f09SDavid van Moolenbroek {
573*00b67f09SDavid van Moolenbroek atf_dynstr_t str;
574*00b67f09SDavid van Moolenbroek
575*00b67f09SDavid van Moolenbroek RE(atf_dynstr_init(&str));
576*00b67f09SDavid van Moolenbroek ATF_REQUIRE( atf_equal_dynstr_cstring(&str, ""));
577*00b67f09SDavid van Moolenbroek ATF_REQUIRE(!atf_equal_dynstr_cstring(&str, "Test"));
578*00b67f09SDavid van Moolenbroek atf_dynstr_fini(&str);
579*00b67f09SDavid van Moolenbroek
580*00b67f09SDavid van Moolenbroek RE(atf_dynstr_init_fmt(&str, "Test"));
581*00b67f09SDavid van Moolenbroek ATF_REQUIRE( atf_equal_dynstr_cstring(&str, "Test"));
582*00b67f09SDavid van Moolenbroek ATF_REQUIRE(!atf_equal_dynstr_cstring(&str, ""));
583*00b67f09SDavid van Moolenbroek ATF_REQUIRE(!atf_equal_dynstr_cstring(&str, "Tes"));
584*00b67f09SDavid van Moolenbroek ATF_REQUIRE(!atf_equal_dynstr_cstring(&str, "Test "));
585*00b67f09SDavid van Moolenbroek atf_dynstr_fini(&str);
586*00b67f09SDavid van Moolenbroek }
587*00b67f09SDavid van Moolenbroek
588*00b67f09SDavid van Moolenbroek ATF_TC(equal_dynstr);
ATF_TC_HEAD(equal_dynstr,tc)589*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(equal_dynstr, tc)
590*00b67f09SDavid van Moolenbroek {
591*00b67f09SDavid van Moolenbroek atf_tc_set_md_var(tc, "descr", "Checks the atf_equal_dynstr_dynstr "
592*00b67f09SDavid van Moolenbroek "function");
593*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(equal_dynstr,tc)594*00b67f09SDavid van Moolenbroek ATF_TC_BODY(equal_dynstr, tc)
595*00b67f09SDavid van Moolenbroek {
596*00b67f09SDavid van Moolenbroek atf_dynstr_t str, str2;
597*00b67f09SDavid van Moolenbroek
598*00b67f09SDavid van Moolenbroek RE(atf_dynstr_init(&str));
599*00b67f09SDavid van Moolenbroek RE(atf_dynstr_init_fmt(&str2, "Test"));
600*00b67f09SDavid van Moolenbroek ATF_REQUIRE( atf_equal_dynstr_dynstr(&str, &str));
601*00b67f09SDavid van Moolenbroek ATF_REQUIRE(!atf_equal_dynstr_dynstr(&str, &str2));
602*00b67f09SDavid van Moolenbroek atf_dynstr_fini(&str2);
603*00b67f09SDavid van Moolenbroek atf_dynstr_fini(&str);
604*00b67f09SDavid van Moolenbroek }
605*00b67f09SDavid van Moolenbroek
606*00b67f09SDavid van Moolenbroek /* ---------------------------------------------------------------------
607*00b67f09SDavid van Moolenbroek * Main.
608*00b67f09SDavid van Moolenbroek * --------------------------------------------------------------------- */
609*00b67f09SDavid van Moolenbroek
ATF_TP_ADD_TCS(tp)610*00b67f09SDavid van Moolenbroek ATF_TP_ADD_TCS(tp)
611*00b67f09SDavid van Moolenbroek {
612*00b67f09SDavid van Moolenbroek /* Constructors and destructors. */
613*00b67f09SDavid van Moolenbroek ATF_TP_ADD_TC(tp, init);
614*00b67f09SDavid van Moolenbroek ATF_TP_ADD_TC(tp, init_ap);
615*00b67f09SDavid van Moolenbroek ATF_TP_ADD_TC(tp, init_fmt);
616*00b67f09SDavid van Moolenbroek ATF_TP_ADD_TC(tp, init_raw);
617*00b67f09SDavid van Moolenbroek ATF_TP_ADD_TC(tp, init_rep);
618*00b67f09SDavid van Moolenbroek ATF_TP_ADD_TC(tp, init_substr);
619*00b67f09SDavid van Moolenbroek ATF_TP_ADD_TC(tp, copy);
620*00b67f09SDavid van Moolenbroek ATF_TP_ADD_TC(tp, fini_disown);
621*00b67f09SDavid van Moolenbroek
622*00b67f09SDavid van Moolenbroek /* Getters. */
623*00b67f09SDavid van Moolenbroek ATF_TP_ADD_TC(tp, cstring);
624*00b67f09SDavid van Moolenbroek ATF_TP_ADD_TC(tp, length);
625*00b67f09SDavid van Moolenbroek ATF_TP_ADD_TC(tp, rfind_ch);
626*00b67f09SDavid van Moolenbroek
627*00b67f09SDavid van Moolenbroek /* Modifiers. */
628*00b67f09SDavid van Moolenbroek ATF_TP_ADD_TC(tp, append_ap);
629*00b67f09SDavid van Moolenbroek ATF_TP_ADD_TC(tp, append_fmt);
630*00b67f09SDavid van Moolenbroek ATF_TP_ADD_TC(tp, clear);
631*00b67f09SDavid van Moolenbroek ATF_TP_ADD_TC(tp, prepend_ap);
632*00b67f09SDavid van Moolenbroek ATF_TP_ADD_TC(tp, prepend_fmt);
633*00b67f09SDavid van Moolenbroek
634*00b67f09SDavid van Moolenbroek /* Operators. */
635*00b67f09SDavid van Moolenbroek ATF_TP_ADD_TC(tp, equal_cstring);
636*00b67f09SDavid van Moolenbroek ATF_TP_ADD_TC(tp, equal_dynstr);
637*00b67f09SDavid van Moolenbroek
638*00b67f09SDavid van Moolenbroek return atf_no_error();
639*00b67f09SDavid van Moolenbroek }
640