]> Git Repo - qemu.git/blob - tests/check-qnum.c
iotests: Add preallocated growth test for qcow2
[qemu.git] / tests / check-qnum.c
1 /*
2  * QNum unit-tests.
3  *
4  * Copyright (C) 2009 Red Hat Inc.
5  * Copyright IBM, Corp. 2009
6  *
7  * Authors:
8  *  Luiz Capitulino <[email protected]>
9  *  Anthony Liguori <[email protected]>
10  *
11  * This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
12  * See the COPYING.LIB file in the top-level directory.
13  */
14
15 #include "qemu/osdep.h"
16
17 #include "qapi/qmp/qnum.h"
18 #include "qapi/error.h"
19 #include "qemu-common.h"
20
21 /*
22  * Public Interface test-cases
23  *
24  * (with some violations to access 'private' data)
25  */
26
27 static void qnum_from_int_test(void)
28 {
29     QNum *qn;
30     const int value = -42;
31
32     qn = qnum_from_int(value);
33     g_assert(qn != NULL);
34     g_assert_cmpint(qn->kind, ==, QNUM_I64);
35     g_assert_cmpint(qn->u.i64, ==, value);
36     g_assert_cmpint(qn->base.refcnt, ==, 1);
37     g_assert_cmpint(qobject_type(QOBJECT(qn)), ==, QTYPE_QNUM);
38
39     QDECREF(qn);
40 }
41
42 static void qnum_from_uint_test(void)
43 {
44     QNum *qn;
45     const uint64_t value = UINT64_MAX;
46
47     qn = qnum_from_uint(value);
48     g_assert(qn != NULL);
49     g_assert_cmpint(qn->kind, ==, QNUM_U64);
50     g_assert(qn->u.u64 == value);
51     g_assert(qn->base.refcnt == 1);
52     g_assert(qobject_type(QOBJECT(qn)) == QTYPE_QNUM);
53
54     QDECREF(qn);
55 }
56
57 static void qnum_from_double_test(void)
58 {
59     QNum *qn;
60     const double value = -42.23423;
61
62     qn = qnum_from_double(value);
63     g_assert(qn != NULL);
64     g_assert_cmpint(qn->kind, ==, QNUM_DOUBLE);
65     g_assert_cmpfloat(qn->u.dbl, ==, value);
66     g_assert_cmpint(qn->base.refcnt, ==, 1);
67     g_assert_cmpint(qobject_type(QOBJECT(qn)), ==, QTYPE_QNUM);
68
69     QDECREF(qn);
70 }
71
72 static void qnum_from_int64_test(void)
73 {
74     QNum *qn;
75     const int64_t value = 0x1234567890abcdefLL;
76
77     qn = qnum_from_int(value);
78     g_assert_cmpint((int64_t) qn->u.i64, ==, value);
79
80     QDECREF(qn);
81 }
82
83 static void qnum_get_int_test(void)
84 {
85     QNum *qn;
86     const int value = 123456;
87
88     qn = qnum_from_int(value);
89     g_assert_cmpint(qnum_get_int(qn), ==, value);
90
91     QDECREF(qn);
92 }
93
94 static void qnum_get_uint_test(void)
95 {
96     QNum *qn;
97     const int value = 123456;
98     uint64_t val;
99     int64_t ival;
100
101     qn = qnum_from_uint(value);
102     g_assert(qnum_get_try_uint(qn, &val));
103     g_assert_cmpuint(val, ==, value);
104     QDECREF(qn);
105
106     qn = qnum_from_int(value);
107     g_assert(qnum_get_try_uint(qn, &val));
108     g_assert_cmpuint(val, ==, value);
109     QDECREF(qn);
110
111     /* invalid cases */
112     qn = qnum_from_int(-1);
113     g_assert(!qnum_get_try_uint(qn, &val));
114     QDECREF(qn);
115
116     qn = qnum_from_uint(-1ULL);
117     g_assert(!qnum_get_try_int(qn, &ival));
118     QDECREF(qn);
119
120     qn = qnum_from_double(0.42);
121     g_assert(!qnum_get_try_uint(qn, &val));
122     QDECREF(qn);
123 }
124
125 static void qobject_to_qnum_test(void)
126 {
127     QNum *qn;
128
129     qn = qnum_from_int(0);
130     g_assert(qobject_to_qnum(QOBJECT(qn)) == qn);
131     QDECREF(qn);
132
133     qn = qnum_from_double(0);
134     g_assert(qobject_to_qnum(QOBJECT(qn)) == qn);
135     QDECREF(qn);
136 }
137
138 static void qnum_to_string_test(void)
139 {
140     QNum *qn;
141     char *tmp;
142
143     qn = qnum_from_int(123456);
144     tmp = qnum_to_string(qn);
145     g_assert_cmpstr(tmp, ==, "123456");
146     g_free(tmp);
147     QDECREF(qn);
148
149     qn = qnum_from_double(0.42);
150     tmp = qnum_to_string(qn);
151     g_assert_cmpstr(tmp, ==, "0.42");
152     g_free(tmp);
153     QDECREF(qn);
154 }
155
156 int main(int argc, char **argv)
157 {
158     g_test_init(&argc, &argv, NULL);
159
160     g_test_add_func("/qnum/from_int", qnum_from_int_test);
161     g_test_add_func("/qnum/from_uint", qnum_from_uint_test);
162     g_test_add_func("/qnum/from_double", qnum_from_double_test);
163     g_test_add_func("/qnum/from_int64", qnum_from_int64_test);
164     g_test_add_func("/qnum/get_int", qnum_get_int_test);
165     g_test_add_func("/qnum/get_uint", qnum_get_uint_test);
166     g_test_add_func("/qnum/to_qnum", qobject_to_qnum_test);
167     g_test_add_func("/qnum/to_string", qnum_to_string_test);
168
169     return g_test_run();
170 }
This page took 0.032081 seconds and 4 git commands to generate.