xref: /freebsd/contrib/libcbor/test/cbor_stream_decode_test.c (revision abd872540f24cfc7dbd1ea29b6918c7082a22108)
110ff414cSEd Maste /*
210ff414cSEd Maste  * Copyright (c) 2014-2020 Pavel Kalvoda <me@pavelkalvoda.com>
310ff414cSEd Maste  *
410ff414cSEd Maste  * libcbor is free software; you can redistribute it and/or modify
510ff414cSEd Maste  * it under the terms of the MIT license. See LICENSE for details.
610ff414cSEd Maste  */
710ff414cSEd Maste 
810ff414cSEd Maste #include "assertions.h"
910ff414cSEd Maste #include "cbor.h"
1010ff414cSEd Maste #include "stream_expectations.h"
1110ff414cSEd Maste 
125d3e7166SEd Maste static void test_no_data(void **_CBOR_UNUSED(_state)) {
1310ff414cSEd Maste   assert_decoder_result_nedata(1, decode(NULL, 0));
1410ff414cSEd Maste }
1510ff414cSEd Maste 
1610ff414cSEd Maste unsigned char embedded_uint8_data[] = {0x00, 0x01, 0x05, 0x17};
175d3e7166SEd Maste static void test_uint8_embedded_decoding(void **_CBOR_UNUSED(_state)) {
1810ff414cSEd Maste   assert_uint8_eq(0);
1910ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
2010ff414cSEd Maste                         decode(embedded_uint8_data, 1));
2110ff414cSEd Maste 
2210ff414cSEd Maste   assert_uint8_eq(1);
2310ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
2410ff414cSEd Maste                         decode(embedded_uint8_data + 1, 1));
2510ff414cSEd Maste 
2610ff414cSEd Maste   assert_uint8_eq(5);
2710ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
2810ff414cSEd Maste                         decode(embedded_uint8_data + 2, 1));
2910ff414cSEd Maste 
3010ff414cSEd Maste   assert_uint8_eq(23);
3110ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
3210ff414cSEd Maste                         decode(embedded_uint8_data + 3, 1));
3310ff414cSEd Maste }
3410ff414cSEd Maste 
3510ff414cSEd Maste unsigned char uint8_data[] = {0x18, 0x83, 0x18, 0xFF};
365d3e7166SEd Maste static void test_uint8_decoding(void **_CBOR_UNUSED(_state)) {
3710ff414cSEd Maste   assert_uint8_eq(0x83);
3810ff414cSEd Maste   assert_decoder_result(2, CBOR_DECODER_FINISHED, decode(uint8_data, 2));
3910ff414cSEd Maste 
4010ff414cSEd Maste   assert_uint8_eq(0xFF);
4110ff414cSEd Maste   assert_decoder_result(2, CBOR_DECODER_FINISHED, decode(uint8_data + 2, 2));
4210ff414cSEd Maste 
4310ff414cSEd Maste   assert_minimum_input_size(2, uint8_data);
4410ff414cSEd Maste }
4510ff414cSEd Maste 
4610ff414cSEd Maste unsigned char uint16_data[] = {0x19, 0x01, 0xf4};
475d3e7166SEd Maste static void test_uint16_decoding(void **_CBOR_UNUSED(_state)) {
4810ff414cSEd Maste   assert_uint16_eq(500);
4910ff414cSEd Maste   assert_decoder_result(3, CBOR_DECODER_FINISHED, decode(uint16_data, 3));
5010ff414cSEd Maste 
5110ff414cSEd Maste   assert_minimum_input_size(3, uint16_data);
5210ff414cSEd Maste }
5310ff414cSEd Maste 
5410ff414cSEd Maste unsigned char uint32_data[] = {0x1a, 0xa5, 0xf7, 0x02, 0xb3};
555d3e7166SEd Maste static void test_uint32_decoding(void **_CBOR_UNUSED(_state)) {
5610ff414cSEd Maste   assert_uint32_eq((uint32_t)2784428723UL);
5710ff414cSEd Maste   assert_decoder_result(5, CBOR_DECODER_FINISHED, decode(uint32_data, 5));
5810ff414cSEd Maste 
5910ff414cSEd Maste   assert_minimum_input_size(5, uint32_data);
6010ff414cSEd Maste }
6110ff414cSEd Maste 
6210ff414cSEd Maste unsigned char uint64_data[] = {0x1b, 0xa5, 0xf7, 0x02, 0xb3,
6310ff414cSEd Maste                                0xa5, 0xf7, 0x02, 0xb3};
645d3e7166SEd Maste static void test_uint64_decoding(void **_CBOR_UNUSED(_state)) {
6510ff414cSEd Maste   assert_uint64_eq(11959030306112471731ULL);
6610ff414cSEd Maste   assert_decoder_result(9, CBOR_DECODER_FINISHED, decode(uint64_data, 9));
6710ff414cSEd Maste 
6810ff414cSEd Maste   assert_minimum_input_size(9, uint64_data);
6910ff414cSEd Maste }
7010ff414cSEd Maste 
7110ff414cSEd Maste unsigned char embedded_negint8_data[] = {0x20, 0x21, 0x25, 0x37};
725d3e7166SEd Maste static void test_negint8_embedded_decoding(void **_CBOR_UNUSED(_state)) {
7310ff414cSEd Maste   assert_negint8_eq(0);
7410ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
7510ff414cSEd Maste                         decode(embedded_negint8_data, 1));
7610ff414cSEd Maste 
7710ff414cSEd Maste   assert_negint8_eq(1);
7810ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
7910ff414cSEd Maste                         decode(embedded_negint8_data + 1, 1));
8010ff414cSEd Maste 
8110ff414cSEd Maste   assert_negint8_eq(5);
8210ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
8310ff414cSEd Maste                         decode(embedded_negint8_data + 2, 1));
8410ff414cSEd Maste 
8510ff414cSEd Maste   assert_negint8_eq(23);
8610ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
8710ff414cSEd Maste                         decode(embedded_negint8_data + 3, 1));
8810ff414cSEd Maste }
8910ff414cSEd Maste 
9010ff414cSEd Maste unsigned char negint8_data[] = {0x38, 0x83, 0x38, 0xFF};
915d3e7166SEd Maste static void test_negint8_decoding(void **_CBOR_UNUSED(_state)) {
9210ff414cSEd Maste   assert_negint8_eq(0x83);
9310ff414cSEd Maste   assert_decoder_result(2, CBOR_DECODER_FINISHED, decode(negint8_data, 2));
9410ff414cSEd Maste 
9510ff414cSEd Maste   assert_negint8_eq(0xFF);
9610ff414cSEd Maste   assert_decoder_result(2, CBOR_DECODER_FINISHED, decode(negint8_data + 2, 2));
9710ff414cSEd Maste 
9810ff414cSEd Maste   assert_minimum_input_size(2, negint8_data);
9910ff414cSEd Maste }
10010ff414cSEd Maste 
10110ff414cSEd Maste unsigned char negint16_data[] = {0x39, 0x01, 0xf4};
1025d3e7166SEd Maste static void test_negint16_decoding(void **_CBOR_UNUSED(_state)) {
10310ff414cSEd Maste   assert_negint16_eq(500);
10410ff414cSEd Maste   assert_decoder_result(3, CBOR_DECODER_FINISHED, decode(negint16_data, 3));
10510ff414cSEd Maste 
10610ff414cSEd Maste   assert_minimum_input_size(3, negint16_data);
10710ff414cSEd Maste }
10810ff414cSEd Maste 
10910ff414cSEd Maste unsigned char negint32_data[] = {0x3a, 0xa5, 0xf7, 0x02, 0xb3};
1105d3e7166SEd Maste static void test_negint32_decoding(void **_CBOR_UNUSED(_state)) {
11110ff414cSEd Maste   assert_negint32_eq((uint32_t)2784428723UL);
11210ff414cSEd Maste   assert_decoder_result(5, CBOR_DECODER_FINISHED, decode(negint32_data, 5));
11310ff414cSEd Maste 
11410ff414cSEd Maste   assert_minimum_input_size(5, negint32_data);
11510ff414cSEd Maste }
11610ff414cSEd Maste 
11710ff414cSEd Maste unsigned char negint64_data[] = {0x3b, 0xa5, 0xf7, 0x02, 0xb3,
11810ff414cSEd Maste                                  0xa5, 0xf7, 0x02, 0xb3};
1195d3e7166SEd Maste static void test_negint64_decoding(void **_CBOR_UNUSED(_state)) {
12010ff414cSEd Maste   assert_negint64_eq(11959030306112471731ULL);
12110ff414cSEd Maste   assert_decoder_result(9, CBOR_DECODER_FINISHED, decode(negint64_data, 9));
12210ff414cSEd Maste 
12310ff414cSEd Maste   assert_minimum_input_size(9, negint64_data);
12410ff414cSEd Maste }
12510ff414cSEd Maste 
12610ff414cSEd Maste unsigned char bstring_embedded_int8_data[] = {0x41, 0xFF};
1275d3e7166SEd Maste static void test_bstring_embedded_int8_decoding(void **_CBOR_UNUSED(_state)) {
12810ff414cSEd Maste   assert_bstring_mem_eq(bstring_embedded_int8_data + 1, 1);
12910ff414cSEd Maste   assert_decoder_result(2, CBOR_DECODER_FINISHED,
13010ff414cSEd Maste                         decode(bstring_embedded_int8_data, 2));
13110ff414cSEd Maste 
13210ff414cSEd Maste   assert_minimum_input_size(2, bstring_embedded_int8_data);
13310ff414cSEd Maste }
13410ff414cSEd Maste 
1355d3e7166SEd Maste // The callback returns a *pointer* to the the start of the data segment (after
1365d3e7166SEd Maste // the second byte of input); the data is never read, so we never run into
1375d3e7166SEd Maste // memory issues despite not allocating and initializing all the data.
1385d3e7166SEd Maste unsigned char bstring_int8_data[] = {0x58, 0x02 /*, [2 bytes] */};
1395d3e7166SEd Maste static void test_bstring_int8_decoding(void **_CBOR_UNUSED(_state)) {
1405d3e7166SEd Maste   assert_bstring_mem_eq(bstring_int8_data + 2, 2);
1415d3e7166SEd Maste   assert_decoder_result(4, CBOR_DECODER_FINISHED, decode(bstring_int8_data, 4));
14210ff414cSEd Maste 
14310ff414cSEd Maste   assert_minimum_input_size(2, bstring_int8_data);
1445d3e7166SEd Maste   assert_decoder_result_nedata(/* expected_bytes_required= */ 2 + 2,
1455d3e7166SEd Maste                                decode(bstring_int8_data, 2));
1465d3e7166SEd Maste }
1475d3e7166SEd Maste 
1485d3e7166SEd Maste unsigned char bstring_int8_empty_data[] = {0x58, 0x00};
1495d3e7166SEd Maste static void test_bstring_int8_empty_decoding(void **_CBOR_UNUSED(_state)) {
1505d3e7166SEd Maste   assert_bstring_mem_eq(bstring_int8_empty_data + 2, 0);
1515d3e7166SEd Maste   assert_decoder_result(2, CBOR_DECODER_FINISHED,
1525d3e7166SEd Maste                         decode(bstring_int8_empty_data, 2));
1535d3e7166SEd Maste 
1545d3e7166SEd Maste   assert_minimum_input_size(2, bstring_int8_empty_data);
15510ff414cSEd Maste }
15610ff414cSEd Maste 
15710ff414cSEd Maste unsigned char bstring_int16_data[] = {0x59, 0x01, 0x5C /*, [348 bytes] */};
1585d3e7166SEd Maste static void test_bstring_int16_decoding(void **_CBOR_UNUSED(_state)) {
15910ff414cSEd Maste   assert_bstring_mem_eq(bstring_int16_data + 3, 348);
16010ff414cSEd Maste   assert_decoder_result(3 + 348, CBOR_DECODER_FINISHED,
16110ff414cSEd Maste                         decode(bstring_int16_data, 3 + 348));
16210ff414cSEd Maste 
16310ff414cSEd Maste   assert_minimum_input_size(3, bstring_int16_data);
1645d3e7166SEd Maste   assert_decoder_result_nedata(/* expected_bytes_required= */ 3 + 348,
1655d3e7166SEd Maste                                decode(bstring_int16_data, 3));
16610ff414cSEd Maste }
16710ff414cSEd Maste 
16810ff414cSEd Maste unsigned char bstring_int32_data[] = {0x5A, 0x00, 0x10, 0x10,
16910ff414cSEd Maste                                       0x10 /*, [1052688 bytes] */};
1705d3e7166SEd Maste static void test_bstring_int32_decoding(void **_CBOR_UNUSED(_state)) {
17110ff414cSEd Maste   assert_bstring_mem_eq(bstring_int32_data + 5, 1052688);
17210ff414cSEd Maste   assert_decoder_result(5 + 1052688, CBOR_DECODER_FINISHED,
17310ff414cSEd Maste                         decode(bstring_int32_data, 5 + 1052688));
17410ff414cSEd Maste 
17510ff414cSEd Maste   assert_minimum_input_size(5, bstring_int32_data);
1765d3e7166SEd Maste   assert_decoder_result_nedata(/* expected_bytes_required= */ 5 + 1052688,
1775d3e7166SEd Maste                                decode(bstring_int32_data, 5));
17810ff414cSEd Maste }
17910ff414cSEd Maste 
18010ff414cSEd Maste #ifdef EIGHT_BYTE_SIZE_T
18110ff414cSEd Maste unsigned char bstring_int64_data[] = {
18210ff414cSEd Maste     0x5B, 0x00, 0x00, 0x00, 0x01,
18310ff414cSEd Maste     0x00, 0x00, 0x00, 0x00 /*, [4294967296 bytes] */};
1845d3e7166SEd Maste static void test_bstring_int64_decoding(void **_CBOR_UNUSED(_state)) {
18510ff414cSEd Maste   assert_bstring_mem_eq(bstring_int64_data + 9, 4294967296);
18610ff414cSEd Maste   assert_decoder_result(9 + 4294967296, CBOR_DECODER_FINISHED,
18710ff414cSEd Maste                         decode(bstring_int64_data, 9 + 4294967296));
18810ff414cSEd Maste 
18910ff414cSEd Maste   assert_minimum_input_size(9, bstring_int64_data);
1905d3e7166SEd Maste   assert_decoder_result_nedata(/* expected_bytes_required= */ 9 + 4294967296,
1915d3e7166SEd Maste                                decode(bstring_int64_data, 9));
19210ff414cSEd Maste }
19310ff414cSEd Maste #endif
19410ff414cSEd Maste 
19510ff414cSEd Maste unsigned char bstring_indef_1_data[] = {0x5F, 0x40 /* Empty byte string */,
19610ff414cSEd Maste                                         0xFF};
1975d3e7166SEd Maste static void test_bstring_indef_decoding_1(void **_CBOR_UNUSED(_state)) {
19810ff414cSEd Maste   assert_bstring_indef_start();
19910ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
20010ff414cSEd Maste                         decode(bstring_indef_1_data, 3));
20110ff414cSEd Maste 
20210ff414cSEd Maste   assert_bstring_mem_eq(bstring_indef_1_data + 2, 0);
20310ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
20410ff414cSEd Maste                         decode(bstring_indef_1_data + 1, 2));
20510ff414cSEd Maste 
20610ff414cSEd Maste   assert_indef_break();
20710ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
20810ff414cSEd Maste                         decode(bstring_indef_1_data + 2, 1));
20910ff414cSEd Maste }
21010ff414cSEd Maste 
21110ff414cSEd Maste unsigned char bstring_indef_2_data[] = {0x5F, 0xFF};
2125d3e7166SEd Maste static void test_bstring_indef_decoding_2(void **_CBOR_UNUSED(_state)) {
21310ff414cSEd Maste   assert_bstring_indef_start();
21410ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
21510ff414cSEd Maste                         decode(bstring_indef_2_data, 2));
21610ff414cSEd Maste 
21710ff414cSEd Maste   assert_indef_break();
21810ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
21910ff414cSEd Maste                         decode(bstring_indef_2_data + 1, 1));
22010ff414cSEd Maste }
22110ff414cSEd Maste 
2225d3e7166SEd Maste unsigned char bstring_indef_3_data[] = {0x5F,
2235d3e7166SEd Maste                                         // Empty byte string
2245d3e7166SEd Maste                                         0x40,
2255d3e7166SEd Maste                                         // 1B, 1 character byte string
2265d3e7166SEd Maste                                         0x58, 0x01, 0x00,
2275d3e7166SEd Maste                                         // Break
2285d3e7166SEd Maste                                         0xFF};
2295d3e7166SEd Maste static void test_bstring_indef_decoding_3(void **_CBOR_UNUSED(_state)) {
23010ff414cSEd Maste   assert_bstring_indef_start();
23110ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
23210ff414cSEd Maste                         decode(bstring_indef_3_data, 6));
23310ff414cSEd Maste 
23410ff414cSEd Maste   assert_bstring_mem_eq(bstring_indef_3_data + 2, 0);
23510ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
23610ff414cSEd Maste                         decode(bstring_indef_3_data + 1, 5));
23710ff414cSEd Maste 
23810ff414cSEd Maste   assert_bstring_mem_eq(bstring_indef_3_data + 4, 1);
23910ff414cSEd Maste   assert_decoder_result(3, CBOR_DECODER_FINISHED,
24010ff414cSEd Maste                         decode(bstring_indef_3_data + 2, 4));
24110ff414cSEd Maste 
24210ff414cSEd Maste   assert_indef_break();
24310ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
24410ff414cSEd Maste                         decode(bstring_indef_3_data + 5, 1));
24510ff414cSEd Maste }
24610ff414cSEd Maste 
2475d3e7166SEd Maste unsigned char string_embedded_int8_data[] = {0x61, 0xFF};
2485d3e7166SEd Maste static void test_string_embedded_int8_decoding(void **_CBOR_UNUSED(_state)) {
2495d3e7166SEd Maste   assert_string_mem_eq(string_embedded_int8_data + 1, 1);
2505d3e7166SEd Maste   assert_decoder_result(2, CBOR_DECODER_FINISHED,
2515d3e7166SEd Maste                         decode(string_embedded_int8_data, 2));
2525d3e7166SEd Maste 
2535d3e7166SEd Maste   assert_minimum_input_size(2, string_embedded_int8_data);
2545d3e7166SEd Maste }
2555d3e7166SEd Maste 
2565d3e7166SEd Maste // The callback returns a *pointer* to the the start of the data segment (after
2575d3e7166SEd Maste // the second byte of input); the data is never read, so we never run into
2585d3e7166SEd Maste // memory issues despite not allocating and initializing all the data.
2595d3e7166SEd Maste unsigned char string_int8_data[] = {0x78, 0x02 /*, [2 bytes] */};
2605d3e7166SEd Maste static void test_string_int8_decoding(void **_CBOR_UNUSED(_state)) {
2615d3e7166SEd Maste   assert_string_mem_eq(string_int8_data + 2, 2);
2625d3e7166SEd Maste   assert_decoder_result(4, CBOR_DECODER_FINISHED, decode(string_int8_data, 4));
2635d3e7166SEd Maste 
2645d3e7166SEd Maste   assert_minimum_input_size(2, string_int8_data);
2655d3e7166SEd Maste   assert_decoder_result_nedata(/* expected_bytes_required= */ 2 + 2,
2665d3e7166SEd Maste                                decode(string_int8_data, 2));
2675d3e7166SEd Maste }
2685d3e7166SEd Maste 
2695d3e7166SEd Maste unsigned char string_int8_empty_data[] = {0x78, 0x00};
2705d3e7166SEd Maste static void test_string_int8_empty_decoding(void **_CBOR_UNUSED(_state)) {
2715d3e7166SEd Maste   assert_string_mem_eq(string_int8_empty_data + 2, 0);
2725d3e7166SEd Maste   assert_decoder_result(2, CBOR_DECODER_FINISHED,
2735d3e7166SEd Maste                         decode(string_int8_empty_data, 2));
2745d3e7166SEd Maste 
2755d3e7166SEd Maste   assert_minimum_input_size(2, string_int8_empty_data);
2765d3e7166SEd Maste }
2775d3e7166SEd Maste 
2785d3e7166SEd Maste unsigned char string_int16_data[] = {0x79, 0x01, 0x5C /*, [348 bytes] */};
2795d3e7166SEd Maste static void test_string_int16_decoding(void **_CBOR_UNUSED(_state)) {
2805d3e7166SEd Maste   assert_string_mem_eq(string_int16_data + 3, 348);
2815d3e7166SEd Maste   assert_decoder_result(3 + 348, CBOR_DECODER_FINISHED,
2825d3e7166SEd Maste                         decode(string_int16_data, 3 + 348));
2835d3e7166SEd Maste 
2845d3e7166SEd Maste   assert_minimum_input_size(3, string_int16_data);
2855d3e7166SEd Maste   assert_decoder_result_nedata(/* expected_bytes_required= */ 3 + 348,
2865d3e7166SEd Maste                                decode(string_int16_data, 3));
2875d3e7166SEd Maste }
2885d3e7166SEd Maste 
2895d3e7166SEd Maste unsigned char string_int32_data[] = {0x7A, 0x00, 0x10, 0x10,
2905d3e7166SEd Maste                                      0x10 /*, [1052688 bytes] */};
2915d3e7166SEd Maste static void test_string_int32_decoding(void **_CBOR_UNUSED(_state)) {
2925d3e7166SEd Maste   assert_string_mem_eq(string_int32_data + 5, 1052688);
2935d3e7166SEd Maste   assert_decoder_result(5 + 1052688, CBOR_DECODER_FINISHED,
2945d3e7166SEd Maste                         decode(string_int32_data, 5 + 1052688));
2955d3e7166SEd Maste 
2965d3e7166SEd Maste   assert_minimum_input_size(5, string_int32_data);
2975d3e7166SEd Maste   assert_decoder_result_nedata(/* expected_bytes_required= */ 5 + 1052688,
2985d3e7166SEd Maste                                decode(string_int32_data, 5));
2995d3e7166SEd Maste }
3005d3e7166SEd Maste 
3015d3e7166SEd Maste #ifdef EIGHT_BYTE_SIZE_T
3025d3e7166SEd Maste unsigned char string_int64_data[] = {
3035d3e7166SEd Maste     0x7B, 0x00, 0x00, 0x00, 0x01,
3045d3e7166SEd Maste     0x00, 0x00, 0x00, 0x00 /*, [4294967296 bytes] */};
3055d3e7166SEd Maste static void test_string_int64_decoding(void **_CBOR_UNUSED(_state)) {
3065d3e7166SEd Maste   assert_string_mem_eq(string_int64_data + 9, 4294967296);
3075d3e7166SEd Maste   assert_decoder_result(9 + 4294967296, CBOR_DECODER_FINISHED,
3085d3e7166SEd Maste                         decode(string_int64_data, 9 + 4294967296));
3095d3e7166SEd Maste 
3105d3e7166SEd Maste   assert_minimum_input_size(9, string_int64_data);
3115d3e7166SEd Maste   assert_decoder_result_nedata(/* expected_bytes_required= */ 9 + 4294967296,
3125d3e7166SEd Maste                                decode(string_int64_data, 9));
3135d3e7166SEd Maste }
3145d3e7166SEd Maste #endif
3155d3e7166SEd Maste 
3165d3e7166SEd Maste unsigned char string_indef_1_data[] = {0x7F, 0x60 /* Empty string */, 0xFF};
3175d3e7166SEd Maste static void test_string_indef_decoding_1(void **_CBOR_UNUSED(_state)) {
3185d3e7166SEd Maste   assert_string_indef_start();
3195d3e7166SEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
3205d3e7166SEd Maste                         decode(string_indef_1_data, 3));
3215d3e7166SEd Maste 
3225d3e7166SEd Maste   assert_string_mem_eq(string_indef_1_data + 2, 0);
3235d3e7166SEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
3245d3e7166SEd Maste                         decode(string_indef_1_data + 1, 2));
3255d3e7166SEd Maste 
3265d3e7166SEd Maste   assert_indef_break();
3275d3e7166SEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
3285d3e7166SEd Maste                         decode(string_indef_1_data + 2, 1));
3295d3e7166SEd Maste }
3305d3e7166SEd Maste 
3315d3e7166SEd Maste unsigned char string_indef_2_data[] = {0x7F, 0xFF};
3325d3e7166SEd Maste static void test_string_indef_decoding_2(void **_CBOR_UNUSED(_state)) {
3335d3e7166SEd Maste   assert_string_indef_start();
3345d3e7166SEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
3355d3e7166SEd Maste                         decode(string_indef_2_data, 2));
3365d3e7166SEd Maste 
3375d3e7166SEd Maste   assert_indef_break();
3385d3e7166SEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
3395d3e7166SEd Maste                         decode(string_indef_2_data + 1, 1));
3405d3e7166SEd Maste }
3415d3e7166SEd Maste 
3425d3e7166SEd Maste unsigned char string_indef_3_data[] = {0x7F,
3435d3e7166SEd Maste                                        // Empty string
3445d3e7166SEd Maste                                        0x60,
3455d3e7166SEd Maste                                        // 1B, 1 character byte string
3465d3e7166SEd Maste                                        0x78, 0x01, 0x00,
3475d3e7166SEd Maste                                        // Break
3485d3e7166SEd Maste                                        0xFF};
3495d3e7166SEd Maste static void test_string_indef_decoding_3(void **_CBOR_UNUSED(_state)) {
3505d3e7166SEd Maste   assert_string_indef_start();
3515d3e7166SEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
3525d3e7166SEd Maste                         decode(string_indef_3_data, 6));
3535d3e7166SEd Maste 
3545d3e7166SEd Maste   assert_string_mem_eq(string_indef_3_data + 2, 0);
3555d3e7166SEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
3565d3e7166SEd Maste                         decode(string_indef_3_data + 1, 5));
3575d3e7166SEd Maste 
3585d3e7166SEd Maste   assert_string_mem_eq(string_indef_3_data + 4, 1);
3595d3e7166SEd Maste   assert_decoder_result(3, CBOR_DECODER_FINISHED,
3605d3e7166SEd Maste                         decode(string_indef_3_data + 2, 4));
3615d3e7166SEd Maste 
3625d3e7166SEd Maste   assert_indef_break();
3635d3e7166SEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
3645d3e7166SEd Maste                         decode(string_indef_3_data + 5, 1));
3655d3e7166SEd Maste }
3665d3e7166SEd Maste 
36710ff414cSEd Maste unsigned char array_embedded_int8_data[] = {0x80};
3685d3e7166SEd Maste static void test_array_embedded_int8_decoding(void **_CBOR_UNUSED(_state)) {
36910ff414cSEd Maste   assert_array_start(0);
37010ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
37110ff414cSEd Maste                         decode(array_embedded_int8_data, 1));
37210ff414cSEd Maste }
37310ff414cSEd Maste 
37410ff414cSEd Maste unsigned char array_int8_data[] = {0x98, 0x02, 0x00, 0x01};
3755d3e7166SEd Maste static void test_array_int8_decoding(void **_CBOR_UNUSED(_state)) {
37610ff414cSEd Maste   assert_array_start(2);
37710ff414cSEd Maste   assert_decoder_result(2, CBOR_DECODER_FINISHED, decode(array_int8_data, 4));
37810ff414cSEd Maste 
37910ff414cSEd Maste   assert_uint8_eq(0);
38010ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
38110ff414cSEd Maste                         decode(array_int8_data + 2, 2));
38210ff414cSEd Maste 
38310ff414cSEd Maste   assert_uint8_eq(1);
38410ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
38510ff414cSEd Maste                         decode(array_int8_data + 3, 1));
38610ff414cSEd Maste 
38710ff414cSEd Maste   assert_minimum_input_size(2, array_int8_data);
38810ff414cSEd Maste }
38910ff414cSEd Maste 
39010ff414cSEd Maste unsigned char array_int16_data[] = {0x99, 0x00, 0x02, 0x00, 0x01};
3915d3e7166SEd Maste static void test_array_int16_decoding(void **_CBOR_UNUSED(_state)) {
39210ff414cSEd Maste   assert_array_start(2);
39310ff414cSEd Maste   assert_decoder_result(3, CBOR_DECODER_FINISHED, decode(array_int16_data, 5));
39410ff414cSEd Maste 
39510ff414cSEd Maste   assert_uint8_eq(0);
39610ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
39710ff414cSEd Maste                         decode(array_int16_data + 3, 2));
39810ff414cSEd Maste 
39910ff414cSEd Maste   assert_uint8_eq(1);
40010ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
40110ff414cSEd Maste                         decode(array_int16_data + 4, 1));
40210ff414cSEd Maste 
40310ff414cSEd Maste   assert_minimum_input_size(3, array_int16_data);
40410ff414cSEd Maste }
40510ff414cSEd Maste 
40610ff414cSEd Maste unsigned char array_int32_data[] = {0x9A, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01};
4075d3e7166SEd Maste static void test_array_int32_decoding(void **_CBOR_UNUSED(_state)) {
40810ff414cSEd Maste   assert_array_start(2);
40910ff414cSEd Maste   assert_decoder_result(5, CBOR_DECODER_FINISHED, decode(array_int32_data, 7));
41010ff414cSEd Maste 
41110ff414cSEd Maste   assert_uint8_eq(0);
41210ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
41310ff414cSEd Maste                         decode(array_int32_data + 5, 2));
41410ff414cSEd Maste 
41510ff414cSEd Maste   assert_uint8_eq(1);
41610ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
41710ff414cSEd Maste                         decode(array_int32_data + 6, 1));
41810ff414cSEd Maste 
41910ff414cSEd Maste   assert_minimum_input_size(5, array_int32_data);
42010ff414cSEd Maste }
42110ff414cSEd Maste 
42210ff414cSEd Maste unsigned char array_int64_data[] = {0x9B, 0x00, 0x00, 0x00, 0x00, 0x00,
42310ff414cSEd Maste                                     0x00, 0x00, 0x02, 0x00, 0x01};
4245d3e7166SEd Maste static void test_array_int64_decoding(void **_CBOR_UNUSED(_state)) {
42510ff414cSEd Maste   assert_array_start(2);
42610ff414cSEd Maste   assert_decoder_result(9, CBOR_DECODER_FINISHED, decode(array_int64_data, 11));
42710ff414cSEd Maste 
42810ff414cSEd Maste   assert_uint8_eq(0);
42910ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
43010ff414cSEd Maste                         decode(array_int64_data + 9, 2));
43110ff414cSEd Maste 
43210ff414cSEd Maste   assert_uint8_eq(1);
43310ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
43410ff414cSEd Maste                         decode(array_int64_data + 10, 1));
43510ff414cSEd Maste 
43610ff414cSEd Maste   assert_minimum_input_size(9, array_int64_data);
43710ff414cSEd Maste }
43810ff414cSEd Maste 
43910ff414cSEd Maste unsigned char array_of_arrays_data[] = {0x82, 0x80, 0x80};
4405d3e7166SEd Maste static void test_array_of_arrays_decoding(void **_CBOR_UNUSED(_state)) {
44110ff414cSEd Maste   assert_array_start(2);
44210ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
44310ff414cSEd Maste                         decode(array_of_arrays_data, 3));
44410ff414cSEd Maste 
44510ff414cSEd Maste   assert_array_start(0);
44610ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
44710ff414cSEd Maste                         decode(array_of_arrays_data + 1, 2));
44810ff414cSEd Maste 
44910ff414cSEd Maste   assert_array_start(0);
45010ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
45110ff414cSEd Maste                         decode(array_of_arrays_data + 2, 1));
45210ff414cSEd Maste }
45310ff414cSEd Maste 
45410ff414cSEd Maste unsigned char indef_array_data_1[] = {0x9F, 0x00, 0x18, 0xFF, 0x9F, 0xFF, 0xFF};
4555d3e7166SEd Maste static void test_indef_array_decoding_1(void **_CBOR_UNUSED(_state)) {
45610ff414cSEd Maste   assert_indef_array_start();
45710ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
45810ff414cSEd Maste                         decode(indef_array_data_1, 7));
45910ff414cSEd Maste 
46010ff414cSEd Maste   assert_uint8_eq(0);
46110ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
46210ff414cSEd Maste                         decode(indef_array_data_1 + 1, 6));
46310ff414cSEd Maste 
46410ff414cSEd Maste   assert_uint8_eq(255);
46510ff414cSEd Maste   assert_decoder_result(2, CBOR_DECODER_FINISHED,
46610ff414cSEd Maste                         decode(indef_array_data_1 + 2, 4));
46710ff414cSEd Maste 
46810ff414cSEd Maste   assert_indef_array_start();
46910ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
47010ff414cSEd Maste                         decode(indef_array_data_1 + 4, 3));
47110ff414cSEd Maste 
47210ff414cSEd Maste   assert_indef_break();
47310ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
47410ff414cSEd Maste                         decode(indef_array_data_1 + 5, 2));
47510ff414cSEd Maste 
47610ff414cSEd Maste   assert_indef_break();
47710ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
47810ff414cSEd Maste                         decode(indef_array_data_1 + 6, 1));
47910ff414cSEd Maste }
48010ff414cSEd Maste 
48110ff414cSEd Maste unsigned char map_embedded_int8_data[] = {0xa1, 0x01, 0x00};
4825d3e7166SEd Maste static void test_map_embedded_int8_decoding(void **_CBOR_UNUSED(_state)) {
48310ff414cSEd Maste   assert_map_start(1);
48410ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
48510ff414cSEd Maste                         decode(map_embedded_int8_data, 3));
48610ff414cSEd Maste 
48710ff414cSEd Maste   assert_uint8_eq(1);
48810ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
48910ff414cSEd Maste                         decode(map_embedded_int8_data + 1, 2));
49010ff414cSEd Maste 
49110ff414cSEd Maste   assert_uint8_eq(0);
49210ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
49310ff414cSEd Maste                         decode(map_embedded_int8_data + 2, 1));
49410ff414cSEd Maste }
49510ff414cSEd Maste 
49610ff414cSEd Maste unsigned char map_int8_data[] = {0xB8, 0x01, 0x00, 0x01};
4975d3e7166SEd Maste static void test_map_int8_decoding(void **_CBOR_UNUSED(_state)) {
49810ff414cSEd Maste   assert_map_start(1);
49910ff414cSEd Maste   assert_decoder_result(2, CBOR_DECODER_FINISHED, decode(map_int8_data, 4));
50010ff414cSEd Maste 
50110ff414cSEd Maste   assert_uint8_eq(0);
50210ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED, decode(map_int8_data + 2, 2));
50310ff414cSEd Maste 
50410ff414cSEd Maste   assert_uint8_eq(1);
50510ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED, decode(map_int8_data + 3, 1));
50610ff414cSEd Maste 
50710ff414cSEd Maste   assert_minimum_input_size(2, map_int8_data);
50810ff414cSEd Maste }
50910ff414cSEd Maste 
51010ff414cSEd Maste unsigned char map_int16_data[] = {0xB9, 0x00, 0x01, 0x00, 0x01};
5115d3e7166SEd Maste static void test_map_int16_decoding(void **_CBOR_UNUSED(_state)) {
51210ff414cSEd Maste   assert_map_start(1);
51310ff414cSEd Maste   assert_decoder_result(3, CBOR_DECODER_FINISHED, decode(map_int16_data, 5));
51410ff414cSEd Maste 
51510ff414cSEd Maste   assert_uint8_eq(0);
51610ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
51710ff414cSEd Maste                         decode(map_int16_data + 3, 2));
51810ff414cSEd Maste 
51910ff414cSEd Maste   assert_uint8_eq(1);
52010ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
52110ff414cSEd Maste                         decode(map_int16_data + 4, 1));
52210ff414cSEd Maste 
52310ff414cSEd Maste   assert_minimum_input_size(3, map_int16_data);
52410ff414cSEd Maste }
52510ff414cSEd Maste 
52610ff414cSEd Maste unsigned char map_int32_data[] = {0xBA, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01};
5275d3e7166SEd Maste static void test_map_int32_decoding(void **_CBOR_UNUSED(_state)) {
52810ff414cSEd Maste   assert_map_start(1);
52910ff414cSEd Maste   assert_decoder_result(5, CBOR_DECODER_FINISHED, decode(map_int32_data, 7));
53010ff414cSEd Maste 
53110ff414cSEd Maste   assert_uint8_eq(0);
53210ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
53310ff414cSEd Maste                         decode(map_int32_data + 5, 2));
53410ff414cSEd Maste 
53510ff414cSEd Maste   assert_uint8_eq(1);
53610ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
53710ff414cSEd Maste                         decode(map_int32_data + 6, 1));
53810ff414cSEd Maste 
53910ff414cSEd Maste   assert_minimum_input_size(5, map_int32_data);
54010ff414cSEd Maste }
54110ff414cSEd Maste 
54210ff414cSEd Maste unsigned char map_int64_data[] = {0xBB, 0x00, 0x00, 0x00, 0x00, 0x00,
54310ff414cSEd Maste                                   0x00, 0x00, 0x01, 0x00, 0x01};
5445d3e7166SEd Maste static void test_map_int64_decoding(void **_CBOR_UNUSED(_state)) {
54510ff414cSEd Maste   assert_map_start(1);
54610ff414cSEd Maste   assert_decoder_result(9, CBOR_DECODER_FINISHED, decode(map_int64_data, 11));
54710ff414cSEd Maste 
54810ff414cSEd Maste   assert_uint8_eq(0);
54910ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
55010ff414cSEd Maste                         decode(map_int64_data + 9, 2));
55110ff414cSEd Maste 
55210ff414cSEd Maste   assert_uint8_eq(1);
55310ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
55410ff414cSEd Maste                         decode(map_int64_data + 10, 1));
55510ff414cSEd Maste 
55610ff414cSEd Maste   assert_minimum_input_size(9, map_int64_data);
55710ff414cSEd Maste }
55810ff414cSEd Maste 
55910ff414cSEd Maste unsigned char indef_map_data_1[] = {0xBF, 0x00, 0x18, 0xFF, 0xFF};
5605d3e7166SEd Maste static void test_indef_map_decoding_1(void **_CBOR_UNUSED(_state)) {
56110ff414cSEd Maste   assert_indef_map_start();
56210ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED, decode(indef_map_data_1, 5));
56310ff414cSEd Maste 
56410ff414cSEd Maste   assert_uint8_eq(0);
56510ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
56610ff414cSEd Maste                         decode(indef_map_data_1 + 1, 4));
56710ff414cSEd Maste 
56810ff414cSEd Maste   assert_uint8_eq(255);
56910ff414cSEd Maste   assert_decoder_result(2, CBOR_DECODER_FINISHED,
57010ff414cSEd Maste                         decode(indef_map_data_1 + 2, 3));
57110ff414cSEd Maste 
57210ff414cSEd Maste   assert_indef_break();
57310ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED,
57410ff414cSEd Maste                         decode(indef_map_data_1 + 4, 1));
57510ff414cSEd Maste }
57610ff414cSEd Maste 
57710ff414cSEd Maste unsigned char embedded_tag_data[] = {0xC1};
5785d3e7166SEd Maste static void test_embedded_tag_decoding(void **_CBOR_UNUSED(_state)) {
57910ff414cSEd Maste   assert_tag_eq(1);
58010ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED, decode(embedded_tag_data, 1));
58110ff414cSEd Maste }
58210ff414cSEd Maste 
58310ff414cSEd Maste unsigned char int8_tag_data[] = {0xD8, 0xFE};
5845d3e7166SEd Maste static void test_int8_tag_decoding(void **_CBOR_UNUSED(_state)) {
58510ff414cSEd Maste   assert_tag_eq(254);
58610ff414cSEd Maste   assert_decoder_result(2, CBOR_DECODER_FINISHED, decode(int8_tag_data, 2));
58710ff414cSEd Maste 
58810ff414cSEd Maste   assert_minimum_input_size(2, int8_tag_data);
58910ff414cSEd Maste }
59010ff414cSEd Maste 
59110ff414cSEd Maste unsigned char int16_tag_data[] = {0xD9, 0xFE, 0xFD};
5925d3e7166SEd Maste static void test_int16_tag_decoding(void **_CBOR_UNUSED(_state)) {
59310ff414cSEd Maste   assert_tag_eq(65277);
59410ff414cSEd Maste   assert_decoder_result(3, CBOR_DECODER_FINISHED, decode(int16_tag_data, 3));
59510ff414cSEd Maste 
59610ff414cSEd Maste   assert_minimum_input_size(3, int16_tag_data);
59710ff414cSEd Maste }
59810ff414cSEd Maste 
59910ff414cSEd Maste unsigned char int32_tag_data[] = {0xDA, 0xFE, 0xFD, 0xFC, 0xFB};
6005d3e7166SEd Maste static void test_int32_tag_decoding(void **_CBOR_UNUSED(_state)) {
60110ff414cSEd Maste   assert_tag_eq(4278058235ULL);
60210ff414cSEd Maste   assert_decoder_result(5, CBOR_DECODER_FINISHED, decode(int32_tag_data, 5));
60310ff414cSEd Maste 
60410ff414cSEd Maste   assert_minimum_input_size(5, int32_tag_data);
60510ff414cSEd Maste }
60610ff414cSEd Maste 
60710ff414cSEd Maste unsigned char int64_tag_data[] = {0xDB, 0xFE, 0xFD, 0xFC, 0xFB,
60810ff414cSEd Maste                                   0xFA, 0xF9, 0xF8, 0xF7};
6095d3e7166SEd Maste static void test_int64_tag_decoding(void **_CBOR_UNUSED(_state)) {
61010ff414cSEd Maste   assert_tag_eq(18374120213919168759ULL);
61110ff414cSEd Maste   assert_decoder_result(9, CBOR_DECODER_FINISHED, decode(int64_tag_data, 9));
61210ff414cSEd Maste 
61310ff414cSEd Maste   assert_minimum_input_size(9, int64_tag_data);
61410ff414cSEd Maste }
61510ff414cSEd Maste 
616*abd87254SEd Maste unsigned char reserved_byte_data[] = {0xDC};
617*abd87254SEd Maste static void test_reserved_byte_decoding(void **_CBOR_UNUSED(_state)) {
618*abd87254SEd Maste   assert_decoder_result(0, CBOR_DECODER_ERROR, decode(reserved_byte_data, 1));
61910ff414cSEd Maste }
62010ff414cSEd Maste 
62110ff414cSEd Maste unsigned char float2_data[] = {0xF9, 0x7B, 0xFF};
6225d3e7166SEd Maste static void test_float2_decoding(void **_CBOR_UNUSED(_state)) {
62310ff414cSEd Maste   assert_half(65504.0f);
62410ff414cSEd Maste   assert_decoder_result(3, CBOR_DECODER_FINISHED, decode(float2_data, 3));
62510ff414cSEd Maste 
62610ff414cSEd Maste   assert_minimum_input_size(3, float2_data);
62710ff414cSEd Maste }
62810ff414cSEd Maste 
62910ff414cSEd Maste unsigned char float4_data[] = {0xFA, 0x47, 0xC3, 0x50, 0x00};
6305d3e7166SEd Maste static void test_float4_decoding(void **_CBOR_UNUSED(_state)) {
63110ff414cSEd Maste   assert_float(100000.0f);
63210ff414cSEd Maste   assert_decoder_result(5, CBOR_DECODER_FINISHED, decode(float4_data, 5));
63310ff414cSEd Maste 
63410ff414cSEd Maste   assert_minimum_input_size(5, float4_data);
63510ff414cSEd Maste }
63610ff414cSEd Maste 
63710ff414cSEd Maste unsigned char float8_data[] = {0xFB, 0xC0, 0x10, 0x66, 0x66,
63810ff414cSEd Maste                                0x66, 0x66, 0x66, 0x66};
6395d3e7166SEd Maste static void test_float8_decoding(void **_CBOR_UNUSED(_state)) {
64010ff414cSEd Maste   assert_double(-4.1);
64110ff414cSEd Maste   assert_decoder_result(9, CBOR_DECODER_FINISHED, decode(float8_data, 9));
64210ff414cSEd Maste 
64310ff414cSEd Maste   assert_minimum_input_size(0, float8_data);
64410ff414cSEd Maste }
64510ff414cSEd Maste 
64610ff414cSEd Maste unsigned char false_data[] = {0xF4};
6475d3e7166SEd Maste static void test_false_decoding(void **_CBOR_UNUSED(_state)) {
64810ff414cSEd Maste   assert_bool(false);
64910ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED, decode(false_data, 1));
65010ff414cSEd Maste }
65110ff414cSEd Maste 
65210ff414cSEd Maste unsigned char true_data[] = {0xF5};
6535d3e7166SEd Maste static void test_true_decoding(void **_CBOR_UNUSED(_state)) {
65410ff414cSEd Maste   assert_bool(true);
65510ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED, decode(true_data, 1));
65610ff414cSEd Maste }
65710ff414cSEd Maste 
65810ff414cSEd Maste unsigned char null_data[] = {0xF6};
6595d3e7166SEd Maste static void test_null_decoding(void **_CBOR_UNUSED(_state)) {
66010ff414cSEd Maste   assert_nil();
66110ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED, decode(null_data, 1));
66210ff414cSEd Maste }
66310ff414cSEd Maste 
66410ff414cSEd Maste unsigned char undef_data[] = {0xF7};
6655d3e7166SEd Maste static void test_undef_decoding(void **_CBOR_UNUSED(_state)) {
66610ff414cSEd Maste   assert_undef();
66710ff414cSEd Maste   assert_decoder_result(1, CBOR_DECODER_FINISHED, decode(undef_data, 1));
66810ff414cSEd Maste }
66910ff414cSEd Maste 
6705d3e7166SEd Maste #define stream_test(f) cmocka_unit_test_teardown(f, clean_up_stream_assertions)
67110ff414cSEd Maste 
67210ff414cSEd Maste int main(void) {
67310ff414cSEd Maste   const struct CMUnitTest tests[] = {
67410ff414cSEd Maste       stream_test(test_no_data),
67510ff414cSEd Maste 
67610ff414cSEd Maste       stream_test(test_uint8_embedded_decoding),
67710ff414cSEd Maste       stream_test(test_uint8_decoding),
67810ff414cSEd Maste       stream_test(test_uint16_decoding),
67910ff414cSEd Maste       stream_test(test_uint32_decoding),
68010ff414cSEd Maste       stream_test(test_uint64_decoding),
68110ff414cSEd Maste 
68210ff414cSEd Maste       stream_test(test_negint8_embedded_decoding),
68310ff414cSEd Maste       stream_test(test_negint8_decoding),
68410ff414cSEd Maste       stream_test(test_negint16_decoding),
68510ff414cSEd Maste       stream_test(test_negint32_decoding),
68610ff414cSEd Maste       stream_test(test_negint64_decoding),
68710ff414cSEd Maste 
68810ff414cSEd Maste       stream_test(test_bstring_embedded_int8_decoding),
68910ff414cSEd Maste       stream_test(test_bstring_int8_decoding),
6905d3e7166SEd Maste       stream_test(test_bstring_int8_empty_decoding),
69110ff414cSEd Maste       stream_test(test_bstring_int16_decoding),
69210ff414cSEd Maste       stream_test(test_bstring_int32_decoding),
69310ff414cSEd Maste #ifdef EIGHT_BYTE_SIZE_T
69410ff414cSEd Maste       stream_test(test_bstring_int64_decoding),
69510ff414cSEd Maste #endif
69610ff414cSEd Maste       stream_test(test_bstring_indef_decoding_1),
69710ff414cSEd Maste       stream_test(test_bstring_indef_decoding_2),
69810ff414cSEd Maste       stream_test(test_bstring_indef_decoding_3),
69910ff414cSEd Maste 
7005d3e7166SEd Maste       stream_test(test_string_embedded_int8_decoding),
7015d3e7166SEd Maste       stream_test(test_string_int8_decoding),
7025d3e7166SEd Maste       stream_test(test_string_int8_empty_decoding),
7035d3e7166SEd Maste       stream_test(test_string_int16_decoding),
7045d3e7166SEd Maste       stream_test(test_string_int32_decoding),
7055d3e7166SEd Maste #ifdef EIGHT_BYTE_SIZE_T
7065d3e7166SEd Maste       stream_test(test_string_int64_decoding),
7075d3e7166SEd Maste #endif
7085d3e7166SEd Maste       stream_test(test_string_indef_decoding_1),
7095d3e7166SEd Maste       stream_test(test_string_indef_decoding_2),
7105d3e7166SEd Maste       stream_test(test_string_indef_decoding_3),
7115d3e7166SEd Maste 
71210ff414cSEd Maste       stream_test(test_array_embedded_int8_decoding),
71310ff414cSEd Maste       stream_test(test_array_int8_decoding),
71410ff414cSEd Maste       stream_test(test_array_int16_decoding),
71510ff414cSEd Maste       stream_test(test_array_int32_decoding),
71610ff414cSEd Maste       stream_test(test_array_int64_decoding),
71710ff414cSEd Maste       stream_test(test_array_of_arrays_decoding),
71810ff414cSEd Maste       stream_test(test_indef_array_decoding_1),
71910ff414cSEd Maste 
72010ff414cSEd Maste       stream_test(test_map_embedded_int8_decoding),
72110ff414cSEd Maste       stream_test(test_map_int8_decoding),
72210ff414cSEd Maste       stream_test(test_map_int16_decoding),
72310ff414cSEd Maste       stream_test(test_map_int32_decoding),
72410ff414cSEd Maste       stream_test(test_map_int64_decoding),
72510ff414cSEd Maste       stream_test(test_indef_map_decoding_1),
72610ff414cSEd Maste 
72710ff414cSEd Maste       stream_test(test_embedded_tag_decoding),
72810ff414cSEd Maste       stream_test(test_int8_tag_decoding),
72910ff414cSEd Maste       stream_test(test_int16_tag_decoding),
73010ff414cSEd Maste       stream_test(test_int32_tag_decoding),
73110ff414cSEd Maste       stream_test(test_int64_tag_decoding),
732*abd87254SEd Maste       stream_test(test_reserved_byte_decoding),
73310ff414cSEd Maste 
73410ff414cSEd Maste       stream_test(test_float2_decoding),
73510ff414cSEd Maste       stream_test(test_float4_decoding),
73610ff414cSEd Maste       stream_test(test_float8_decoding),
73710ff414cSEd Maste 
73810ff414cSEd Maste       stream_test(test_false_decoding),
73910ff414cSEd Maste       stream_test(test_true_decoding),
74010ff414cSEd Maste       stream_test(test_null_decoding),
74110ff414cSEd Maste       stream_test(test_undef_decoding)};
74210ff414cSEd Maste   return cmocka_run_group_tests(tests, NULL, NULL);
74310ff414cSEd Maste }
744