qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

check-qlist.c (2044B)


      1 /*
      2  * QList unit-tests.
      3  *
      4  * Copyright (C) 2009 Red Hat Inc.
      5  *
      6  * Authors:
      7  *  Luiz Capitulino <lcapitulino@redhat.com>
      8  *
      9  * This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
     10  * See the COPYING.LIB file in the top-level directory.
     11  */
     12 #include "qemu/osdep.h"
     13 
     14 #include "qapi/qmp/qnum.h"
     15 #include "qapi/qmp/qlist.h"
     16 
     17 /*
     18  * Public Interface test-cases
     19  *
     20  * (with some violations to access 'private' data)
     21  */
     22 
     23 static void qlist_new_test(void)
     24 {
     25     QList *qlist;
     26 
     27     qlist = qlist_new();
     28     g_assert(qlist != NULL);
     29     g_assert(qlist->base.refcnt == 1);
     30     g_assert(qobject_type(QOBJECT(qlist)) == QTYPE_QLIST);
     31 
     32     qobject_unref(qlist);
     33 }
     34 
     35 static void qlist_append_test(void)
     36 {
     37     QNum *qi;
     38     QList *qlist;
     39     QListEntry *entry;
     40 
     41     qi = qnum_from_int(42);
     42 
     43     qlist = qlist_new();
     44     qlist_append(qlist, qi);
     45 
     46     entry = QTAILQ_FIRST(&qlist->head);
     47     g_assert(entry != NULL);
     48     g_assert(entry->value == QOBJECT(qi));
     49 
     50     qobject_unref(qlist);
     51 }
     52 
     53 static void qobject_to_qlist_test(void)
     54 {
     55     QList *qlist;
     56 
     57     qlist = qlist_new();
     58 
     59     g_assert(qobject_to(QList, QOBJECT(qlist)) == qlist);
     60 
     61     qobject_unref(qlist);
     62 }
     63 
     64 static void qlist_iter_test(void)
     65 {
     66     const int iter_max = 42;
     67     int i;
     68     QList *qlist;
     69     QListEntry *entry;
     70     QNum *qi;
     71     int64_t val;
     72 
     73     qlist = qlist_new();
     74 
     75     for (i = 0; i < iter_max; i++)
     76         qlist_append_int(qlist, i);
     77 
     78     i = 0;
     79     QLIST_FOREACH_ENTRY(qlist, entry) {
     80         qi = qobject_to(QNum, qlist_entry_obj(entry));
     81         g_assert(qi != NULL);
     82 
     83         g_assert(qnum_get_try_int(qi, &val));
     84         g_assert_cmpint(val, ==, i);
     85         i++;
     86     }
     87 
     88     g_assert(i == iter_max);
     89 
     90     qobject_unref(qlist);
     91 }
     92 
     93 int main(int argc, char **argv)
     94 {
     95     g_test_init(&argc, &argv, NULL);
     96 
     97     g_test_add_func("/public/new", qlist_new_test);
     98     g_test_add_func("/public/append", qlist_append_test);
     99     g_test_add_func("/public/to_qlist", qobject_to_qlist_test);
    100     g_test_add_func("/public/iter", qlist_iter_test);
    101 
    102     return g_test_run();
    103 }