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 1401b2ffceSMarc-André Lureau #include "qapi/qmp/qnum.h" 157b1b5d19SPaolo Bonzini #include "qapi/qmp/qlist.h" 163aa3dcffSLuiz Capitulino 173aa3dcffSLuiz Capitulino /* 183aa3dcffSLuiz Capitulino * Public Interface test-cases 193aa3dcffSLuiz Capitulino * 203aa3dcffSLuiz Capitulino * (with some violations to access 'private' data) 213aa3dcffSLuiz Capitulino */ 223aa3dcffSLuiz Capitulino 2391479dd0SAnthony Liguori static void qlist_new_test(void) 243aa3dcffSLuiz Capitulino { 253aa3dcffSLuiz Capitulino QList *qlist; 263aa3dcffSLuiz Capitulino 273aa3dcffSLuiz Capitulino qlist = qlist_new(); 2891479dd0SAnthony Liguori g_assert(qlist != NULL); 2991479dd0SAnthony Liguori g_assert(qlist->base.refcnt == 1); 3091479dd0SAnthony Liguori g_assert(qobject_type(QOBJECT(qlist)) == QTYPE_QLIST); 313aa3dcffSLuiz Capitulino 32*cb3e7f08SMarc-André Lureau qobject_unref(qlist); 333aa3dcffSLuiz Capitulino } 343aa3dcffSLuiz Capitulino 3591479dd0SAnthony Liguori static void qlist_append_test(void) 363aa3dcffSLuiz Capitulino { 3701b2ffceSMarc-André Lureau QNum *qi; 383aa3dcffSLuiz Capitulino QList *qlist; 393aa3dcffSLuiz Capitulino QListEntry *entry; 403aa3dcffSLuiz Capitulino 4101b2ffceSMarc-André Lureau qi = qnum_from_int(42); 423aa3dcffSLuiz Capitulino 433aa3dcffSLuiz Capitulino qlist = qlist_new(); 443aa3dcffSLuiz Capitulino qlist_append(qlist, qi); 453aa3dcffSLuiz Capitulino 463aa3dcffSLuiz Capitulino entry = QTAILQ_FIRST(&qlist->head); 4791479dd0SAnthony Liguori g_assert(entry != NULL); 4891479dd0SAnthony Liguori g_assert(entry->value == QOBJECT(qi)); 493aa3dcffSLuiz Capitulino 50*cb3e7f08SMarc-André Lureau qobject_unref(qlist); 513aa3dcffSLuiz Capitulino } 523aa3dcffSLuiz Capitulino 5391479dd0SAnthony Liguori static void qobject_to_qlist_test(void) 543aa3dcffSLuiz Capitulino { 553aa3dcffSLuiz Capitulino QList *qlist; 563aa3dcffSLuiz Capitulino 573aa3dcffSLuiz Capitulino qlist = qlist_new(); 583aa3dcffSLuiz Capitulino 597dc847ebSMax Reitz g_assert(qobject_to(QList, QOBJECT(qlist)) == qlist); 603aa3dcffSLuiz Capitulino 61*cb3e7f08SMarc-André Lureau qobject_unref(qlist); 623aa3dcffSLuiz Capitulino } 633aa3dcffSLuiz Capitulino 643aa3dcffSLuiz Capitulino static int iter_called; 653aa3dcffSLuiz Capitulino static const int iter_max = 42; 663aa3dcffSLuiz Capitulino 673aa3dcffSLuiz Capitulino static void iter_func(QObject *obj, void *opaque) 683aa3dcffSLuiz Capitulino { 6901b2ffceSMarc-André Lureau QNum *qi; 7001b2ffceSMarc-André Lureau int64_t val; 713aa3dcffSLuiz Capitulino 7291479dd0SAnthony Liguori g_assert(opaque == NULL); 733aa3dcffSLuiz Capitulino 747dc847ebSMax Reitz qi = qobject_to(QNum, obj); 7591479dd0SAnthony Liguori g_assert(qi != NULL); 7601b2ffceSMarc-André Lureau 7701b2ffceSMarc-André Lureau g_assert(qnum_get_try_int(qi, &val)); 7801b2ffceSMarc-André Lureau g_assert_cmpint(val, >=, 0); 7901b2ffceSMarc-André Lureau g_assert_cmpint(val, <=, iter_max); 803aa3dcffSLuiz Capitulino 813aa3dcffSLuiz Capitulino iter_called++; 823aa3dcffSLuiz Capitulino } 833aa3dcffSLuiz Capitulino 8491479dd0SAnthony Liguori static void qlist_iter_test(void) 853aa3dcffSLuiz Capitulino { 863aa3dcffSLuiz Capitulino int i; 873aa3dcffSLuiz Capitulino QList *qlist; 883aa3dcffSLuiz Capitulino 893aa3dcffSLuiz Capitulino qlist = qlist_new(); 903aa3dcffSLuiz Capitulino 913aa3dcffSLuiz Capitulino for (i = 0; i < iter_max; i++) 9246f5ac20SEric Blake qlist_append_int(qlist, i); 933aa3dcffSLuiz Capitulino 943aa3dcffSLuiz Capitulino iter_called = 0; 953aa3dcffSLuiz Capitulino qlist_iter(qlist, iter_func, NULL); 963aa3dcffSLuiz Capitulino 9791479dd0SAnthony Liguori g_assert(iter_called == iter_max); 983aa3dcffSLuiz Capitulino 99*cb3e7f08SMarc-André Lureau qobject_unref(qlist); 1003aa3dcffSLuiz Capitulino } 1013aa3dcffSLuiz Capitulino 10291479dd0SAnthony Liguori int main(int argc, char **argv) 1033aa3dcffSLuiz Capitulino { 10491479dd0SAnthony Liguori g_test_init(&argc, &argv, NULL); 1053aa3dcffSLuiz Capitulino 10691479dd0SAnthony Liguori g_test_add_func("/public/new", qlist_new_test); 10791479dd0SAnthony Liguori g_test_add_func("/public/append", qlist_append_test); 10891479dd0SAnthony Liguori g_test_add_func("/public/to_qlist", qobject_to_qlist_test); 10991479dd0SAnthony Liguori g_test_add_func("/public/iter", qlist_iter_test); 1103aa3dcffSLuiz Capitulino 11191479dd0SAnthony Liguori return g_test_run(); 1123aa3dcffSLuiz Capitulino } 113