]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/test/test-strbuf.c
Add SPDX license identifiers to source files under the LGPL
[thirdparty/systemd.git] / src / test / test-strbuf.c
CommitLineData
53e1b683 1/* SPDX-License-Identifier: LGPL-2.1+ */
97b5f608
TA
2/***
3 This file is part of systemd.
4
5 Copyright 2013 Thomas H.P. Andersen
6
7 systemd is free software; you can redistribute it and/or modify it
8 under the terms of the GNU Lesser General Public License as published by
9 the Free Software Foundation; either version 2.1 of the License, or
10 (at your option) any later version.
11
12 systemd is distributed in the hope that it will be useful, but
13 WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Lesser General Public License for more details.
16
17 You should have received a copy of the GNU Lesser General Public License
18 along with systemd; If not, see <http://www.gnu.org/licenses/>.
19***/
20
21#include <stdlib.h>
22#include <string.h>
23
24#include "strbuf.h"
07630cea 25#include "string-util.h"
97b5f608
TA
26#include "strv.h"
27#include "util.h"
28
29static ssize_t add_string(struct strbuf *sb, const char *s) {
30 return strbuf_add_string(sb, s, strlen(s));
31}
32
33static void test_strbuf(void) {
34 struct strbuf *sb;
c62c294f 35 _cleanup_strv_free_ char **l;
97b5f608
TA
36 ssize_t a, b, c, d, e, f, g;
37
38 sb = strbuf_new();
39
40 a = add_string(sb, "waldo");
41 b = add_string(sb, "foo");
42 c = add_string(sb, "bar");
43 d = add_string(sb, "waldo"); /* duplicate */
44 e = add_string(sb, "aldo"); /* duplicate */
45 f = add_string(sb, "do"); /* duplicate */
46 g = add_string(sb, "waldorf"); /* not a duplicate: matches from tail */
47
48 /* check the content of the buffer directly */
49 l = strv_parse_nulstr(sb->buf, sb->len);
50
f7340ab2 51 assert_se(streq(l[0], "")); /* root */
bdf7026e
TA
52 assert_se(streq(l[1], "waldo"));
53 assert_se(streq(l[2], "foo"));
54 assert_se(streq(l[3], "bar"));
55 assert_se(streq(l[4], "waldorf"));
97b5f608 56
bdf7026e
TA
57 assert_se(sb->nodes_count == 5); /* root + 4 non-duplicates */
58 assert_se(sb->dedup_count == 3);
59 assert_se(sb->in_count == 7);
97b5f608 60
bdf7026e
TA
61 assert_se(sb->in_len == 29); /* length of all strings added */
62 assert_se(sb->dedup_len == 11); /* length of all strings duplicated */
63 assert_se(sb->len == 23); /* buffer length: in - dedup + \0 for each node */
97b5f608
TA
64
65 /* check the returned offsets and the respective content in the buffer */
bdf7026e
TA
66 assert_se(a == 1);
67 assert_se(b == 7);
68 assert_se(c == 11);
69 assert_se(d == 1);
70 assert_se(e == 2);
71 assert_se(f == 4);
72 assert_se(g == 15);
73
74 assert_se(streq(sb->buf + a, "waldo"));
75 assert_se(streq(sb->buf + b, "foo"));
76 assert_se(streq(sb->buf + c, "bar"));
77 assert_se(streq(sb->buf + d, "waldo"));
78 assert_se(streq(sb->buf + e, "aldo"));
79 assert_se(streq(sb->buf + f, "do"));
80 assert_se(streq(sb->buf + g, "waldorf"));
97b5f608
TA
81
82 strbuf_complete(sb);
bdf7026e 83 assert_se(sb->root == NULL);
97b5f608
TA
84
85 strbuf_cleanup(sb);
86}
87
f168c273 88int main(int argc, const char *argv[]) {
97b5f608
TA
89 test_strbuf();
90
91 return 0;
92}