]>
git.ipfire.org Git - thirdparty/systemd.git/blob - src/test/test-strbuf.c
1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
6 #include "string-util.h"
11 static ssize_t
add_string(struct strbuf
*sb
, const char *s
) {
12 return strbuf_add_string(sb
, s
, strlen(s
));
16 _cleanup_(strbuf_freep
) struct strbuf
*sb
;
17 _cleanup_strv_free_
char **l
;
18 ssize_t a
, b
, c
, d
, e
, f
, g
, h
;
22 a
= add_string(sb
, "waldo");
23 b
= add_string(sb
, "foo");
24 c
= add_string(sb
, "bar");
25 d
= add_string(sb
, "waldo"); /* duplicate */
26 e
= add_string(sb
, "aldo"); /* duplicate */
27 f
= add_string(sb
, "do"); /* duplicate */
28 g
= add_string(sb
, "waldorf"); /* not a duplicate: matches from tail */
29 h
= add_string(sb
, "");
31 /* check the content of the buffer directly */
32 l
= strv_parse_nulstr(sb
->buf
, sb
->len
);
35 assert_se(streq(l
[0], "")); /* root */
36 assert_se(streq(l
[1], "waldo"));
37 assert_se(streq(l
[2], "foo"));
38 assert_se(streq(l
[3], "bar"));
39 assert_se(streq(l
[4], "waldorf"));
40 assert_se(l
[5] == NULL
);
42 assert_se(sb
->nodes_count
== 5); /* root + 4 non-duplicates */
43 assert_se(sb
->dedup_count
== 4);
44 assert_se(sb
->in_count
== 8);
46 assert_se(sb
->in_len
== 29); /* length of all strings added */
47 assert_se(sb
->dedup_len
== 11); /* length of all strings duplicated */
48 assert_se(sb
->len
== 23); /* buffer length: in - dedup + \0 for each node */
50 /* check the returned offsets and the respective content in the buffer */
60 assert_se(streq(sb
->buf
+ a
, "waldo"));
61 assert_se(streq(sb
->buf
+ b
, "foo"));
62 assert_se(streq(sb
->buf
+ c
, "bar"));
63 assert_se(streq(sb
->buf
+ d
, "waldo"));
64 assert_se(streq(sb
->buf
+ e
, "aldo"));
65 assert_se(streq(sb
->buf
+ f
, "do"));
66 assert_se(streq(sb
->buf
+ g
, "waldorf"));
67 assert_se(streq(sb
->buf
+ h
, ""));
70 assert_se(sb
->root
== NULL
);
73 DEFINE_TEST_MAIN(LOG_INFO
);