xref: /netbsd-src/external/mit/libcbor/dist/test/copy_test.c (revision 5dd36a3bc8bf2a9dec29ceb6349550414570c447)
1*5dd36a3bSchristos /*
2*5dd36a3bSchristos  * Copyright (c) 2014-2019 Pavel Kalvoda <me@pavelkalvoda.com>
3*5dd36a3bSchristos  *
4*5dd36a3bSchristos  * libcbor is free software; you can redistribute it and/or modify
5*5dd36a3bSchristos  * it under the terms of the MIT license. See LICENSE for details.
6*5dd36a3bSchristos  */
7*5dd36a3bSchristos 
8*5dd36a3bSchristos #include <setjmp.h>
9*5dd36a3bSchristos #include <stdarg.h>
10*5dd36a3bSchristos #include <stddef.h>
11*5dd36a3bSchristos 
12*5dd36a3bSchristos #include <cmocka.h>
13*5dd36a3bSchristos 
14*5dd36a3bSchristos #include "assertions.h"
15*5dd36a3bSchristos #include "cbor.h"
16*5dd36a3bSchristos 
17*5dd36a3bSchristos cbor_item_t *item, *copy, *tmp;
18*5dd36a3bSchristos 
test_uints(void ** state)19*5dd36a3bSchristos static void test_uints(void **state) {
20*5dd36a3bSchristos   item = cbor_build_uint8(10);
21*5dd36a3bSchristos   assert_uint8(copy = cbor_copy(item), 10);
22*5dd36a3bSchristos   cbor_decref(&item);
23*5dd36a3bSchristos   cbor_decref(&copy);
24*5dd36a3bSchristos 
25*5dd36a3bSchristos   item = cbor_build_uint16(10);
26*5dd36a3bSchristos   assert_uint16(copy = cbor_copy(item), 10);
27*5dd36a3bSchristos   cbor_decref(&item);
28*5dd36a3bSchristos   cbor_decref(&copy);
29*5dd36a3bSchristos 
30*5dd36a3bSchristos   item = cbor_build_uint32(10);
31*5dd36a3bSchristos   assert_uint32(copy = cbor_copy(item), 10);
32*5dd36a3bSchristos   cbor_decref(&item);
33*5dd36a3bSchristos   cbor_decref(&copy);
34*5dd36a3bSchristos 
35*5dd36a3bSchristos   item = cbor_build_uint64(10);
36*5dd36a3bSchristos   assert_uint64(copy = cbor_copy(item), 10);
37*5dd36a3bSchristos   cbor_decref(&item);
38*5dd36a3bSchristos   cbor_decref(&copy);
39*5dd36a3bSchristos }
40*5dd36a3bSchristos 
test_negints(void ** state)41*5dd36a3bSchristos static void test_negints(void **state) {
42*5dd36a3bSchristos   item = cbor_build_negint8(10);
43*5dd36a3bSchristos   assert_true(cbor_get_uint8(copy = cbor_copy(item)) == 10);
44*5dd36a3bSchristos   cbor_decref(&item);
45*5dd36a3bSchristos   cbor_decref(&copy);
46*5dd36a3bSchristos 
47*5dd36a3bSchristos   item = cbor_build_negint16(10);
48*5dd36a3bSchristos   assert_true(cbor_get_uint16(copy = cbor_copy(item)) == 10);
49*5dd36a3bSchristos   cbor_decref(&item);
50*5dd36a3bSchristos   cbor_decref(&copy);
51*5dd36a3bSchristos 
52*5dd36a3bSchristos   item = cbor_build_negint32(10);
53*5dd36a3bSchristos   assert_true(cbor_get_uint32(copy = cbor_copy(item)) == 10);
54*5dd36a3bSchristos   cbor_decref(&item);
55*5dd36a3bSchristos   cbor_decref(&copy);
56*5dd36a3bSchristos 
57*5dd36a3bSchristos   item = cbor_build_negint64(10);
58*5dd36a3bSchristos   assert_true(cbor_get_uint64(copy = cbor_copy(item)) == 10);
59*5dd36a3bSchristos   cbor_decref(&item);
60*5dd36a3bSchristos   cbor_decref(&copy);
61*5dd36a3bSchristos }
62*5dd36a3bSchristos 
test_def_bytestring(void ** state)63*5dd36a3bSchristos static void test_def_bytestring(void **state) {
64*5dd36a3bSchristos   item = cbor_build_bytestring((cbor_data) "abc", 3);
65*5dd36a3bSchristos   assert_memory_equal(cbor_bytestring_handle(copy = cbor_copy(item)),
66*5dd36a3bSchristos                       cbor_bytestring_handle(item), 3);
67*5dd36a3bSchristos   cbor_decref(&item);
68*5dd36a3bSchristos   cbor_decref(&copy);
69*5dd36a3bSchristos }
70*5dd36a3bSchristos 
test_indef_bytestring(void ** state)71*5dd36a3bSchristos static void test_indef_bytestring(void **state) {
72*5dd36a3bSchristos   item = cbor_new_indefinite_bytestring();
73*5dd36a3bSchristos   cbor_bytestring_add_chunk(
74*5dd36a3bSchristos       item, cbor_move(cbor_build_bytestring((cbor_data) "abc", 3)));
75*5dd36a3bSchristos   copy = cbor_copy(item);
76*5dd36a3bSchristos 
77*5dd36a3bSchristos   assert_int_equal(cbor_bytestring_chunk_count(item),
78*5dd36a3bSchristos                    cbor_bytestring_chunk_count(copy));
79*5dd36a3bSchristos 
80*5dd36a3bSchristos   assert_memory_equal(
81*5dd36a3bSchristos       cbor_bytestring_handle(cbor_bytestring_chunks_handle(copy)[0]), "abc", 3);
82*5dd36a3bSchristos   cbor_decref(&item);
83*5dd36a3bSchristos   cbor_decref(&copy);
84*5dd36a3bSchristos }
85*5dd36a3bSchristos 
test_def_string(void ** state)86*5dd36a3bSchristos static void test_def_string(void **state) {
87*5dd36a3bSchristos   item = cbor_build_string("abc");
88*5dd36a3bSchristos   assert_memory_equal(cbor_string_handle(copy = cbor_copy(item)),
89*5dd36a3bSchristos                       cbor_string_handle(item), 3);
90*5dd36a3bSchristos   cbor_decref(&item);
91*5dd36a3bSchristos   cbor_decref(&copy);
92*5dd36a3bSchristos }
93*5dd36a3bSchristos 
test_indef_string(void ** state)94*5dd36a3bSchristos static void test_indef_string(void **state) {
95*5dd36a3bSchristos   item = cbor_new_indefinite_string();
96*5dd36a3bSchristos   cbor_string_add_chunk(item, cbor_move(cbor_build_string("abc")));
97*5dd36a3bSchristos   copy = cbor_copy(item);
98*5dd36a3bSchristos 
99*5dd36a3bSchristos   assert_int_equal(cbor_string_chunk_count(item),
100*5dd36a3bSchristos                    cbor_string_chunk_count(copy));
101*5dd36a3bSchristos 
102*5dd36a3bSchristos   assert_memory_equal(cbor_string_handle(cbor_string_chunks_handle(copy)[0]),
103*5dd36a3bSchristos                       "abc", 3);
104*5dd36a3bSchristos   cbor_decref(&item);
105*5dd36a3bSchristos   cbor_decref(&copy);
106*5dd36a3bSchristos }
107*5dd36a3bSchristos 
test_def_array(void ** state)108*5dd36a3bSchristos static void test_def_array(void **state) {
109*5dd36a3bSchristos   item = cbor_new_definite_array(1);
110*5dd36a3bSchristos   cbor_array_push(item, cbor_move(cbor_build_uint8(42)));
111*5dd36a3bSchristos 
112*5dd36a3bSchristos   assert_uint8(tmp = cbor_array_get(copy = cbor_copy(item), 0), 42);
113*5dd36a3bSchristos   cbor_decref(&item);
114*5dd36a3bSchristos   cbor_decref(&copy);
115*5dd36a3bSchristos   cbor_decref(&tmp);
116*5dd36a3bSchristos }
117*5dd36a3bSchristos 
test_indef_array(void ** state)118*5dd36a3bSchristos static void test_indef_array(void **state) {
119*5dd36a3bSchristos   item = cbor_new_indefinite_array();
120*5dd36a3bSchristos   cbor_array_push(item, cbor_move(cbor_build_uint8(42)));
121*5dd36a3bSchristos 
122*5dd36a3bSchristos   assert_uint8(tmp = cbor_array_get(copy = cbor_copy(item), 0), 42);
123*5dd36a3bSchristos   cbor_decref(&item);
124*5dd36a3bSchristos   cbor_decref(&copy);
125*5dd36a3bSchristos   cbor_decref(&tmp);
126*5dd36a3bSchristos }
127*5dd36a3bSchristos 
test_def_map(void ** state)128*5dd36a3bSchristos static void test_def_map(void **state) {
129*5dd36a3bSchristos   item = cbor_new_definite_map(1);
130*5dd36a3bSchristos   cbor_map_add(item, (struct cbor_pair){
131*5dd36a3bSchristos                          .key = cbor_move(cbor_build_uint8(42)),
132*5dd36a3bSchristos                          .value = cbor_move(cbor_build_uint8(43)),
133*5dd36a3bSchristos                      });
134*5dd36a3bSchristos 
135*5dd36a3bSchristos   assert_uint8(cbor_map_handle(copy = cbor_copy(item))[0].key, 42);
136*5dd36a3bSchristos 
137*5dd36a3bSchristos   cbor_decref(&item);
138*5dd36a3bSchristos   cbor_decref(&copy);
139*5dd36a3bSchristos }
140*5dd36a3bSchristos 
test_indef_map(void ** state)141*5dd36a3bSchristos static void test_indef_map(void **state) {
142*5dd36a3bSchristos   item = cbor_new_indefinite_map(1);
143*5dd36a3bSchristos   cbor_map_add(item, (struct cbor_pair){
144*5dd36a3bSchristos                          .key = cbor_move(cbor_build_uint8(42)),
145*5dd36a3bSchristos                          .value = cbor_move(cbor_build_uint8(43)),
146*5dd36a3bSchristos                      });
147*5dd36a3bSchristos 
148*5dd36a3bSchristos   assert_uint8(cbor_map_handle(copy = cbor_copy(item))[0].key, 42);
149*5dd36a3bSchristos 
150*5dd36a3bSchristos   cbor_decref(&item);
151*5dd36a3bSchristos   cbor_decref(&copy);
152*5dd36a3bSchristos }
153*5dd36a3bSchristos 
test_tag(void ** state)154*5dd36a3bSchristos static void test_tag(void **state) {
155*5dd36a3bSchristos   item = cbor_build_tag(10, cbor_move(cbor_build_uint8(42)));
156*5dd36a3bSchristos 
157*5dd36a3bSchristos   assert_uint8(cbor_tag_item(copy = cbor_copy(item)), 42);
158*5dd36a3bSchristos 
159*5dd36a3bSchristos   cbor_decref(&item);
160*5dd36a3bSchristos   cbor_decref(&copy);
161*5dd36a3bSchristos }
162*5dd36a3bSchristos 
test_ctrls(void ** state)163*5dd36a3bSchristos static void test_ctrls(void **state) {
164*5dd36a3bSchristos   item = cbor_new_null();
165*5dd36a3bSchristos   assert_true(cbor_is_null(copy = cbor_copy(item)));
166*5dd36a3bSchristos   cbor_decref(&item);
167*5dd36a3bSchristos   cbor_decref(&copy);
168*5dd36a3bSchristos }
169*5dd36a3bSchristos 
test_floats(void ** state)170*5dd36a3bSchristos static void test_floats(void **state) {
171*5dd36a3bSchristos   item = cbor_build_float2(3.14f);
172*5dd36a3bSchristos   assert_true(cbor_float_get_float2(copy = cbor_copy(item)) ==
173*5dd36a3bSchristos               cbor_float_get_float2(item));
174*5dd36a3bSchristos   cbor_decref(&item);
175*5dd36a3bSchristos   cbor_decref(&copy);
176*5dd36a3bSchristos 
177*5dd36a3bSchristos   item = cbor_build_float4(3.14f);
178*5dd36a3bSchristos   assert_true(cbor_float_get_float4(copy = cbor_copy(item)) ==
179*5dd36a3bSchristos               cbor_float_get_float4(item));
180*5dd36a3bSchristos   cbor_decref(&item);
181*5dd36a3bSchristos   cbor_decref(&copy);
182*5dd36a3bSchristos 
183*5dd36a3bSchristos   item = cbor_build_float8(3.14);
184*5dd36a3bSchristos   assert_true(cbor_float_get_float8(copy = cbor_copy(item)) ==
185*5dd36a3bSchristos               cbor_float_get_float8(item));
186*5dd36a3bSchristos   cbor_decref(&item);
187*5dd36a3bSchristos   cbor_decref(&copy);
188*5dd36a3bSchristos }
189*5dd36a3bSchristos 
main(void)190*5dd36a3bSchristos int main(void) {
191*5dd36a3bSchristos   const struct CMUnitTest tests[] = {
192*5dd36a3bSchristos 
193*5dd36a3bSchristos       cmocka_unit_test(test_uints),
194*5dd36a3bSchristos       cmocka_unit_test(test_negints),
195*5dd36a3bSchristos       cmocka_unit_test(test_def_bytestring),
196*5dd36a3bSchristos       cmocka_unit_test(test_indef_bytestring),
197*5dd36a3bSchristos       cmocka_unit_test(test_def_string),
198*5dd36a3bSchristos       cmocka_unit_test(test_indef_string),
199*5dd36a3bSchristos       cmocka_unit_test(test_def_array),
200*5dd36a3bSchristos       cmocka_unit_test(test_indef_array),
201*5dd36a3bSchristos       cmocka_unit_test(test_def_map),
202*5dd36a3bSchristos       cmocka_unit_test(test_indef_map),
203*5dd36a3bSchristos       cmocka_unit_test(test_tag),
204*5dd36a3bSchristos       cmocka_unit_test(test_ctrls),
205*5dd36a3bSchristos       cmocka_unit_test(test_floats)};
206*5dd36a3bSchristos   return cmocka_run_group_tests(tests, NULL, NULL);
207*5dd36a3bSchristos }
208