Implement support for host/le/be integer and float endianness
[libside.git] / src / test.c
CommitLineData
f611d0c3
MD
1// SPDX-License-Identifier: MIT
2/*
3 * Copyright 2022 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
4 */
5
6#include <stdint.h>
7#include <inttypes.h>
8#include <stdlib.h>
9#include <stdio.h>
4f40d951 10#include <stdbool.h>
f611d0c3
MD
11
12#include <side/trace.h>
13#include "tracer.h"
14
15/* User code example */
16
89747802 17side_static_event(my_provider_event, "myprovider", "myevent", SIDE_LOGLEVEL_DEBUG,
f611d0c3 18 side_field_list(
485b800a
MD
19 side_field_u32("abc", side_attr_list()),
20 side_field_s64("def", side_attr_list()),
21 side_field_dynamic("dynamic", side_attr_list()),
399c836b
MD
22 ),
23 side_attr_list()
f611d0c3
MD
24);
25
26static
27void test_fields(void)
28{
29 uint32_t uw = 42;
30 int64_t sdw = -500;
31
d5cdb129 32 side_event(my_provider_event, side_arg_list(side_arg_u32(uw), side_arg_s64(sdw),
808bd9bf 33 side_arg_dynamic(side_arg_dynamic_string("zzz", side_attr_list()))));
f611d0c3
MD
34}
35
89747802
MD
36side_hidden_event(my_provider_event_hidden, "myprovider", "myeventhidden", SIDE_LOGLEVEL_DEBUG,
37 side_field_list(
38 side_field_u32("abc", side_attr_list()),
39 ),
40 side_attr_list()
41);
42
43static
44void test_event_hidden(void)
45{
89747802
MD
46 side_event(my_provider_event_hidden, side_arg_list(side_arg_u32(2)));
47}
48
49side_declare_event(my_provider_event_export);
50
51side_export_event(my_provider_event_export, "myprovider", "myeventexport", SIDE_LOGLEVEL_DEBUG,
52 side_field_list(
53 side_field_u32("abc", side_attr_list()),
54 ),
55 side_attr_list()
56);
57
58static
59void test_event_export(void)
60{
89747802
MD
61 side_event(my_provider_event_export, side_arg_list(side_arg_u32(2)));
62}
63
64side_static_event(my_provider_event_struct_literal, "myprovider", "myeventstructliteral", SIDE_LOGLEVEL_DEBUG,
f611d0c3 65 side_field_list(
c7a14585
MD
66 side_field_struct("structliteral",
67 side_struct_literal(
68 side_field_list(
69 side_field_u32("x", side_attr_list()),
70 side_field_s64("y", side_attr_list()),
71 ),
72 side_attr_list()
73 )
f611d0c3 74 ),
485b800a 75 side_field_u8("z", side_attr_list()),
399c836b
MD
76 ),
77 side_attr_list()
f611d0c3
MD
78);
79
c7a14585
MD
80static
81void test_struct_literal(void)
82{
c7a14585
MD
83 side_event_cond(my_provider_event_struct_literal) {
84 side_arg_define_vec(mystruct, side_arg_list(side_arg_u32(21), side_arg_s64(22)));
85 side_event_call(my_provider_event_struct_literal, side_arg_list(side_arg_struct(&mystruct), side_arg_u8(55)));
86 }
87}
88
89static side_define_struct(mystructdef,
90 side_field_list(
91 side_field_u32("x", side_attr_list()),
92 side_field_s64("y", side_attr_list()),
93 ),
94 side_attr_list()
95);
96
89747802 97side_static_event(my_provider_event_struct, "myprovider", "myeventstruct", SIDE_LOGLEVEL_DEBUG,
c7a14585
MD
98 side_field_list(
99 side_field_struct("struct", &mystructdef),
100 side_field_u8("z", side_attr_list()),
101 ),
102 side_attr_list()
103);
104
f611d0c3
MD
105static
106void test_struct(void)
107{
c7a14585 108 side_event_cond(my_provider_event_struct) {
f611d0c3 109 side_arg_define_vec(mystruct, side_arg_list(side_arg_u32(21), side_arg_s64(22)));
c7a14585 110 side_event_call(my_provider_event_struct, side_arg_list(side_arg_struct(&mystruct), side_arg_u8(55)));
f611d0c3
MD
111 }
112}
113
89747802 114side_static_event(my_provider_event_array, "myprovider", "myarray", SIDE_LOGLEVEL_DEBUG,
f611d0c3 115 side_field_list(
9a55f555 116 side_field_array("arr", side_elem(side_type_u32(side_attr_list())), 3, side_attr_list()),
485b800a 117 side_field_s64("v", side_attr_list()),
399c836b
MD
118 ),
119 side_attr_list()
f611d0c3
MD
120);
121
122static
123void test_array(void)
124{
d5cdb129 125 side_event_cond(my_provider_event_array) {
f611d0c3 126 side_arg_define_vec(myarray, side_arg_list(side_arg_u32(1), side_arg_u32(2), side_arg_u32(3)));
d5cdb129 127 side_event_call(my_provider_event_array, side_arg_list(side_arg_array(&myarray), side_arg_s64(42)));
f611d0c3
MD
128 }
129}
130
89747802 131side_static_event(my_provider_event_vla, "myprovider", "myvla", SIDE_LOGLEVEL_DEBUG,
f611d0c3 132 side_field_list(
9a55f555 133 side_field_vla("vla", side_elem(side_type_u32(side_attr_list())), side_attr_list()),
485b800a 134 side_field_s64("v", side_attr_list()),
399c836b
MD
135 ),
136 side_attr_list()
f611d0c3
MD
137);
138
139static
140void test_vla(void)
141{
d5cdb129 142 side_event_cond(my_provider_event_vla) {
f611d0c3 143 side_arg_define_vec(myvla, side_arg_list(side_arg_u32(1), side_arg_u32(2), side_arg_u32(3)));
d5cdb129 144 side_event_call(my_provider_event_vla, side_arg_list(side_arg_vla(&myvla), side_arg_s64(42)));
f611d0c3
MD
145 }
146}
147
cdd6e858
MD
148/* 1D array visitor */
149
f611d0c3
MD
150struct app_visitor_ctx {
151 const uint32_t *ptr;
352a4b77 152 uint32_t length;
f611d0c3
MD
153};
154
352a4b77
MD
155static
156enum side_visitor_status test_visitor(const struct side_tracer_visitor_ctx *tracer_ctx, void *_ctx)
f611d0c3
MD
157{
158 struct app_visitor_ctx *ctx = (struct app_visitor_ctx *) _ctx;
352a4b77
MD
159 uint32_t length = ctx->length, i;
160
161 for (i = 0; i < length; i++) {
ffb5c809
MD
162 const struct side_arg_vec elem = side_arg_u32(ctx->ptr[i]);
163
db6ecef9
MD
164 if (tracer_ctx->write_elem(tracer_ctx, &elem) != SIDE_VISITOR_STATUS_OK)
165 return SIDE_VISITOR_STATUS_ERROR;
352a4b77 166 }
f611d0c3
MD
167 return SIDE_VISITOR_STATUS_OK;
168}
169
170static uint32_t testarray[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
171
89747802 172side_static_event(my_provider_event_vla_visitor, "myprovider", "myvlavisit", SIDE_LOGLEVEL_DEBUG,
f611d0c3 173 side_field_list(
9a55f555 174 side_field_vla_visitor("vlavisit", side_elem(side_type_u32(side_attr_list())), test_visitor, side_attr_list()),
485b800a 175 side_field_s64("v", side_attr_list()),
399c836b
MD
176 ),
177 side_attr_list()
f611d0c3
MD
178);
179
180static
181void test_vla_visitor(void)
182{
d5cdb129 183 side_event_cond(my_provider_event_vla_visitor) {
f611d0c3
MD
184 struct app_visitor_ctx ctx = {
185 .ptr = testarray,
352a4b77 186 .length = SIDE_ARRAY_SIZE(testarray),
f611d0c3 187 };
d5cdb129 188 side_event_call(my_provider_event_vla_visitor, side_arg_list(side_arg_vla_visitor(&ctx), side_arg_s64(42)));
f611d0c3
MD
189 }
190}
191
cdd6e858
MD
192/* 2D array visitor */
193
194struct app_visitor_2d_inner_ctx {
195 const uint32_t *ptr;
196 uint32_t length;
197};
198
199static
200enum side_visitor_status test_inner_visitor(const struct side_tracer_visitor_ctx *tracer_ctx, void *_ctx)
201{
202 struct app_visitor_2d_inner_ctx *ctx = (struct app_visitor_2d_inner_ctx *) _ctx;
203 uint32_t length = ctx->length, i;
204
205 for (i = 0; i < length; i++) {
ffb5c809
MD
206 const struct side_arg_vec elem = side_arg_u32(ctx->ptr[i]);
207
db6ecef9
MD
208 if (tracer_ctx->write_elem(tracer_ctx, &elem) != SIDE_VISITOR_STATUS_OK)
209 return SIDE_VISITOR_STATUS_ERROR;
cdd6e858
MD
210 }
211 return SIDE_VISITOR_STATUS_OK;
212}
213
214struct app_visitor_2d_outer_ctx {
215 const uint32_t (*ptr)[2];
216 uint32_t length;
217};
218
219static
220enum side_visitor_status test_outer_visitor(const struct side_tracer_visitor_ctx *tracer_ctx, void *_ctx)
221{
222 struct app_visitor_2d_outer_ctx *ctx = (struct app_visitor_2d_outer_ctx *) _ctx;
223 uint32_t length = ctx->length, i;
224
225 for (i = 0; i < length; i++) {
226 struct app_visitor_2d_inner_ctx inner_ctx = {
227 .ptr = ctx->ptr[i],
228 .length = 2,
229 };
230 const struct side_arg_vec elem = side_arg_vla_visitor(&inner_ctx);
db6ecef9
MD
231 if (tracer_ctx->write_elem(tracer_ctx, &elem) != SIDE_VISITOR_STATUS_OK)
232 return SIDE_VISITOR_STATUS_ERROR;
cdd6e858
MD
233 }
234 return SIDE_VISITOR_STATUS_OK;
235}
236
237static uint32_t testarray2d[][2] = {
238 { 1, 2 },
239 { 33, 44 },
240 { 55, 66 },
241};
242
89747802 243side_static_event(my_provider_event_vla_visitor2d, "myprovider", "myvlavisit2d", SIDE_LOGLEVEL_DEBUG,
cdd6e858
MD
244 side_field_list(
245 side_field_vla_visitor("vlavisit2d",
f37a556f 246 side_elem(
32ba58fc 247 side_type_vla_visitor(
9a55f555 248 side_elem(side_type_u32(side_attr_list())),
f37a556f
MD
249 test_inner_visitor,
250 side_attr_list())
251 ), test_outer_visitor, side_attr_list()),
485b800a 252 side_field_s64("v", side_attr_list()),
399c836b
MD
253 ),
254 side_attr_list()
cdd6e858
MD
255);
256
257static
258void test_vla_visitor_2d(void)
259{
d5cdb129 260 side_event_cond(my_provider_event_vla_visitor2d) {
cdd6e858
MD
261 struct app_visitor_2d_outer_ctx ctx = {
262 .ptr = testarray2d,
263 .length = SIDE_ARRAY_SIZE(testarray2d),
264 };
d5cdb129 265 side_event_call(my_provider_event_vla_visitor2d, side_arg_list(side_arg_vla_visitor(&ctx), side_arg_s64(42)));
cdd6e858
MD
266 }
267}
268
ba845af5
MD
269static int64_t array_fixint[] = { -444, 555, 123, 2897432587 };
270
89747802 271side_static_event(my_provider_event_array_fixint, "myprovider", "myarrayfixint", SIDE_LOGLEVEL_DEBUG,
ba845af5 272 side_field_list(
9a55f555 273 side_field_array("arrfixint", side_elem(side_type_s64(side_attr_list())), SIDE_ARRAY_SIZE(array_fixint), side_attr_list()),
485b800a 274 side_field_s64("v", side_attr_list()),
399c836b
MD
275 ),
276 side_attr_list()
ba845af5
MD
277);
278
279static
280void test_array_fixint(void)
281{
d5cdb129 282 side_event(my_provider_event_array_fixint,
1533629f
MD
283 side_arg_list(side_arg_array_s64(array_fixint), side_arg_s64(42)));
284}
285
286static int64_t vla_fixint[] = { -444, 555, 123, 2897432587 };
287
89747802 288side_static_event(my_provider_event_vla_fixint, "myprovider", "myvlafixint", SIDE_LOGLEVEL_DEBUG,
1533629f 289 side_field_list(
9a55f555 290 side_field_vla("vlafixint", side_elem(side_type_s64(side_attr_list())), side_attr_list()),
485b800a 291 side_field_s64("v", side_attr_list()),
399c836b
MD
292 ),
293 side_attr_list()
1533629f
MD
294);
295
296static
297void test_vla_fixint(void)
298{
d5cdb129 299 side_event(my_provider_event_vla_fixint,
1533629f 300 side_arg_list(side_arg_vla_s64(vla_fixint, SIDE_ARRAY_SIZE(vla_fixint)), side_arg_s64(42)));
ba845af5
MD
301}
302
89747802 303side_static_event(my_provider_event_dynamic_basic,
a2e2357e
MD
304 "myprovider", "mydynamicbasic", SIDE_LOGLEVEL_DEBUG,
305 side_field_list(
485b800a 306 side_field_dynamic("dynamic", side_attr_list()),
399c836b
MD
307 ),
308 side_attr_list()
a2e2357e
MD
309);
310
311static
312void test_dynamic_basic_type(void)
313{
d5cdb129 314 side_event(my_provider_event_dynamic_basic,
808bd9bf 315 side_arg_list(side_arg_dynamic(side_arg_dynamic_s16(-33, side_attr_list()))));
a2e2357e
MD
316}
317
89747802 318side_static_event(my_provider_event_dynamic_vla,
a2e2357e
MD
319 "myprovider", "mydynamicvla", SIDE_LOGLEVEL_DEBUG,
320 side_field_list(
485b800a 321 side_field_dynamic("dynamic", side_attr_list()),
399c836b
MD
322 ),
323 side_attr_list()
a2e2357e
MD
324);
325
326static
327void test_dynamic_vla(void)
328{
948e3e72
MD
329 side_arg_dynamic_define_vec(myvla,
330 side_arg_list(
808bd9bf
MD
331 side_arg_dynamic_u32(1, side_attr_list()),
332 side_arg_dynamic_u32(2, side_attr_list()),
333 side_arg_dynamic_u32(3, side_attr_list()),
8d20e708
MD
334 ),
335 side_attr_list()
df075fa5 336 );
d5cdb129 337 side_event(my_provider_event_dynamic_vla,
8d20e708 338 side_arg_list(side_arg_dynamic(side_arg_dynamic_vla(&myvla))));
a2e2357e
MD
339}
340
89747802 341side_static_event(my_provider_event_dynamic_null,
465e5e7e
MD
342 "myprovider", "mydynamicnull", SIDE_LOGLEVEL_DEBUG,
343 side_field_list(
485b800a 344 side_field_dynamic("dynamic", side_attr_list()),
399c836b
MD
345 ),
346 side_attr_list()
465e5e7e
MD
347);
348
349static
350void test_dynamic_null(void)
351{
d5cdb129 352 side_event(my_provider_event_dynamic_null,
808bd9bf 353 side_arg_list(side_arg_dynamic(side_arg_dynamic_null(side_attr_list()))));
465e5e7e
MD
354}
355
89747802 356side_static_event(my_provider_event_dynamic_struct,
c208889e 357 "myprovider", "mydynamicstruct", SIDE_LOGLEVEL_DEBUG,
465e5e7e 358 side_field_list(
485b800a 359 side_field_dynamic("dynamic", side_attr_list()),
399c836b
MD
360 ),
361 side_attr_list()
465e5e7e
MD
362);
363
364static
c208889e 365void test_dynamic_struct(void)
465e5e7e 366{
c208889e 367 side_arg_dynamic_define_struct(mystruct,
465e5e7e 368 side_arg_list(
808bd9bf
MD
369 side_arg_dynamic_field("a", side_arg_dynamic_u32(43, side_attr_list())),
370 side_arg_dynamic_field("b", side_arg_dynamic_string("zzz", side_attr_list())),
371 side_arg_dynamic_field("c", side_arg_dynamic_null(side_attr_list())),
8d20e708
MD
372 ),
373 side_attr_list()
465e5e7e
MD
374 );
375
d5cdb129 376 side_event(my_provider_event_dynamic_struct,
8d20e708 377 side_arg_list(side_arg_dynamic(side_arg_dynamic_struct(&mystruct))));
465e5e7e
MD
378}
379
89747802 380side_static_event(my_provider_event_dynamic_nested_struct,
c208889e 381 "myprovider", "mydynamicnestedstruct", SIDE_LOGLEVEL_DEBUG,
3222d397 382 side_field_list(
485b800a 383 side_field_dynamic("dynamic", side_attr_list()),
399c836b
MD
384 ),
385 side_attr_list()
3222d397
MD
386);
387
388static
c208889e 389void test_dynamic_nested_struct(void)
3222d397 390{
c208889e 391 side_arg_dynamic_define_struct(nested,
3222d397 392 side_arg_list(
808bd9bf
MD
393 side_arg_dynamic_field("a", side_arg_dynamic_u32(43, side_attr_list())),
394 side_arg_dynamic_field("b", side_arg_dynamic_u8(55, side_attr_list())),
8d20e708
MD
395 ),
396 side_attr_list()
3222d397 397 );
c208889e 398 side_arg_dynamic_define_struct(nested2,
3222d397 399 side_arg_list(
808bd9bf
MD
400 side_arg_dynamic_field("aa", side_arg_dynamic_u64(128, side_attr_list())),
401 side_arg_dynamic_field("bb", side_arg_dynamic_u16(1, side_attr_list())),
8d20e708
MD
402 ),
403 side_attr_list()
3222d397 404 );
c208889e 405 side_arg_dynamic_define_struct(mystruct,
3222d397 406 side_arg_list(
8d20e708
MD
407 side_arg_dynamic_field("nested", side_arg_dynamic_struct(&nested)),
408 side_arg_dynamic_field("nested2", side_arg_dynamic_struct(&nested2)),
409 ),
410 side_attr_list()
3222d397 411 );
d5cdb129 412 side_event(my_provider_event_dynamic_nested_struct,
8d20e708 413 side_arg_list(side_arg_dynamic(side_arg_dynamic_struct(&mystruct))));
3222d397
MD
414}
415
89747802 416side_static_event(my_provider_event_dynamic_vla_struct,
c208889e 417 "myprovider", "mydynamicvlastruct", SIDE_LOGLEVEL_DEBUG,
7ce1b78f 418 side_field_list(
485b800a 419 side_field_dynamic("dynamic", side_attr_list()),
399c836b
MD
420 ),
421 side_attr_list()
7ce1b78f
MD
422);
423
424static
c208889e 425void test_dynamic_vla_struct(void)
7ce1b78f 426{
c208889e 427 side_arg_dynamic_define_struct(nested,
7ce1b78f 428 side_arg_list(
808bd9bf
MD
429 side_arg_dynamic_field("a", side_arg_dynamic_u32(43, side_attr_list())),
430 side_arg_dynamic_field("b", side_arg_dynamic_u8(55, side_attr_list())),
8d20e708
MD
431 ),
432 side_attr_list()
7ce1b78f
MD
433 );
434 side_arg_dynamic_define_vec(myvla,
435 side_arg_list(
8d20e708
MD
436 side_arg_dynamic_struct(&nested),
437 side_arg_dynamic_struct(&nested),
438 side_arg_dynamic_struct(&nested),
439 side_arg_dynamic_struct(&nested),
440 ),
441 side_attr_list()
7ce1b78f 442 );
d5cdb129 443 side_event(my_provider_event_dynamic_vla_struct,
8d20e708 444 side_arg_list(side_arg_dynamic(side_arg_dynamic_vla(&myvla))));
7ce1b78f
MD
445}
446
89747802 447side_static_event(my_provider_event_dynamic_struct_vla,
c208889e 448 "myprovider", "mydynamicstructvla", SIDE_LOGLEVEL_DEBUG,
980bfdc4 449 side_field_list(
485b800a 450 side_field_dynamic("dynamic", side_attr_list()),
399c836b
MD
451 ),
452 side_attr_list()
980bfdc4
MD
453);
454
455static
c208889e 456void test_dynamic_struct_vla(void)
980bfdc4
MD
457{
458 side_arg_dynamic_define_vec(myvla,
948e3e72 459 side_arg_list(
808bd9bf
MD
460 side_arg_dynamic_u32(1, side_attr_list()),
461 side_arg_dynamic_u32(2, side_attr_list()),
462 side_arg_dynamic_u32(3, side_attr_list()),
8d20e708
MD
463 ),
464 side_attr_list()
df075fa5 465 );
980bfdc4 466 side_arg_dynamic_define_vec(myvla2,
948e3e72 467 side_arg_list(
808bd9bf
MD
468 side_arg_dynamic_u32(4, side_attr_list()),
469 side_arg_dynamic_u64(5, side_attr_list()),
470 side_arg_dynamic_u32(6, side_attr_list()),
8d20e708
MD
471 ),
472 side_attr_list()
df075fa5 473 );
c208889e 474 side_arg_dynamic_define_struct(mystruct,
980bfdc4 475 side_arg_list(
8d20e708
MD
476 side_arg_dynamic_field("a", side_arg_dynamic_vla(&myvla)),
477 side_arg_dynamic_field("b", side_arg_dynamic_vla(&myvla2)),
478 ),
479 side_attr_list()
980bfdc4 480 );
d5cdb129 481 side_event(my_provider_event_dynamic_struct_vla,
8d20e708 482 side_arg_list(side_arg_dynamic(side_arg_dynamic_struct(&mystruct))));
980bfdc4
MD
483}
484
89747802 485side_static_event(my_provider_event_dynamic_nested_vla,
948e3e72
MD
486 "myprovider", "mydynamicnestedvla", SIDE_LOGLEVEL_DEBUG,
487 side_field_list(
485b800a 488 side_field_dynamic("dynamic", side_attr_list()),
399c836b
MD
489 ),
490 side_attr_list()
948e3e72
MD
491);
492
493static
494void test_dynamic_nested_vla(void)
495{
496 side_arg_dynamic_define_vec(nestedvla,
497 side_arg_list(
808bd9bf
MD
498 side_arg_dynamic_u32(1, side_attr_list()),
499 side_arg_dynamic_u16(2, side_attr_list()),
500 side_arg_dynamic_u32(3, side_attr_list()),
8d20e708
MD
501 ),
502 side_attr_list()
948e3e72
MD
503 );
504 side_arg_dynamic_define_vec(nestedvla2,
505 side_arg_list(
808bd9bf
MD
506 side_arg_dynamic_u8(4, side_attr_list()),
507 side_arg_dynamic_u32(5, side_attr_list()),
508 side_arg_dynamic_u32(6, side_attr_list()),
8d20e708
MD
509 ),
510 side_attr_list()
948e3e72
MD
511 );
512 side_arg_dynamic_define_vec(myvla,
513 side_arg_list(
8d20e708
MD
514 side_arg_dynamic_vla(&nestedvla),
515 side_arg_dynamic_vla(&nestedvla2),
516 ),
517 side_attr_list()
948e3e72 518 );
d5cdb129 519 side_event(my_provider_event_dynamic_nested_vla,
8d20e708 520 side_arg_list(side_arg_dynamic(side_arg_dynamic_vla(&myvla))));
948e3e72
MD
521}
522
89747802 523side_static_event_variadic(my_provider_event_variadic,
19fa6aa2 524 "myprovider", "myvariadicevent", SIDE_LOGLEVEL_DEBUG,
399c836b
MD
525 side_field_list(),
526 side_attr_list()
19fa6aa2
MD
527);
528
529static
530void test_variadic(void)
531{
d5cdb129 532 side_event_variadic(my_provider_event_variadic,
19fa6aa2
MD
533 side_arg_list(),
534 side_arg_list(
808bd9bf
MD
535 side_arg_dynamic_field("a", side_arg_dynamic_u32(55, side_attr_list())),
536 side_arg_dynamic_field("b", side_arg_dynamic_s8(-4, side_attr_list())),
8d20e708
MD
537 ),
538 side_attr_list()
19fa6aa2
MD
539 );
540}
541
89747802 542side_static_event_variadic(my_provider_event_static_variadic,
41c4d119
MD
543 "myprovider", "mystaticvariadicevent", SIDE_LOGLEVEL_DEBUG,
544 side_field_list(
485b800a
MD
545 side_field_u32("abc", side_attr_list()),
546 side_field_u16("def", side_attr_list()),
399c836b
MD
547 ),
548 side_attr_list()
41c4d119
MD
549);
550
551static
552void test_static_variadic(void)
553{
d5cdb129 554 side_event_variadic(my_provider_event_static_variadic,
41c4d119
MD
555 side_arg_list(
556 side_arg_u32(1),
557 side_arg_u16(2),
558 ),
559 side_arg_list(
808bd9bf
MD
560 side_arg_dynamic_field("a", side_arg_dynamic_u32(55, side_attr_list())),
561 side_arg_dynamic_field("b", side_arg_dynamic_s8(-4, side_attr_list())),
8d20e708
MD
562 ),
563 side_attr_list()
41c4d119
MD
564 );
565}
566
89747802 567side_static_event(my_provider_event_bool, "myprovider", "myeventbool", SIDE_LOGLEVEL_DEBUG,
4f40d951 568 side_field_list(
485b800a
MD
569 side_field_bool("a_false", side_attr_list()),
570 side_field_bool("b_true", side_attr_list()),
571 side_field_bool("c_true", side_attr_list()),
572 side_field_bool("d_true", side_attr_list()),
573 side_field_bool("e_true", side_attr_list()),
574 side_field_bool("f_false", side_attr_list()),
575 side_field_bool("g_true", side_attr_list()),
399c836b
MD
576 ),
577 side_attr_list()
4f40d951
MD
578);
579
580static
581void test_bool(void)
582{
583 uint32_t a = 0;
584 uint32_t b = 1;
585 uint64_t c = 0x12345678;
586 int16_t d = -32768;
587 bool e = true;
588 bool f = false;
589 uint32_t g = 256;
590
d5cdb129 591 side_event(my_provider_event_bool,
4f40d951
MD
592 side_arg_list(
593 side_arg_bool(a),
594 side_arg_bool(b),
595 side_arg_bool(c),
596 side_arg_bool(d),
597 side_arg_bool(e),
598 side_arg_bool(f),
599 side_arg_bool(g),
600 )
601 );
602}
603
89747802 604side_static_event_variadic(my_provider_event_dynamic_bool,
4f40d951 605 "myprovider", "mydynamicbool", SIDE_LOGLEVEL_DEBUG,
399c836b
MD
606 side_field_list(),
607 side_attr_list()
4f40d951
MD
608);
609
610static
611void test_dynamic_bool(void)
612{
d5cdb129 613 side_event_variadic(my_provider_event_dynamic_bool,
4f40d951
MD
614 side_arg_list(),
615 side_arg_list(
808bd9bf
MD
616 side_arg_dynamic_field("a_true", side_arg_dynamic_bool(55, side_attr_list())),
617 side_arg_dynamic_field("b_true", side_arg_dynamic_bool(-4, side_attr_list())),
618 side_arg_dynamic_field("c_false", side_arg_dynamic_bool(0, side_attr_list())),
619 side_arg_dynamic_field("d_true", side_arg_dynamic_bool(256, side_attr_list())),
8d20e708
MD
620 ),
621 side_attr_list()
4f40d951
MD
622 );
623}
624
89747802 625side_static_event(my_provider_event_dynamic_vla_visitor,
8ceca0cd
MD
626 "myprovider", "mydynamicvlavisitor", SIDE_LOGLEVEL_DEBUG,
627 side_field_list(
485b800a 628 side_field_dynamic("dynamic", side_attr_list()),
399c836b
MD
629 ),
630 side_attr_list()
8ceca0cd
MD
631);
632
633struct app_dynamic_vla_visitor_ctx {
634 const uint32_t *ptr;
635 uint32_t length;
636};
637
638static
639enum side_visitor_status test_dynamic_vla_visitor(const struct side_tracer_dynamic_vla_visitor_ctx *tracer_ctx, void *_ctx)
640{
641 struct app_dynamic_vla_visitor_ctx *ctx = (struct app_dynamic_vla_visitor_ctx *) _ctx;
642 uint32_t length = ctx->length, i;
643
644 for (i = 0; i < length; i++) {
645 const struct side_arg_dynamic_vec elem = {
646 .dynamic_type = SIDE_DYNAMIC_TYPE_U32,
647 .u = {
8d20e708
MD
648 .side_basic = {
649 .attr = NULL,
650 .nr_attr = 0,
651 .u = {
652 .side_u32 = ctx->ptr[i],
653 },
654 },
8ceca0cd
MD
655 },
656 };
657 if (tracer_ctx->write_elem(tracer_ctx, &elem) != SIDE_VISITOR_STATUS_OK)
658 return SIDE_VISITOR_STATUS_ERROR;
659 }
660 return SIDE_VISITOR_STATUS_OK;
661}
662
663static uint32_t testarray_dynamic_vla[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
664
665static
666void test_dynamic_vla_with_visitor(void)
667{
d5cdb129 668 side_event_cond(my_provider_event_dynamic_vla_visitor) {
8ceca0cd
MD
669 struct app_dynamic_vla_visitor_ctx ctx = {
670 .ptr = testarray_dynamic_vla,
671 .length = SIDE_ARRAY_SIZE(testarray_dynamic_vla),
672 };
d5cdb129 673 side_event_call(my_provider_event_dynamic_vla_visitor,
8ceca0cd
MD
674 side_arg_list(
675 side_arg_dynamic(
808bd9bf 676 side_arg_dynamic_vla_visitor(test_dynamic_vla_visitor, &ctx, side_attr_list())
8ceca0cd
MD
677 )
678 )
679 );
680 }
681}
682
89747802 683side_static_event(my_provider_event_dynamic_struct_visitor,
2b359235
MD
684 "myprovider", "mydynamicstructvisitor", SIDE_LOGLEVEL_DEBUG,
685 side_field_list(
485b800a 686 side_field_dynamic("dynamic", side_attr_list()),
399c836b
MD
687 ),
688 side_attr_list()
2b359235
MD
689);
690
691struct struct_visitor_pair {
692 const char *name;
693 uint32_t value;
694};
695
696struct app_dynamic_struct_visitor_ctx {
697 const struct struct_visitor_pair *ptr;
698 uint32_t length;
699};
700
701static
702enum side_visitor_status test_dynamic_struct_visitor(const struct side_tracer_dynamic_struct_visitor_ctx *tracer_ctx, void *_ctx)
703{
704 struct app_dynamic_struct_visitor_ctx *ctx = (struct app_dynamic_struct_visitor_ctx *) _ctx;
705 uint32_t length = ctx->length, i;
706
707 for (i = 0; i < length; i++) {
708 struct side_arg_dynamic_event_field dynamic_field = {
709 .field_name = ctx->ptr[i].name,
710 .elem = {
711 .dynamic_type = SIDE_DYNAMIC_TYPE_U32,
712 .u = {
8d20e708
MD
713 .side_basic = {
714 .nr_attr = 0,
715 .attr = NULL,
716 .u = {
717 .side_u32 = ctx->ptr[i].value,
718 },
719 },
2b359235
MD
720 },
721 },
722 };
723 if (tracer_ctx->write_field(tracer_ctx, &dynamic_field) != SIDE_VISITOR_STATUS_OK)
724 return SIDE_VISITOR_STATUS_ERROR;
725 }
726 return SIDE_VISITOR_STATUS_OK;
727}
728
729static struct struct_visitor_pair testarray_dynamic_struct[] = {
730 { "a", 1, },
731 { "b", 2, },
732 { "c", 3, },
733 { "d", 4, },
734};
735
736static
737void test_dynamic_struct_with_visitor(void)
738{
d5cdb129 739 side_event_cond(my_provider_event_dynamic_struct_visitor) {
2b359235
MD
740 struct app_dynamic_struct_visitor_ctx ctx = {
741 .ptr = testarray_dynamic_struct,
742 .length = SIDE_ARRAY_SIZE(testarray_dynamic_struct),
743 };
d5cdb129 744 side_event_call(my_provider_event_dynamic_struct_visitor,
2b359235
MD
745 side_arg_list(
746 side_arg_dynamic(
808bd9bf 747 side_arg_dynamic_struct_visitor(test_dynamic_struct_visitor, &ctx, side_attr_list())
2b359235
MD
748 )
749 )
750 );
751 }
752}
753
89747802 754side_static_event(my_provider_event_user_attribute, "myprovider", "myevent_user_attribute", SIDE_LOGLEVEL_DEBUG,
65010f43 755 side_field_list(
485b800a
MD
756 side_field_u32("abc", side_attr_list()),
757 side_field_s64("def", side_attr_list()),
399c836b
MD
758 ),
759 side_attr_list(
bc3c89b3
MD
760 side_attr("user_attribute_a", side_attr_string("val1")),
761 side_attr("user_attribute_b", side_attr_string("val2")),
65010f43
MD
762 )
763);
764
765static
766void test_event_user_attribute(void)
767{
d5cdb129 768 side_event(my_provider_event_user_attribute, side_arg_list(side_arg_u32(1), side_arg_s64(2)));
65010f43
MD
769}
770
89747802 771side_static_event(my_provider_field_user_attribute, "myprovider", "myevent_field_attribute", SIDE_LOGLEVEL_DEBUG,
a848763d 772 side_field_list(
485b800a 773 side_field_u32("abc",
a848763d 774 side_attr_list(
bc3c89b3
MD
775 side_attr("user_attribute_a", side_attr_string("val1")),
776 side_attr("user_attribute_b", side_attr_u32(2)),
a848763d
MD
777 )
778 ),
485b800a 779 side_field_s64("def",
a848763d 780 side_attr_list(
bc3c89b3
MD
781 side_attr("user_attribute_c", side_attr_string("val3")),
782 side_attr("user_attribute_d", side_attr_s64(-5)),
a848763d
MD
783 )
784 ),
785 ),
786 side_attr_list()
787);
788
789static
790void test_field_user_attribute(void)
791{
d5cdb129 792 side_event(my_provider_field_user_attribute, side_arg_list(side_arg_u32(1), side_arg_s64(2)));
a848763d
MD
793}
794
89747802 795side_static_event_variadic(my_provider_event_variadic_attr,
808bd9bf
MD
796 "myprovider", "myvariadiceventattr", SIDE_LOGLEVEL_DEBUG,
797 side_field_list(),
798 side_attr_list()
799);
800
801static
802void test_variadic_attr(void)
803{
d5cdb129 804 side_event_variadic(my_provider_event_variadic_attr,
808bd9bf
MD
805 side_arg_list(),
806 side_arg_list(
807 side_arg_dynamic_field("a",
808 side_arg_dynamic_u32(55,
809 side_attr_list(
bc3c89b3
MD
810 side_attr("user_attribute_c", side_attr_string("valX")),
811 side_attr("user_attribute_d", side_attr_u8(55)),
808bd9bf
MD
812 )
813 )
814 ),
815 side_arg_dynamic_field("b",
816 side_arg_dynamic_s8(-4,
817 side_attr_list(
bc3c89b3
MD
818 side_attr("X", side_attr_u8(1)),
819 side_attr("Y", side_attr_s8(2)),
808bd9bf
MD
820 )
821 )
822 ),
8d20e708
MD
823 ),
824 side_attr_list()
808bd9bf
MD
825 );
826}
827
89747802 828side_static_event_variadic(my_provider_event_variadic_vla_attr,
808bd9bf
MD
829 "myprovider", "myvariadiceventvlaattr", SIDE_LOGLEVEL_DEBUG,
830 side_field_list(),
831 side_attr_list()
832);
833
834static
835void test_variadic_vla_attr(void)
836{
837 side_arg_dynamic_define_vec(myvla,
838 side_arg_list(
839 side_arg_dynamic_u32(1,
840 side_attr_list(
bc3c89b3
MD
841 side_attr("Z", side_attr_u8(0)),
842 side_attr("A", side_attr_u8(123)),
808bd9bf
MD
843 )
844 ),
845 side_arg_dynamic_u32(2, side_attr_list()),
846 side_arg_dynamic_u32(3, side_attr_list()),
8d20e708
MD
847 ),
848 side_attr_list(
849 side_attr("X", side_attr_u8(1)),
850 side_attr("Y", side_attr_u8(2)),
808bd9bf
MD
851 )
852 );
d5cdb129 853 side_event_variadic(my_provider_event_variadic_vla_attr,
808bd9bf
MD
854 side_arg_list(),
855 side_arg_list(
8d20e708
MD
856 side_arg_dynamic_field("a", side_arg_dynamic_vla(&myvla)),
857 ),
858 side_attr_list()
808bd9bf
MD
859 );
860}
861
89747802 862side_static_event_variadic(my_provider_event_variadic_struct_attr,
808bd9bf
MD
863 "myprovider", "myvariadiceventstructattr", SIDE_LOGLEVEL_DEBUG,
864 side_field_list(),
865 side_attr_list()
866);
867
868static
869void test_variadic_struct_attr(void)
870{
d5cdb129 871 side_event_cond(my_provider_event_variadic_struct_attr) {
808bd9bf
MD
872 side_arg_dynamic_define_struct(mystruct,
873 side_arg_list(
874 side_arg_dynamic_field("a",
875 side_arg_dynamic_u32(43,
876 side_attr_list(
bc3c89b3 877 side_attr("A", side_attr_bool(true)),
808bd9bf
MD
878 )
879 )
880 ),
881 side_arg_dynamic_field("b", side_arg_dynamic_u8(55, side_attr_list())),
8d20e708
MD
882 ),
883 side_attr_list(
884 side_attr("X", side_attr_u8(1)),
885 side_attr("Y", side_attr_u8(2)),
808bd9bf
MD
886 )
887 );
d5cdb129 888 side_event_call_variadic(my_provider_event_variadic_struct_attr,
808bd9bf
MD
889 side_arg_list(),
890 side_arg_list(
8d20e708
MD
891 side_arg_dynamic_field("a", side_arg_dynamic_struct(&mystruct)),
892 ),
893 side_attr_list()
808bd9bf
MD
894 );
895 }
896}
897
89747802 898side_static_event(my_provider_event_float, "myprovider", "myeventfloat", SIDE_LOGLEVEL_DEBUG,
fb25b355
MD
899 side_field_list(
900#if __HAVE_FLOAT16
485b800a 901 side_field_float_binary16("binary16", side_attr_list()),
8bdd5c12
MD
902 side_field_float_binary16_le("binary16_le", side_attr_list()),
903 side_field_float_binary16_be("binary16_be", side_attr_list()),
fb25b355
MD
904#endif
905#if __HAVE_FLOAT32
485b800a 906 side_field_float_binary32("binary32", side_attr_list()),
8bdd5c12
MD
907 side_field_float_binary32_le("binary32_le", side_attr_list()),
908 side_field_float_binary32_be("binary32_be", side_attr_list()),
fb25b355
MD
909#endif
910#if __HAVE_FLOAT64
485b800a 911 side_field_float_binary64("binary64", side_attr_list()),
8bdd5c12
MD
912 side_field_float_binary64_le("binary64_le", side_attr_list()),
913 side_field_float_binary64_be("binary64_be", side_attr_list()),
fb25b355
MD
914#endif
915#if __HAVE_FLOAT128
485b800a 916 side_field_float_binary128("binary128", side_attr_list()),
8bdd5c12
MD
917 side_field_float_binary128_le("binary128_le", side_attr_list()),
918 side_field_float_binary128_be("binary128_be", side_attr_list()),
fb25b355
MD
919#endif
920 ),
921 side_attr_list()
922);
923
924static
925void test_float(void)
926{
8bdd5c12
MD
927#if __HAVE_FLOAT16
928 union {
929 _Float16 f;
930 uint16_t u;
931 } float16 = {
932 .f = 1.1,
933 };
934#endif
935#if __HAVE_FLOAT32
936 union {
937 _Float32 f;
938 uint32_t u;
939 } float32 = {
940 .f = 2.2,
941 };
942#endif
943#if __HAVE_FLOAT64
944 union {
945 _Float64 f;
946 uint64_t u;
947 } float64 = {
948 .f = 3.3,
949 };
950#endif
951#if __HAVE_FLOAT128
952 union {
953 _Float128 f;
954 char arr[16];
955 } float128 = {
956 .f = 4.4,
957 };
958#endif
959
960#if __HAVE_FLOAT16
961 float16.u = side_bswap_16(float16.u);
962#endif
963#if __HAVE_FLOAT32
964 float32.u = side_bswap_32(float32.u);
965#endif
966#if __HAVE_FLOAT64
967 float64.u = side_bswap_64(float64.u);
968#endif
969#if __HAVE_FLOAT128
970 side_bswap_128p(float128.arr);
971#endif
972
d5cdb129 973 side_event(my_provider_event_float,
fb25b355
MD
974 side_arg_list(
975#if __HAVE_FLOAT16
976 side_arg_float_binary16(1.1),
8bdd5c12
MD
977# if SIDE_FLOAT_WORD_ORDER == SIDE_LITTLE_ENDIAN
978 side_arg_float_binary16(1.1),
979 side_arg_float_binary16(float16.f),
980# else
981 side_arg_float_binary16(float16.f),
982 side_arg_float_binary16(1.1),
983# endif
fb25b355
MD
984#endif
985#if __HAVE_FLOAT32
986 side_arg_float_binary32(2.2),
8bdd5c12
MD
987# if SIDE_FLOAT_WORD_ORDER == SIDE_LITTLE_ENDIAN
988 side_arg_float_binary32(2.2),
989 side_arg_float_binary32(float32.f),
990# else
991 side_arg_float_binary32(float32.f),
992 side_arg_float_binary32(2.2),
993# endif
fb25b355
MD
994#endif
995#if __HAVE_FLOAT64
996 side_arg_float_binary64(3.3),
8bdd5c12
MD
997# if SIDE_FLOAT_WORD_ORDER == SIDE_LITTLE_ENDIAN
998 side_arg_float_binary64(3.3),
999 side_arg_float_binary64(float64.f),
1000# else
1001 side_arg_float_binary64(float64.f),
1002 side_arg_float_binary64(3.3),
1003# endif
fb25b355
MD
1004#endif
1005#if __HAVE_FLOAT128
1006 side_arg_float_binary128(4.4),
8bdd5c12
MD
1007# if SIDE_FLOAT_WORD_ORDER == SIDE_LITTLE_ENDIAN
1008 side_arg_float_binary128(4.4),
1009 side_arg_float_binary128(float128.f),
1010# else
1011 side_arg_float_binary128(float128.f),
1012 side_arg_float_binary128(4.4),
1013# endif
fb25b355
MD
1014#endif
1015 )
1016 );
1017}
1018
89747802 1019side_static_event_variadic(my_provider_event_variadic_float,
fb25b355
MD
1020 "myprovider", "myvariadicfloat", SIDE_LOGLEVEL_DEBUG,
1021 side_field_list(),
1022 side_attr_list()
1023);
1024
1025static
1026void test_variadic_float(void)
1027{
8bdd5c12
MD
1028#if __HAVE_FLOAT16
1029 union {
1030 _Float16 f;
1031 uint16_t u;
1032 } float16 = {
1033 .f = 1.1,
1034 };
1035#endif
1036#if __HAVE_FLOAT32
1037 union {
1038 _Float32 f;
1039 uint32_t u;
1040 } float32 = {
1041 .f = 2.2,
1042 };
1043#endif
1044#if __HAVE_FLOAT64
1045 union {
1046 _Float64 f;
1047 uint64_t u;
1048 } float64 = {
1049 .f = 3.3,
1050 };
1051#endif
1052#if __HAVE_FLOAT128
1053 union {
1054 _Float128 f;
1055 char arr[16];
1056 } float128 = {
1057 .f = 4.4,
1058 };
1059#endif
1060
1061#if __HAVE_FLOAT16
1062 float16.u = side_bswap_16(float16.u);
1063#endif
1064#if __HAVE_FLOAT32
1065 float32.u = side_bswap_32(float32.u);
1066#endif
1067#if __HAVE_FLOAT64
1068 float64.u = side_bswap_64(float64.u);
1069#endif
1070#if __HAVE_FLOAT128
1071 side_bswap_128p(float128.arr);
1072#endif
1073
d5cdb129 1074 side_event_variadic(my_provider_event_variadic_float,
fb25b355
MD
1075 side_arg_list(),
1076 side_arg_list(
1077#if __HAVE_FLOAT16
8bdd5c12
MD
1078 side_arg_dynamic_field("binary16", side_arg_dynamic_float_binary16(1.1, side_attr_list())),
1079# if SIDE_FLOAT_WORD_ORDER == SIDE_LITTLE_ENDIAN
1080 side_arg_dynamic_field("binary16_le", side_arg_dynamic_float_binary16_le(1.1, side_attr_list())),
1081 side_arg_dynamic_field("binary16_be", side_arg_dynamic_float_binary16_be(float16.f, side_attr_list())),
1082# else
1083 side_arg_dynamic_field("binary16_le", side_arg_dynamic_float_binary16_le(float16.f, side_attr_list())),
1084 side_arg_dynamic_field("binary16_be", side_arg_dynamic_float_binary16_be(1.1, side_attr_list())),
1085# endif
fb25b355
MD
1086#endif
1087#if __HAVE_FLOAT32
8bdd5c12
MD
1088 side_arg_dynamic_field("binary32", side_arg_dynamic_float_binary32(2.2, side_attr_list())),
1089# if SIDE_FLOAT_WORD_ORDER == SIDE_LITTLE_ENDIAN
1090 side_arg_dynamic_field("binary32_le", side_arg_dynamic_float_binary32_le(2.2, side_attr_list())),
1091 side_arg_dynamic_field("binary32_be", side_arg_dynamic_float_binary32_be(float32.f, side_attr_list())),
1092# else
1093 side_arg_dynamic_field("binary32_le", side_arg_dynamic_float_binary32_le(float32.f, side_attr_list())),
1094 side_arg_dynamic_field("binary32_be", side_arg_dynamic_float_binary32_be(2.2, side_attr_list())),
1095# endif
fb25b355
MD
1096#endif
1097#if __HAVE_FLOAT64
8bdd5c12
MD
1098 side_arg_dynamic_field("binary64", side_arg_dynamic_float_binary64(3.3, side_attr_list())),
1099# if SIDE_FLOAT_WORD_ORDER == SIDE_LITTLE_ENDIAN
1100 side_arg_dynamic_field("binary64_le", side_arg_dynamic_float_binary64_le(3.3, side_attr_list())),
1101 side_arg_dynamic_field("binary64_be", side_arg_dynamic_float_binary64_be(float64.f, side_attr_list())),
1102# else
1103 side_arg_dynamic_field("binary64_le", side_arg_dynamic_float_binary64_le(float64.f, side_attr_list())),
1104 side_arg_dynamic_field("binary64_be", side_arg_dynamic_float_binary64_be(3.3, side_attr_list())),
1105# endif
fb25b355
MD
1106#endif
1107#if __HAVE_FLOAT128
8bdd5c12
MD
1108 side_arg_dynamic_field("binary128", side_arg_dynamic_float_binary128(4.4, side_attr_list())),
1109# if SIDE_FLOAT_WORD_ORDER == SIDE_LITTLE_ENDIAN
1110 side_arg_dynamic_field("binary128_le", side_arg_dynamic_float_binary128_le(4.4, side_attr_list())),
1111 side_arg_dynamic_field("binary128_be", side_arg_dynamic_float_binary128_be(float128.f, side_attr_list())),
1112# else
1113 side_arg_dynamic_field("binary128_le", side_arg_dynamic_float_binary128_le(float128.f, side_attr_list())),
1114 side_arg_dynamic_field("binary128_be", side_arg_dynamic_float_binary128_be(4.4, side_attr_list())),
1115# endif
fb25b355 1116#endif
8d20e708
MD
1117 ),
1118 side_attr_list()
fb25b355
MD
1119 );
1120}
1121
79f677ba 1122static side_define_enum(myenum,
66cff328 1123 side_enum_mapping_list(
79f677ba
MD
1124 side_enum_mapping_range("one-ten", 1, 10),
1125 side_enum_mapping_range("100-200", 100, 200),
1126 side_enum_mapping_value("200", 200),
1127 side_enum_mapping_value("300", 300),
d4328528
MD
1128 ),
1129 side_attr_list()
79f677ba
MD
1130);
1131
89747802 1132side_static_event(my_provider_event_enum, "myprovider", "myeventenum", SIDE_LOGLEVEL_DEBUG,
79f677ba 1133 side_field_list(
f89c4ad1
MD
1134 side_field_enum("5", &myenum, side_elem(side_type_u32(side_attr_list()))),
1135 side_field_enum("400", &myenum, side_elem(side_type_u64(side_attr_list()))),
1136 side_field_enum("200", &myenum, side_elem(side_type_u8(side_attr_list()))),
1137 side_field_enum("-100", &myenum, side_elem(side_type_s8(side_attr_list()))),
8bdd5c12
MD
1138 side_field_enum("6_be", &myenum, side_elem(side_type_u32_be(side_attr_list()))),
1139 side_field_enum("6_le", &myenum, side_elem(side_type_u32_le(side_attr_list()))),
79f677ba
MD
1140 ),
1141 side_attr_list()
1142);
1143
1144static
1145void test_enum(void)
1146{
d5cdb129 1147 side_event(my_provider_event_enum,
79f677ba 1148 side_arg_list(
d8be25de
MD
1149 side_arg_u32(5),
1150 side_arg_u64(400),
1151 side_arg_u8(200),
1152 side_arg_s8(-100),
8bdd5c12
MD
1153#if SIDE_BYTE_ORDER == SIDE_LITTLE_ENDIAN
1154 side_arg_u32(side_bswap_32(6)),
1155 side_arg_u32(6),
1156#else
1157 side_arg_u32(side_bswap_32(6)),
1158 side_arg_u32(6),
1159#endif
79f677ba
MD
1160 )
1161 );
1162}
1163
ea32e5fc 1164/* A bitmap enum maps bits to labels. */
66cff328
MD
1165static side_define_enum_bitmap(myenum_bitmap,
1166 side_enum_bitmap_mapping_list(
1167 side_enum_bitmap_mapping_value("0", 0),
1168 side_enum_bitmap_mapping_range("1-2", 1, 2),
1169 side_enum_bitmap_mapping_range("2-4", 2, 4),
1170 side_enum_bitmap_mapping_value("3", 3),
1171 side_enum_bitmap_mapping_value("30", 30),
1172 side_enum_bitmap_mapping_value("63", 63),
af6aa6e1
MD
1173 side_enum_bitmap_mapping_range("158-160", 158, 160),
1174 side_enum_bitmap_mapping_value("159", 159),
1175 side_enum_bitmap_mapping_range("500-700", 500, 700),
d4328528
MD
1176 ),
1177 side_attr_list()
ea32e5fc
MD
1178);
1179
89747802 1180side_static_event(my_provider_event_enum_bitmap, "myprovider", "myeventenumbitmap", SIDE_LOGLEVEL_DEBUG,
ea32e5fc 1181 side_field_list(
f89c4ad1
MD
1182 side_field_enum_bitmap("bit_0", &myenum_bitmap, side_elem(side_type_u32(side_attr_list()))),
1183 side_field_enum_bitmap("bit_1", &myenum_bitmap, side_elem(side_type_u32(side_attr_list()))),
1184 side_field_enum_bitmap("bit_2", &myenum_bitmap, side_elem(side_type_u8(side_attr_list()))),
1185 side_field_enum_bitmap("bit_3", &myenum_bitmap, side_elem(side_type_u8(side_attr_list()))),
1186 side_field_enum_bitmap("bit_30", &myenum_bitmap, side_elem(side_type_u32(side_attr_list()))),
1187 side_field_enum_bitmap("bit_31", &myenum_bitmap, side_elem(side_type_u32(side_attr_list()))),
1188 side_field_enum_bitmap("bit_63", &myenum_bitmap, side_elem(side_type_u64(side_attr_list()))),
1189 side_field_enum_bitmap("bits_1+63", &myenum_bitmap, side_elem(side_type_u64(side_attr_list()))),
4cc2880b 1190 side_field_enum_bitmap("byte_bit_2", &myenum_bitmap, side_elem(side_type_byte(side_attr_list()))),
f89c4ad1
MD
1191 side_field_enum_bitmap("bit_159", &myenum_bitmap,
1192 side_elem(side_type_array(side_elem(side_type_u32(side_attr_list())), 5, side_attr_list()))),
1193 side_field_enum_bitmap("bit_159", &myenum_bitmap,
1194 side_elem(side_type_vla(side_elem(side_type_u32(side_attr_list())), side_attr_list()))),
8bdd5c12
MD
1195 side_field_enum_bitmap("bit_2_be", &myenum_bitmap, side_elem(side_type_u32_be(side_attr_list()))),
1196 side_field_enum_bitmap("bit_2_le", &myenum_bitmap, side_elem(side_type_u32_le(side_attr_list()))),
ea32e5fc
MD
1197 ),
1198 side_attr_list()
1199);
1200
1201static
1202void test_enum_bitmap(void)
1203{
af6aa6e1
MD
1204 side_event_cond(my_provider_event_enum_bitmap) {
1205 side_arg_define_vec(myarray,
1206 side_arg_list(
1207 side_arg_u32(0),
1208 side_arg_u32(0),
1209 side_arg_u32(0),
1210 side_arg_u32(0),
1211 side_arg_u32(0x80000000), /* bit 159 */
1212 )
1213 );
1214 side_event_call(my_provider_event_enum_bitmap,
1215 side_arg_list(
bab5d6e4
MD
1216 side_arg_u32(1 << 0),
1217 side_arg_u32(1 << 1),
1218 side_arg_u8(1 << 2),
1219 side_arg_u8(1 << 3),
1220 side_arg_u32(1 << 30),
1221 side_arg_u32(1 << 31),
1222 side_arg_u64(1ULL << 63),
1223 side_arg_u64((1ULL << 1) | (1ULL << 63)),
4cc2880b 1224 side_arg_byte(1 << 2),
bab5d6e4
MD
1225 side_arg_array(&myarray),
1226 side_arg_vla(&myarray),
8bdd5c12
MD
1227#if SIDE_BYTE_ORDER == SIDE_LITTLE_ENDIAN
1228 side_arg_u32(side_bswap_32(1 << 2)),
1229 side_arg_u32(1 << 2),
1230#else
1231 side_arg_u32(0x06000000),
1232 side_arg_u32(side_bswap_32(1 << 2)),
1233#endif
af6aa6e1
MD
1234 )
1235 );
1236 }
ea32e5fc
MD
1237}
1238
7aec0d09
MD
1239static uint8_t blob_fixint[] = { 0x55, 0x44, 0x33, 0x22, 0x11 };
1240
89747802 1241side_static_event_variadic(my_provider_event_blob, "myprovider", "myeventblob", SIDE_LOGLEVEL_DEBUG,
7aec0d09 1242 side_field_list(
f7653b43
MD
1243 side_field_byte("blobfield", side_attr_list()),
1244 side_field_array("arrayblob", side_elem(side_type_byte(side_attr_list())), 3, side_attr_list()),
1245 side_field_array("arrayblobfix", side_elem(side_type_byte(side_attr_list())), SIDE_ARRAY_SIZE(blob_fixint), side_attr_list()),
1246 side_field_vla("vlablobfix", side_elem(side_type_byte(side_attr_list())), side_attr_list()),
7aec0d09
MD
1247 ),
1248 side_attr_list()
1249);
1250
1251static
1252void test_blob(void)
1253{
d5cdb129 1254 side_event_cond(my_provider_event_blob) {
f7653b43 1255 side_arg_define_vec(myarray, side_arg_list(side_arg_byte(1), side_arg_byte(2), side_arg_byte(3)));
199e7aa9
MD
1256 side_arg_dynamic_define_vec(myvla,
1257 side_arg_list(
f7653b43
MD
1258 side_arg_dynamic_byte(0x22, side_attr_list()),
1259 side_arg_dynamic_byte(0x33, side_attr_list()),
8d20e708
MD
1260 ),
1261 side_attr_list()
199e7aa9 1262 );
d5cdb129 1263 side_event_call_variadic(my_provider_event_blob,
7aec0d09 1264 side_arg_list(
f7653b43 1265 side_arg_byte(0x55),
7aec0d09 1266 side_arg_array(&myarray),
f7653b43
MD
1267 side_arg_array_byte(blob_fixint),
1268 side_arg_vla_byte(blob_fixint, SIDE_ARRAY_SIZE(blob_fixint)),
199e7aa9
MD
1269 ),
1270 side_arg_list(
1271 side_arg_dynamic_field("varblobfield",
f7653b43 1272 side_arg_dynamic_byte(0x55, side_attr_list())
199e7aa9 1273 ),
8d20e708
MD
1274 side_arg_dynamic_field("varblobvla", side_arg_dynamic_vla(&myvla)),
1275 ),
1276 side_attr_list()
7aec0d09
MD
1277 );
1278 }
1279}
ea32e5fc 1280
89747802 1281side_static_event_variadic(my_provider_event_format_string,
71aa8975
MD
1282 "myprovider", "myeventformatstring", SIDE_LOGLEVEL_DEBUG,
1283 side_field_list(
1284 side_field_string("fmt", side_attr_list()),
1285 ),
1286 side_attr_list(
1287 side_attr("lang.c.format_string", side_attr_bool(true)),
1288 )
1289);
1290
1291static
1292void test_fmt_string(void)
1293{
71aa8975
MD
1294 side_event_cond(my_provider_event_format_string) {
1295 side_arg_dynamic_define_vec(args,
1296 side_arg_list(
1297 side_arg_dynamic_string("blah", side_attr_list()),
1298 side_arg_dynamic_s32(123, side_attr_list()),
1299 ),
1300 side_attr_list()
1301 );
1302 side_event_call_variadic(my_provider_event_format_string,
1303 side_arg_list(
1304 side_arg_string("This is a formatted string with str: %s int: %d"),
1305 ),
1306 side_arg_list(
1307 side_arg_dynamic_field("arguments", side_arg_dynamic_vla(&args)),
1308 ),
1309 side_attr_list()
1310 );
1311 }
1312}
1313
8bdd5c12
MD
1314side_static_event_variadic(my_provider_event_endian, "myprovider", "myevent_endian", SIDE_LOGLEVEL_DEBUG,
1315 side_field_list(
1316 side_field_u16_le("u16_le", side_attr_list()),
1317 side_field_u32_le("u32_le", side_attr_list()),
1318 side_field_u64_le("u64_le", side_attr_list()),
1319 side_field_s16_le("s16_le", side_attr_list()),
1320 side_field_s32_le("s32_le", side_attr_list()),
1321 side_field_s64_le("s64_le", side_attr_list()),
1322 side_field_u16_be("u16_be", side_attr_list()),
1323 side_field_u32_be("u32_be", side_attr_list()),
1324 side_field_u64_be("u64_be", side_attr_list()),
1325 side_field_s16_be("s16_be", side_attr_list()),
1326 side_field_s32_be("s32_be", side_attr_list()),
1327 side_field_s64_be("s64_be", side_attr_list()),
1328 ),
1329 side_attr_list()
1330);
1331
1332static
1333void test_endian(void)
1334{
1335 side_event_variadic(my_provider_event_endian,
1336 side_arg_list(
1337#if SIDE_BYTE_ORDER == SIDE_LITTLE_ENDIAN
1338 side_arg_u16(1),
1339 side_arg_u32(1),
1340 side_arg_u64(1),
1341 side_arg_s16(1),
1342 side_arg_s32(1),
1343 side_arg_s64(1),
1344 side_arg_u16(side_bswap_16(1)),
1345 side_arg_u32(side_bswap_32(1)),
1346 side_arg_u64(side_bswap_64(1)),
1347 side_arg_s16(side_bswap_16(1)),
1348 side_arg_s32(side_bswap_32(1)),
1349 side_arg_s64(side_bswap_64(1)),
1350#else
1351 side_arg_u16(side_bswap_16(1)),
1352 side_arg_u32(side_bswap_32(1)),
1353 side_arg_u64(side_bswap_64(1)),
1354 side_arg_s16(side_bswap_16(1)),
1355 side_arg_s32(side_bswap_32(1)),
1356 side_arg_s64(side_bswap_64(1)),
1357 side_arg_u16(1),
1358 side_arg_u32(1),
1359 side_arg_u64(1),
1360 side_arg_s16(1),
1361 side_arg_s32(1),
1362 side_arg_s64(1),
1363#endif
1364 ),
1365 side_arg_list(
1366#if SIDE_BYTE_ORDER == SIDE_LITTLE_ENDIAN
1367 side_arg_dynamic_field("u16_le", side_arg_dynamic_u16_le(1, side_attr_list())),
1368 side_arg_dynamic_field("u32_le", side_arg_dynamic_u32_le(1, side_attr_list())),
1369 side_arg_dynamic_field("u64_le", side_arg_dynamic_u64_le(1, side_attr_list())),
1370 side_arg_dynamic_field("s16_le", side_arg_dynamic_s16_le(1, side_attr_list())),
1371 side_arg_dynamic_field("s32_le", side_arg_dynamic_s32_le(1, side_attr_list())),
1372 side_arg_dynamic_field("s64_le", side_arg_dynamic_s64_le(1, side_attr_list())),
1373 side_arg_dynamic_field("u16_be", side_arg_dynamic_u16_be(side_bswap_16(1), side_attr_list())),
1374 side_arg_dynamic_field("u32_be", side_arg_dynamic_u32_be(side_bswap_32(1), side_attr_list())),
1375 side_arg_dynamic_field("u64_be", side_arg_dynamic_u64_be(side_bswap_64(1), side_attr_list())),
1376 side_arg_dynamic_field("s16_be", side_arg_dynamic_s16_be(side_bswap_16(1), side_attr_list())),
1377 side_arg_dynamic_field("s32_be", side_arg_dynamic_s32_be(side_bswap_32(1), side_attr_list())),
1378 side_arg_dynamic_field("s64_be", side_arg_dynamic_s64_be(side_bswap_64(1), side_attr_list())),
1379#else
1380 side_arg_dynamic_field("u16_le", side_arg_dynamic_u16_le(side_bswap_16(1), side_attr_list())),
1381 side_arg_dynamic_field("u32_le", side_arg_dynamic_u32_le(side_bswap_32(1), side_attr_list())),
1382 side_arg_dynamic_field("u64_le", side_arg_dynamic_u64_le(side_bswap_64(1), side_attr_list())),
1383 side_arg_dynamic_field("s16_le", side_arg_dynamic_s16_le(side_bswap_16(1), side_attr_list())),
1384 side_arg_dynamic_field("s32_le", side_arg_dynamic_s32_le(side_bswap_32(1), side_attr_list())),
1385 side_arg_dynamic_field("s64_le", side_arg_dynamic_s64_le(side_bswap_64(1), side_attr_list())),
1386 side_arg_dynamic_field("u16_be", side_arg_dynamic_u16_be(1, side_attr_list())),
1387 side_arg_dynamic_field("u32_be", side_arg_dynamic_u32_be(1, side_attr_list())),
1388 side_arg_dynamic_field("u64_be", side_arg_dynamic_u64_be(1, side_attr_list())),
1389 side_arg_dynamic_field("s16_be", side_arg_dynamic_s16_be(1, side_attr_list())),
1390 side_arg_dynamic_field("s32_be", side_arg_dynamic_s32_be(1, side_attr_list())),
1391 side_arg_dynamic_field("s64_be", side_arg_dynamic_s64_be(1, side_attr_list())),
1392#endif
1393 ),
1394 side_attr_list()
1395 );
1396}
1397
f611d0c3
MD
1398int main()
1399{
1400 test_fields();
89747802
MD
1401 test_event_hidden();
1402 test_event_export();
c7a14585 1403 test_struct_literal();
f611d0c3
MD
1404 test_struct();
1405 test_array();
1406 test_vla();
1407 test_vla_visitor();
cdd6e858 1408 test_vla_visitor_2d();
ba845af5 1409 test_array_fixint();
1533629f 1410 test_vla_fixint();
a2e2357e
MD
1411 test_dynamic_basic_type();
1412 test_dynamic_vla();
465e5e7e 1413 test_dynamic_null();
c208889e
MD
1414 test_dynamic_struct();
1415 test_dynamic_nested_struct();
1416 test_dynamic_vla_struct();
1417 test_dynamic_struct_vla();
948e3e72 1418 test_dynamic_nested_vla();
19fa6aa2 1419 test_variadic();
41c4d119 1420 test_static_variadic();
4f40d951
MD
1421 test_bool();
1422 test_dynamic_bool();
8ceca0cd 1423 test_dynamic_vla_with_visitor();
2b359235 1424 test_dynamic_struct_with_visitor();
65010f43 1425 test_event_user_attribute();
a848763d 1426 test_field_user_attribute();
808bd9bf
MD
1427 test_variadic_attr();
1428 test_variadic_vla_attr();
1429 test_variadic_struct_attr();
fb25b355
MD
1430 test_float();
1431 test_variadic_float();
79f677ba 1432 test_enum();
ea32e5fc 1433 test_enum_bitmap();
7aec0d09 1434 test_blob();
71aa8975 1435 test_fmt_string();
8bdd5c12 1436 test_endian();
f611d0c3
MD
1437 return 0;
1438}
This page took 0.104862 seconds and 4 git commands to generate.