Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/libcbor/test/stream_expectations.h
39481 views
1
#ifndef STREAM_EXPECTATIONS_H_
2
#define STREAM_EXPECTATIONS_H_
3
4
#include "assertions.h"
5
#include "cbor.h"
6
7
#define MAX_QUEUE_ITEMS 30
8
9
// Utilities to test `cbor_stream_decode`. See `cbor_stream_decode_test.cc`.
10
//
11
// Usage:
12
// - The `assert_` helpers build a queue of `test_assertion`s
13
// (`assertions_queue` in the implementation file), specifying
14
// - Which callback is expected (`test_expectation`)
15
// - And what is the expected argument value (if applicable,
16
// `test_expectation_data`)
17
// - `decode` will invoke `cbor_stream_decode` (test subject)
18
// - `cbor_stream_decode` will invoke one of the `_callback` functions, which
19
// will check the passed data against the `assertions_queue`
20
21
enum test_expectation {
22
UINT8_EQ,
23
UINT16_EQ,
24
UINT32_EQ,
25
UINT64_EQ,
26
27
NEGINT8_EQ,
28
NEGINT16_EQ,
29
NEGINT32_EQ,
30
NEGINT64_EQ,
31
32
// Matches length and memory address for definite strings
33
BSTRING_MEM_EQ,
34
BSTRING_INDEF_START,
35
36
STRING_MEM_EQ,
37
STRING_INDEF_START,
38
39
ARRAY_START, /* Definite arrays only */
40
ARRAY_INDEF_START,
41
42
MAP_START, /* Definite maps only */
43
MAP_INDEF_START,
44
45
TAG_EQ,
46
47
HALF_EQ,
48
FLOAT_EQ,
49
DOUBLE_EQ,
50
BOOL_EQ,
51
NIL,
52
UNDEF,
53
INDEF_BREAK /* Expect "Break" */
54
};
55
56
union test_expectation_data {
57
uint8_t int8;
58
uint16_t int16;
59
uint32_t int32;
60
uint64_t int64;
61
struct string {
62
cbor_data address;
63
size_t length;
64
} string;
65
size_t length;
66
float float2;
67
float float4;
68
double float8;
69
bool boolean;
70
};
71
72
struct test_assertion {
73
enum test_expectation expectation;
74
union test_expectation_data data;
75
};
76
77
/* Test harness -- calls `cbor_stream_decode` and checks assertions */
78
struct cbor_decoder_result decode(cbor_data, size_t);
79
80
/* Verify all assertions were applied and clean up */
81
int clean_up_stream_assertions(void **);
82
83
/* Assertions builders */
84
void assert_uint8_eq(uint8_t);
85
void assert_uint16_eq(uint16_t);
86
void assert_uint32_eq(uint32_t);
87
void assert_uint64_eq(uint64_t);
88
89
void assert_negint8_eq(uint8_t);
90
void assert_negint16_eq(uint16_t);
91
void assert_negint32_eq(uint32_t);
92
void assert_negint64_eq(uint64_t);
93
94
void assert_bstring_mem_eq(cbor_data, size_t);
95
void assert_bstring_indef_start(void);
96
97
void assert_string_mem_eq(cbor_data, size_t);
98
void assert_string_indef_start(void);
99
100
void assert_array_start(size_t);
101
void assert_indef_array_start(void);
102
103
void assert_map_start(size_t);
104
void assert_indef_map_start(void);
105
106
void assert_tag_eq(uint64_t);
107
108
void assert_half(float);
109
void assert_float(float);
110
void assert_double(double);
111
112
void assert_bool(bool);
113
void assert_nil(void); /* assert_null already exists */
114
void assert_undef(void);
115
116
void assert_indef_break(void);
117
118
/* Assertions verifying callbacks */
119
void uint8_callback(void *, uint8_t);
120
void uint16_callback(void *, uint16_t);
121
void uint32_callback(void *, uint32_t);
122
void uint64_callback(void *, uint64_t);
123
124
void negint8_callback(void *, uint8_t);
125
void negint16_callback(void *, uint16_t);
126
void negint32_callback(void *, uint32_t);
127
void negint64_callback(void *, uint64_t);
128
129
void byte_string_callback(void *, cbor_data, uint64_t);
130
void byte_string_start_callback(void *);
131
132
void string_callback(void *, cbor_data, uint64_t);
133
void string_start_callback(void *);
134
135
void array_start_callback(void *, uint64_t);
136
void indef_array_start_callback(void *);
137
138
void map_start_callback(void *, uint64_t);
139
void indef_map_start_callback(void *);
140
141
void tag_callback(void *, uint64_t);
142
143
void half_callback(void *, float);
144
void float_callback(void *, float);
145
void double_callback(void *, double);
146
void indef_break_callback(void *);
147
148
void bool_callback(void *, bool);
149
void null_callback(void *);
150
void undef_callback(void *);
151
152
#endif
153
154