cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

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
     23static 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
     35static 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
     53static 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
     64static 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
     93int 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}