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