xref: /openbmc/qemu/tests/unit/check-qlist.c (revision 757acb9a8295e8be4a37b2cfc1cd947e357fd29c)
1*da668aa1SThomas Huth /*
2*da668aa1SThomas Huth  * QList unit-tests.
3*da668aa1SThomas Huth  *
4*da668aa1SThomas Huth  * Copyright (C) 2009 Red Hat Inc.
5*da668aa1SThomas Huth  *
6*da668aa1SThomas Huth  * Authors:
7*da668aa1SThomas Huth  *  Luiz Capitulino <lcapitulino@redhat.com>
8*da668aa1SThomas Huth  *
9*da668aa1SThomas Huth  * This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
10*da668aa1SThomas Huth  * See the COPYING.LIB file in the top-level directory.
11*da668aa1SThomas Huth  */
12*da668aa1SThomas Huth #include "qemu/osdep.h"
13*da668aa1SThomas Huth 
14*da668aa1SThomas Huth #include "qapi/qmp/qnum.h"
15*da668aa1SThomas Huth #include "qapi/qmp/qlist.h"
16*da668aa1SThomas Huth 
17*da668aa1SThomas Huth /*
18*da668aa1SThomas Huth  * Public Interface test-cases
19*da668aa1SThomas Huth  *
20*da668aa1SThomas Huth  * (with some violations to access 'private' data)
21*da668aa1SThomas Huth  */
22*da668aa1SThomas Huth 
qlist_new_test(void)23*da668aa1SThomas Huth static void qlist_new_test(void)
24*da668aa1SThomas Huth {
25*da668aa1SThomas Huth     QList *qlist;
26*da668aa1SThomas Huth 
27*da668aa1SThomas Huth     qlist = qlist_new();
28*da668aa1SThomas Huth     g_assert(qlist != NULL);
29*da668aa1SThomas Huth     g_assert(qlist->base.refcnt == 1);
30*da668aa1SThomas Huth     g_assert(qobject_type(QOBJECT(qlist)) == QTYPE_QLIST);
31*da668aa1SThomas Huth 
32*da668aa1SThomas Huth     qobject_unref(qlist);
33*da668aa1SThomas Huth }
34*da668aa1SThomas Huth 
qlist_append_test(void)35*da668aa1SThomas Huth static void qlist_append_test(void)
36*da668aa1SThomas Huth {
37*da668aa1SThomas Huth     QNum *qi;
38*da668aa1SThomas Huth     QList *qlist;
39*da668aa1SThomas Huth     QListEntry *entry;
40*da668aa1SThomas Huth 
41*da668aa1SThomas Huth     qi = qnum_from_int(42);
42*da668aa1SThomas Huth 
43*da668aa1SThomas Huth     qlist = qlist_new();
44*da668aa1SThomas Huth     qlist_append(qlist, qi);
45*da668aa1SThomas Huth 
46*da668aa1SThomas Huth     entry = QTAILQ_FIRST(&qlist->head);
47*da668aa1SThomas Huth     g_assert(entry != NULL);
48*da668aa1SThomas Huth     g_assert(entry->value == QOBJECT(qi));
49*da668aa1SThomas Huth 
50*da668aa1SThomas Huth     qobject_unref(qlist);
51*da668aa1SThomas Huth }
52*da668aa1SThomas Huth 
qobject_to_qlist_test(void)53*da668aa1SThomas Huth static void qobject_to_qlist_test(void)
54*da668aa1SThomas Huth {
55*da668aa1SThomas Huth     QList *qlist;
56*da668aa1SThomas Huth 
57*da668aa1SThomas Huth     qlist = qlist_new();
58*da668aa1SThomas Huth 
59*da668aa1SThomas Huth     g_assert(qobject_to(QList, QOBJECT(qlist)) == qlist);
60*da668aa1SThomas Huth 
61*da668aa1SThomas Huth     qobject_unref(qlist);
62*da668aa1SThomas Huth }
63*da668aa1SThomas Huth 
qlist_iter_test(void)64*da668aa1SThomas Huth static void qlist_iter_test(void)
65*da668aa1SThomas Huth {
66*da668aa1SThomas Huth     const int iter_max = 42;
67*da668aa1SThomas Huth     int i;
68*da668aa1SThomas Huth     QList *qlist;
69*da668aa1SThomas Huth     QListEntry *entry;
70*da668aa1SThomas Huth     QNum *qi;
71*da668aa1SThomas Huth     int64_t val;
72*da668aa1SThomas Huth 
73*da668aa1SThomas Huth     qlist = qlist_new();
74*da668aa1SThomas Huth 
75*da668aa1SThomas Huth     for (i = 0; i < iter_max; i++)
76*da668aa1SThomas Huth         qlist_append_int(qlist, i);
77*da668aa1SThomas Huth 
78*da668aa1SThomas Huth     i = 0;
79*da668aa1SThomas Huth     QLIST_FOREACH_ENTRY(qlist, entry) {
80*da668aa1SThomas Huth         qi = qobject_to(QNum, qlist_entry_obj(entry));
81*da668aa1SThomas Huth         g_assert(qi != NULL);
82*da668aa1SThomas Huth 
83*da668aa1SThomas Huth         g_assert(qnum_get_try_int(qi, &val));
84*da668aa1SThomas Huth         g_assert_cmpint(val, ==, i);
85*da668aa1SThomas Huth         i++;
86*da668aa1SThomas Huth     }
87*da668aa1SThomas Huth 
88*da668aa1SThomas Huth     g_assert(i == iter_max);
89*da668aa1SThomas Huth 
90*da668aa1SThomas Huth     qobject_unref(qlist);
91*da668aa1SThomas Huth }
92*da668aa1SThomas Huth 
main(int argc,char ** argv)93*da668aa1SThomas Huth int main(int argc, char **argv)
94*da668aa1SThomas Huth {
95*da668aa1SThomas Huth     g_test_init(&argc, &argv, NULL);
96*da668aa1SThomas Huth 
97*da668aa1SThomas Huth     g_test_add_func("/public/new", qlist_new_test);
98*da668aa1SThomas Huth     g_test_add_func("/public/append", qlist_append_test);
99*da668aa1SThomas Huth     g_test_add_func("/public/to_qlist", qobject_to_qlist_test);
100*da668aa1SThomas Huth     g_test_add_func("/public/iter", qlist_iter_test);
101*da668aa1SThomas Huth 
102*da668aa1SThomas Huth     return g_test_run();
103*da668aa1SThomas Huth }
104