xref: /qemu/tests/unit/check-qlist.c (revision 681c28a33e305923a717815808056d2d5a89c8f9)
13aa3dcffSLuiz Capitulino /*
23aa3dcffSLuiz Capitulino  * QList unit-tests.
33aa3dcffSLuiz Capitulino  *
43aa3dcffSLuiz Capitulino  * Copyright (C) 2009 Red Hat Inc.
53aa3dcffSLuiz Capitulino  *
63aa3dcffSLuiz Capitulino  * Authors:
73aa3dcffSLuiz Capitulino  *  Luiz Capitulino <lcapitulino@redhat.com>
83aa3dcffSLuiz Capitulino  *
941836a9fSLuiz Capitulino  * This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
1041836a9fSLuiz Capitulino  * See the COPYING.LIB file in the top-level directory.
113aa3dcffSLuiz Capitulino  */
12*681c28a3SPeter Maydell #include "qemu/osdep.h"
1391479dd0SAnthony Liguori #include <glib.h>
143aa3dcffSLuiz Capitulino 
157b1b5d19SPaolo Bonzini #include "qapi/qmp/qint.h"
167b1b5d19SPaolo Bonzini #include "qapi/qmp/qlist.h"
173aa3dcffSLuiz Capitulino 
183aa3dcffSLuiz Capitulino /*
193aa3dcffSLuiz Capitulino  * Public Interface test-cases
203aa3dcffSLuiz Capitulino  *
213aa3dcffSLuiz Capitulino  * (with some violations to access 'private' data)
223aa3dcffSLuiz Capitulino  */
233aa3dcffSLuiz Capitulino 
2491479dd0SAnthony Liguori static void qlist_new_test(void)
253aa3dcffSLuiz Capitulino {
263aa3dcffSLuiz Capitulino     QList *qlist;
273aa3dcffSLuiz Capitulino 
283aa3dcffSLuiz Capitulino     qlist = qlist_new();
2991479dd0SAnthony Liguori     g_assert(qlist != NULL);
3091479dd0SAnthony Liguori     g_assert(qlist->base.refcnt == 1);
3191479dd0SAnthony Liguori     g_assert(qobject_type(QOBJECT(qlist)) == QTYPE_QLIST);
323aa3dcffSLuiz Capitulino 
333aa3dcffSLuiz Capitulino     // destroy doesn't exist yet
347267c094SAnthony Liguori     g_free(qlist);
353aa3dcffSLuiz Capitulino }
363aa3dcffSLuiz Capitulino 
3791479dd0SAnthony Liguori static void qlist_append_test(void)
383aa3dcffSLuiz Capitulino {
393aa3dcffSLuiz Capitulino     QInt *qi;
403aa3dcffSLuiz Capitulino     QList *qlist;
413aa3dcffSLuiz Capitulino     QListEntry *entry;
423aa3dcffSLuiz Capitulino 
433aa3dcffSLuiz Capitulino     qi = qint_from_int(42);
443aa3dcffSLuiz Capitulino 
453aa3dcffSLuiz Capitulino     qlist = qlist_new();
463aa3dcffSLuiz Capitulino     qlist_append(qlist, qi);
473aa3dcffSLuiz Capitulino 
483aa3dcffSLuiz Capitulino     entry = QTAILQ_FIRST(&qlist->head);
4991479dd0SAnthony Liguori     g_assert(entry != NULL);
5091479dd0SAnthony Liguori     g_assert(entry->value == QOBJECT(qi));
513aa3dcffSLuiz Capitulino 
523aa3dcffSLuiz Capitulino     // destroy doesn't exist yet
533aa3dcffSLuiz Capitulino     QDECREF(qi);
547267c094SAnthony Liguori     g_free(entry);
557267c094SAnthony Liguori     g_free(qlist);
563aa3dcffSLuiz Capitulino }
573aa3dcffSLuiz Capitulino 
5891479dd0SAnthony Liguori static void qobject_to_qlist_test(void)
593aa3dcffSLuiz Capitulino {
603aa3dcffSLuiz Capitulino     QList *qlist;
613aa3dcffSLuiz Capitulino 
623aa3dcffSLuiz Capitulino     qlist = qlist_new();
633aa3dcffSLuiz Capitulino 
6491479dd0SAnthony Liguori     g_assert(qobject_to_qlist(QOBJECT(qlist)) == qlist);
653aa3dcffSLuiz Capitulino 
663aa3dcffSLuiz Capitulino     // destroy doesn't exist yet
677267c094SAnthony Liguori     g_free(qlist);
683aa3dcffSLuiz Capitulino }
693aa3dcffSLuiz Capitulino 
7091479dd0SAnthony Liguori static void qlist_destroy_test(void)
713aa3dcffSLuiz Capitulino {
723aa3dcffSLuiz Capitulino     int i;
733aa3dcffSLuiz Capitulino     QList *qlist;
743aa3dcffSLuiz Capitulino 
753aa3dcffSLuiz Capitulino     qlist = qlist_new();
763aa3dcffSLuiz Capitulino 
773aa3dcffSLuiz Capitulino     for (i = 0; i < 42; i++)
783aa3dcffSLuiz Capitulino         qlist_append(qlist, qint_from_int(i));
793aa3dcffSLuiz Capitulino 
803aa3dcffSLuiz Capitulino     QDECREF(qlist);
813aa3dcffSLuiz Capitulino }
823aa3dcffSLuiz Capitulino 
833aa3dcffSLuiz Capitulino static int iter_called;
843aa3dcffSLuiz Capitulino static const int iter_max = 42;
853aa3dcffSLuiz Capitulino 
863aa3dcffSLuiz Capitulino static void iter_func(QObject *obj, void *opaque)
873aa3dcffSLuiz Capitulino {
883aa3dcffSLuiz Capitulino     QInt *qi;
893aa3dcffSLuiz Capitulino 
9091479dd0SAnthony Liguori     g_assert(opaque == NULL);
913aa3dcffSLuiz Capitulino 
923aa3dcffSLuiz Capitulino     qi = qobject_to_qint(obj);
9391479dd0SAnthony Liguori     g_assert(qi != NULL);
9491479dd0SAnthony Liguori     g_assert((qint_get_int(qi) >= 0) && (qint_get_int(qi) <= iter_max));
953aa3dcffSLuiz Capitulino 
963aa3dcffSLuiz Capitulino     iter_called++;
973aa3dcffSLuiz Capitulino }
983aa3dcffSLuiz Capitulino 
9991479dd0SAnthony Liguori static void qlist_iter_test(void)
1003aa3dcffSLuiz Capitulino {
1013aa3dcffSLuiz Capitulino     int i;
1023aa3dcffSLuiz Capitulino     QList *qlist;
1033aa3dcffSLuiz Capitulino 
1043aa3dcffSLuiz Capitulino     qlist = qlist_new();
1053aa3dcffSLuiz Capitulino 
1063aa3dcffSLuiz Capitulino     for (i = 0; i < iter_max; i++)
1073aa3dcffSLuiz Capitulino         qlist_append(qlist, qint_from_int(i));
1083aa3dcffSLuiz Capitulino 
1093aa3dcffSLuiz Capitulino     iter_called = 0;
1103aa3dcffSLuiz Capitulino     qlist_iter(qlist, iter_func, NULL);
1113aa3dcffSLuiz Capitulino 
11291479dd0SAnthony Liguori     g_assert(iter_called == iter_max);
1133aa3dcffSLuiz Capitulino 
1143aa3dcffSLuiz Capitulino     QDECREF(qlist);
1153aa3dcffSLuiz Capitulino }
1163aa3dcffSLuiz Capitulino 
11791479dd0SAnthony Liguori int main(int argc, char **argv)
1183aa3dcffSLuiz Capitulino {
11991479dd0SAnthony Liguori     g_test_init(&argc, &argv, NULL);
1203aa3dcffSLuiz Capitulino 
12191479dd0SAnthony Liguori     g_test_add_func("/public/new", qlist_new_test);
12291479dd0SAnthony Liguori     g_test_add_func("/public/append", qlist_append_test);
12391479dd0SAnthony Liguori     g_test_add_func("/public/to_qlist", qobject_to_qlist_test);
12491479dd0SAnthony Liguori     g_test_add_func("/public/destroy", qlist_destroy_test);
12591479dd0SAnthony Liguori     g_test_add_func("/public/iter", qlist_iter_test);
1263aa3dcffSLuiz Capitulino 
12791479dd0SAnthony Liguori     return g_test_run();
1283aa3dcffSLuiz Capitulino }
129