Statistics
| Branch: | Revision:

root / tests / check-qlist.c @ 5d12aa63

History | View | Annotate | Download (2.4 kB)

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