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