]> git.proxmox.com Git - mirror_qemu.git/blob - tests/check-qlist.c
Merge remote-tracking branch 'remotes/mst/tags/for_upstream' into staging
[mirror_qemu.git] / tests / check-qlist.c
1 /*
2 * QList unit-tests.
3 *
4 * Copyright (C) 2009 Red Hat Inc.
5 *
6 * Authors:
7 * Luiz Capitulino <lcapitulino@redhat.com>
8 *
9 * This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
10 * See the COPYING.LIB file in the top-level directory.
11 */
12 #include "qemu/osdep.h"
13 #include <glib.h>
14
15 #include "qapi/qmp/qint.h"
16 #include "qapi/qmp/qlist.h"
17
18 /*
19 * Public Interface test-cases
20 *
21 * (with some violations to access 'private' data)
22 */
23
24 static void qlist_new_test(void)
25 {
26 QList *qlist;
27
28 qlist = qlist_new();
29 g_assert(qlist != NULL);
30 g_assert(qlist->base.refcnt == 1);
31 g_assert(qobject_type(QOBJECT(qlist)) == QTYPE_QLIST);
32
33 // destroy doesn't exist yet
34 g_free(qlist);
35 }
36
37 static void qlist_append_test(void)
38 {
39 QInt *qi;
40 QList *qlist;
41 QListEntry *entry;
42
43 qi = qint_from_int(42);
44
45 qlist = qlist_new();
46 qlist_append(qlist, qi);
47
48 entry = QTAILQ_FIRST(&qlist->head);
49 g_assert(entry != NULL);
50 g_assert(entry->value == QOBJECT(qi));
51
52 // destroy doesn't exist yet
53 QDECREF(qi);
54 g_free(entry);
55 g_free(qlist);
56 }
57
58 static void qobject_to_qlist_test(void)
59 {
60 QList *qlist;
61
62 qlist = qlist_new();
63
64 g_assert(qobject_to_qlist(QOBJECT(qlist)) == qlist);
65
66 // destroy doesn't exist yet
67 g_free(qlist);
68 }
69
70 static void qlist_destroy_test(void)
71 {
72 int i;
73 QList *qlist;
74
75 qlist = qlist_new();
76
77 for (i = 0; i < 42; i++)
78 qlist_append(qlist, qint_from_int(i));
79
80 QDECREF(qlist);
81 }
82
83 static int iter_called;
84 static const int iter_max = 42;
85
86 static void iter_func(QObject *obj, void *opaque)
87 {
88 QInt *qi;
89
90 g_assert(opaque == NULL);
91
92 qi = qobject_to_qint(obj);
93 g_assert(qi != NULL);
94 g_assert((qint_get_int(qi) >= 0) && (qint_get_int(qi) <= iter_max));
95
96 iter_called++;
97 }
98
99 static void qlist_iter_test(void)
100 {
101 int i;
102 QList *qlist;
103
104 qlist = qlist_new();
105
106 for (i = 0; i < iter_max; i++)
107 qlist_append(qlist, qint_from_int(i));
108
109 iter_called = 0;
110 qlist_iter(qlist, iter_func, NULL);
111
112 g_assert(iter_called == iter_max);
113
114 QDECREF(qlist);
115 }
116
117 int main(int argc, char **argv)
118 {
119 g_test_init(&argc, &argv, NULL);
120
121 g_test_add_func("/public/new", qlist_new_test);
122 g_test_add_func("/public/append", qlist_append_test);
123 g_test_add_func("/public/to_qlist", qobject_to_qlist_test);
124 g_test_add_func("/public/destroy", qlist_destroy_test);
125 g_test_add_func("/public/iter", qlist_iter_test);
126
127 return g_test_run();
128 }