xref: /qemu/tests/unit/check-qlist.c (revision 01b2ffcedd94ad7b42bc870e4c6936c87ad03429)
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  */
12681c28a3SPeter Maydell #include "qemu/osdep.h"
133aa3dcffSLuiz Capitulino 
14*01b2ffceSMarc-André Lureau #include "qapi/error.h"
15*01b2ffceSMarc-André Lureau #include "qapi/qmp/qnum.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 {
39*01b2ffceSMarc-André Lureau     QNum *qi;
403aa3dcffSLuiz Capitulino     QList *qlist;
413aa3dcffSLuiz Capitulino     QListEntry *entry;
423aa3dcffSLuiz Capitulino 
43*01b2ffceSMarc-André Lureau     qi = qnum_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++)
7846f5ac20SEric Blake         qlist_append_int(qlist, 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 {
88*01b2ffceSMarc-André Lureau     QNum *qi;
89*01b2ffceSMarc-André Lureau     int64_t val;
903aa3dcffSLuiz Capitulino 
9191479dd0SAnthony Liguori     g_assert(opaque == NULL);
923aa3dcffSLuiz Capitulino 
93*01b2ffceSMarc-André Lureau     qi = qobject_to_qnum(obj);
9491479dd0SAnthony Liguori     g_assert(qi != NULL);
95*01b2ffceSMarc-André Lureau 
96*01b2ffceSMarc-André Lureau     g_assert(qnum_get_try_int(qi, &val));
97*01b2ffceSMarc-André Lureau     g_assert_cmpint(val, >=, 0);
98*01b2ffceSMarc-André Lureau     g_assert_cmpint(val, <=, iter_max);
993aa3dcffSLuiz Capitulino 
1003aa3dcffSLuiz Capitulino     iter_called++;
1013aa3dcffSLuiz Capitulino }
1023aa3dcffSLuiz Capitulino 
10391479dd0SAnthony Liguori static void qlist_iter_test(void)
1043aa3dcffSLuiz Capitulino {
1053aa3dcffSLuiz Capitulino     int i;
1063aa3dcffSLuiz Capitulino     QList *qlist;
1073aa3dcffSLuiz Capitulino 
1083aa3dcffSLuiz Capitulino     qlist = qlist_new();
1093aa3dcffSLuiz Capitulino 
1103aa3dcffSLuiz Capitulino     for (i = 0; i < iter_max; i++)
11146f5ac20SEric Blake         qlist_append_int(qlist, i);
1123aa3dcffSLuiz Capitulino 
1133aa3dcffSLuiz Capitulino     iter_called = 0;
1143aa3dcffSLuiz Capitulino     qlist_iter(qlist, iter_func, NULL);
1153aa3dcffSLuiz Capitulino 
11691479dd0SAnthony Liguori     g_assert(iter_called == iter_max);
1173aa3dcffSLuiz Capitulino 
1183aa3dcffSLuiz Capitulino     QDECREF(qlist);
1193aa3dcffSLuiz Capitulino }
1203aa3dcffSLuiz Capitulino 
12191479dd0SAnthony Liguori int main(int argc, char **argv)
1223aa3dcffSLuiz Capitulino {
12391479dd0SAnthony Liguori     g_test_init(&argc, &argv, NULL);
1243aa3dcffSLuiz Capitulino 
12591479dd0SAnthony Liguori     g_test_add_func("/public/new", qlist_new_test);
12691479dd0SAnthony Liguori     g_test_add_func("/public/append", qlist_append_test);
12791479dd0SAnthony Liguori     g_test_add_func("/public/to_qlist", qobject_to_qlist_test);
12891479dd0SAnthony Liguori     g_test_add_func("/public/destroy", qlist_destroy_test);
12991479dd0SAnthony Liguori     g_test_add_func("/public/iter", qlist_iter_test);
1303aa3dcffSLuiz Capitulino 
13191479dd0SAnthony Liguori     return g_test_run();
1323aa3dcffSLuiz Capitulino }
133