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