1
2
3
4
5
6
7
8
9
10
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
20
21
22
23
24static 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
34 g_free(qlist);
35}
36
37static 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
53 QDECREF(qi);
54 g_free(entry);
55 g_free(qlist);
56}
57
58static 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
67 g_free(qlist);
68}
69
70static 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
83static int iter_called;
84static const int iter_max = 42;
85
86static 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
99static 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
117int 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}
129