Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
godotengine
GitHub Repository: godotengine/godot
Path: blob/master/tests/core/io/test_stream_peer.cpp
45997 views
1
/**************************************************************************/
2
/* test_stream_peer.cpp */
3
/**************************************************************************/
4
/* This file is part of: */
5
/* GODOT ENGINE */
6
/* https://godotengine.org */
7
/**************************************************************************/
8
/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */
9
/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */
10
/* */
11
/* Permission is hereby granted, free of charge, to any person obtaining */
12
/* a copy of this software and associated documentation files (the */
13
/* "Software"), to deal in the Software without restriction, including */
14
/* without limitation the rights to use, copy, modify, merge, publish, */
15
/* distribute, sublicense, and/or sell copies of the Software, and to */
16
/* permit persons to whom the Software is furnished to do so, subject to */
17
/* the following conditions: */
18
/* */
19
/* The above copyright notice and this permission notice shall be */
20
/* included in all copies or substantial portions of the Software. */
21
/* */
22
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
23
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
24
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */
25
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
26
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
27
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
28
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
29
/**************************************************************************/
30
31
#include "tests/test_macros.h"
32
33
TEST_FORCE_LINK(test_stream_peer)
34
35
#include "core/io/stream_peer.h"
36
37
namespace TestStreamPeer {
38
39
TEST_CASE("[StreamPeer] Initialization through StreamPeerBuffer") {
40
Ref<StreamPeerBuffer> spb;
41
spb.instantiate();
42
43
CHECK_EQ(spb->is_big_endian_enabled(), false);
44
}
45
46
TEST_CASE("[StreamPeer] Get and sets through StreamPeerBuffer") {
47
Ref<StreamPeerBuffer> spb;
48
spb.instantiate();
49
50
SUBCASE("A int8_t value") {
51
int8_t value = 42;
52
53
spb->clear();
54
spb->put_8(value);
55
spb->seek(0);
56
57
CHECK_EQ(spb->get_8(), value);
58
}
59
60
SUBCASE("A uint8_t value") {
61
uint8_t value = 42;
62
63
spb->clear();
64
spb->put_u8(value);
65
spb->seek(0);
66
67
CHECK_EQ(spb->get_u8(), value);
68
}
69
70
SUBCASE("A int16_t value") {
71
int16_t value = 42;
72
73
spb->clear();
74
spb->put_16(value);
75
spb->seek(0);
76
77
CHECK_EQ(spb->get_16(), value);
78
}
79
80
SUBCASE("A uint16_t value") {
81
uint16_t value = 42;
82
83
spb->clear();
84
spb->put_u16(value);
85
spb->seek(0);
86
87
CHECK_EQ(spb->get_u16(), value);
88
}
89
90
SUBCASE("A int32_t value") {
91
int32_t value = 42;
92
93
spb->clear();
94
spb->put_32(value);
95
spb->seek(0);
96
97
CHECK_EQ(spb->get_32(), value);
98
}
99
100
SUBCASE("A uint32_t value") {
101
uint32_t value = 42;
102
103
spb->clear();
104
spb->put_u32(value);
105
spb->seek(0);
106
107
CHECK_EQ(spb->get_u32(), value);
108
}
109
110
SUBCASE("A int64_t value") {
111
int64_t value = 42;
112
113
spb->clear();
114
spb->put_64(value);
115
spb->seek(0);
116
117
CHECK_EQ(spb->get_64(), value);
118
}
119
120
SUBCASE("A int64_t value") {
121
uint64_t value = 42;
122
123
spb->clear();
124
spb->put_u64(value);
125
spb->seek(0);
126
127
CHECK_EQ(spb->get_u64(), value);
128
}
129
130
SUBCASE("A half-precision float value") {
131
float value = 3.1415927f;
132
float expected = 3.14062f;
133
134
spb->clear();
135
spb->put_half(value);
136
spb->seek(0);
137
138
CHECK(spb->get_half() == doctest::Approx(expected));
139
}
140
141
SUBCASE("A float value") {
142
float value = 42.0f;
143
144
spb->clear();
145
spb->put_float(value);
146
spb->seek(0);
147
148
CHECK_EQ(spb->get_float(), value);
149
}
150
151
SUBCASE("A double value") {
152
double value = 42.0;
153
154
spb->clear();
155
spb->put_double(value);
156
spb->seek(0);
157
158
CHECK_EQ(spb->get_double(), value);
159
}
160
161
SUBCASE("A string value") {
162
String value = "Hello, World!";
163
164
spb->clear();
165
spb->put_string(value);
166
spb->seek(0);
167
168
CHECK_EQ(spb->get_string(), value);
169
}
170
171
SUBCASE("A utf8 string value") {
172
String value = String::utf8("Hello✩, World✩!");
173
174
spb->clear();
175
spb->put_utf8_string(value);
176
spb->seek(0);
177
178
CHECK_EQ(spb->get_utf8_string(), value);
179
}
180
181
SUBCASE("A variant value") {
182
Array value;
183
value.push_front(42);
184
value.push_front("Hello, World!");
185
186
spb->clear();
187
spb->put_var(value);
188
spb->seek(0);
189
190
CHECK_EQ(spb->get_var(), value);
191
}
192
}
193
194
TEST_CASE("[StreamPeer] Get and sets big endian through StreamPeerBuffer") {
195
Ref<StreamPeerBuffer> spb;
196
spb.instantiate();
197
spb->set_big_endian(true);
198
199
SUBCASE("A int16_t value") {
200
int16_t value = 42;
201
202
spb->clear();
203
spb->put_16(value);
204
spb->seek(0);
205
206
CHECK_EQ(spb->get_16(), value);
207
}
208
209
SUBCASE("A uint16_t value") {
210
uint16_t value = 42;
211
212
spb->clear();
213
spb->put_u16(value);
214
spb->seek(0);
215
216
CHECK_EQ(spb->get_u16(), value);
217
}
218
219
SUBCASE("A int32_t value") {
220
int32_t value = 42;
221
222
spb->clear();
223
spb->put_32(value);
224
spb->seek(0);
225
226
CHECK_EQ(spb->get_32(), value);
227
}
228
229
SUBCASE("A uint32_t value") {
230
uint32_t value = 42;
231
232
spb->clear();
233
spb->put_u32(value);
234
spb->seek(0);
235
236
CHECK_EQ(spb->get_u32(), value);
237
}
238
239
SUBCASE("A int64_t value") {
240
int64_t value = 42;
241
242
spb->clear();
243
spb->put_64(value);
244
spb->seek(0);
245
246
CHECK_EQ(spb->get_64(), value);
247
}
248
249
SUBCASE("A int64_t value") {
250
uint64_t value = 42;
251
252
spb->clear();
253
spb->put_u64(value);
254
spb->seek(0);
255
256
CHECK_EQ(spb->get_u64(), value);
257
}
258
259
SUBCASE("A float value") {
260
float value = 42.0f;
261
262
spb->clear();
263
spb->put_float(value);
264
spb->seek(0);
265
266
CHECK_EQ(spb->get_float(), value);
267
}
268
269
SUBCASE("A half-precision float value") {
270
float value = 3.1415927f;
271
float expected = 3.14062f;
272
273
spb->clear();
274
spb->put_half(value);
275
spb->seek(0);
276
277
CHECK(spb->get_half() == doctest::Approx(expected));
278
}
279
280
SUBCASE("A double value") {
281
double value = 42.0;
282
283
spb->clear();
284
spb->put_double(value);
285
spb->seek(0);
286
287
CHECK_EQ(spb->get_double(), value);
288
}
289
}
290
291
TEST_CASE("[StreamPeer] Get string when there is no string") {
292
Ref<StreamPeerBuffer> spb;
293
spb.instantiate();
294
295
ERR_PRINT_OFF;
296
CHECK_EQ(spb->get_string(), "");
297
ERR_PRINT_ON;
298
}
299
300
TEST_CASE("[StreamPeer] Get UTF8 string when there is no string") {
301
Ref<StreamPeerBuffer> spb;
302
spb.instantiate();
303
304
ERR_PRINT_OFF;
305
CHECK_EQ(spb->get_utf8_string(), "");
306
ERR_PRINT_ON;
307
}
308
309
} // namespace TestStreamPeer
310
311