]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/test/test-strbuf.c
consoled: add a unit file
[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"
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
51 assert(streq(l[0], "")); /* root*/
52 assert(streq(l[1], "waldo"));
53 assert(streq(l[2], "foo"));
54 assert(streq(l[3], "bar"));
55 assert(streq(l[4], "waldorf"));
56
57 assert(sb->nodes_count == 5); /* root + 4 non-duplicates */
58 assert(sb->dedup_count == 3);
59 assert(sb->in_count == 7);
60
61 assert(sb->in_len == 29); /* length of all strings added */
62 assert(sb->dedup_len == 11); /* length of all strings duplicated */
63 assert(sb->len == 23); /* buffer length: in - dedup + \0 for each node */
64
65 /* check the returned offsets and the respective content in the buffer */
66 assert(a == 1);
67 assert(b == 7);
68 assert(c == 11);
69 assert(d == 1);
70 assert(e == 2);
71 assert(f == 4);
72 assert(g == 15);
73
74 assert(streq(sb->buf + a, "waldo"));
75 assert(streq(sb->buf + b, "foo"));
76 assert(streq(sb->buf + c, "bar"));
77 assert(streq(sb->buf + d, "waldo"));
78 assert(streq(sb->buf + e, "aldo"));
79 assert(streq(sb->buf + f, "do"));
80 assert(streq(sb->buf + g, "waldorf"));
81
82 strbuf_complete(sb);
83 assert(sb->root == NULL);
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}