Implement 128-bit integer support
[libside.git] / tests / unit / 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>
7a1cb105 11#include <stddef.h>
f611d0c3 12
67337c4a 13#include <side/trace.h>
f611d0c3
MD
14
15/* User code example */
16
67337c4a
MD
17side_static_event(my_provider_event, "myprovider", "myevent", SIDE_LOGLEVEL_DEBUG,
18 side_field_list(
a82ffcff
MD
19 side_field_u32("abc"),
20 side_field_s64("def"),
21 side_field_pointer("ptr"),
67337c4a
MD
22 side_field_dynamic("dynamic"),
23 side_field_dynamic("dynamic_pointer"),
a82ffcff
MD
24 side_field_null("null"),
25 )
f611d0c3
MD
26);
27
28static
29void test_fields(void)
30{
31 uint32_t uw = 42;
32 int64_t sdw = -500;
33
67337c4a
MD
34 side_event(my_provider_event,
35 side_arg_list(
36 side_arg_u32(uw),
37 side_arg_s64(sdw),
38 side_arg_pointer((void *) 0x1),
a82ffcff
MD
39 side_arg_dynamic_string("zzz"),
40 side_arg_dynamic_pointer((void *) 0x1),
67337c4a 41 side_arg_null(),
f5e650d7
MD
42 )
43 );
f611d0c3
MD
44}
45
67337c4a
MD
46side_hidden_event(my_provider_event_hidden, "myprovider", "myeventhidden", SIDE_LOGLEVEL_DEBUG,
47 side_field_list(
a82ffcff
MD
48 side_field_u32("abc"),
49 )
89747802
MD
50);
51
52static
53void test_event_hidden(void)
54{
67337c4a 55 side_event(my_provider_event_hidden, side_arg_list(side_arg_u32(2)));
89747802
MD
56}
57
67337c4a 58side_declare_event(my_provider_event_export);
89747802 59
67337c4a
MD
60side_export_event(my_provider_event_export, "myprovider", "myeventexport", SIDE_LOGLEVEL_DEBUG,
61 side_field_list(
a82ffcff
MD
62 side_field_u32("abc"),
63 )
89747802
MD
64);
65
66static
67void test_event_export(void)
68{
67337c4a 69 side_event(my_provider_event_export, side_arg_list(side_arg_u32(2)));
89747802
MD
70}
71
67337c4a
MD
72side_static_event(my_provider_event_struct_literal, "myprovider", "myeventstructliteral", SIDE_LOGLEVEL_DEBUG,
73 side_field_list(
74 side_field_struct("structliteral",
75 side_struct_literal(
76 side_field_list(
a82ffcff
MD
77 side_field_u32("x"),
78 side_field_s64("y"),
79 )
c7a14585 80 )
f611d0c3 81 ),
a82ffcff
MD
82 side_field_u8("z"),
83 )
f611d0c3
MD
84);
85
c7a14585
MD
86static
87void test_struct_literal(void)
88{
67337c4a
MD
89 side_event_cond(my_provider_event_struct_literal) {
90 side_arg_define_vec(mystruct, side_arg_list(side_arg_u32(21), side_arg_s64(22)));
91 side_event_call(my_provider_event_struct_literal, side_arg_list(side_arg_struct(&mystruct), side_arg_u8(55)));
c7a14585
MD
92 }
93}
94
67337c4a
MD
95static side_define_struct(mystructdef,
96 side_field_list(
a82ffcff
MD
97 side_field_u32("x"),
98 side_field_s64("y"),
99 )
c7a14585
MD
100);
101
67337c4a
MD
102side_static_event(my_provider_event_struct, "myprovider", "myeventstruct", SIDE_LOGLEVEL_DEBUG,
103 side_field_list(
104 side_field_struct("struct", &mystructdef),
a82ffcff
MD
105 side_field_u8("z"),
106 )
c7a14585
MD
107);
108
f611d0c3
MD
109static
110void test_struct(void)
111{
67337c4a
MD
112 side_event_cond(my_provider_event_struct) {
113 side_arg_define_vec(mystruct, side_arg_list(side_arg_u32(21), side_arg_s64(22)));
114 side_event_call(my_provider_event_struct, side_arg_list(side_arg_struct(&mystruct), side_arg_u8(55)));
f611d0c3
MD
115 }
116}
117
67337c4a
MD
118side_static_event(my_provider_event_array, "myprovider", "myarray", SIDE_LOGLEVEL_DEBUG,
119 side_field_list(
a82ffcff
MD
120 side_field_array("arr", side_elem(side_type_u32()), 3),
121 side_field_s64("v"),
122 )
f611d0c3
MD
123);
124
125static
126void test_array(void)
127{
67337c4a
MD
128 side_event_cond(my_provider_event_array) {
129 side_arg_define_vec(myarray, side_arg_list(side_arg_u32(1), side_arg_u32(2), side_arg_u32(3)));
130 side_event_call(my_provider_event_array, side_arg_list(side_arg_array(&myarray), side_arg_s64(42)));
f611d0c3
MD
131 }
132}
133
67337c4a
MD
134side_static_event(my_provider_event_vla, "myprovider", "myvla", SIDE_LOGLEVEL_DEBUG,
135 side_field_list(
a82ffcff
MD
136 side_field_vla("vla", side_elem(side_type_u32())),
137 side_field_s64("v"),
138 )
f611d0c3
MD
139);
140
141static
142void test_vla(void)
143{
67337c4a
MD
144 side_event_cond(my_provider_event_vla) {
145 side_arg_define_vec(myvla, side_arg_list(side_arg_u32(1), side_arg_u32(2), side_arg_u32(3)));
146 side_event_call(my_provider_event_vla, side_arg_list(side_arg_vla(&myvla), side_arg_s64(42)));
f611d0c3
MD
147 }
148}
149
cdd6e858
MD
150/* 1D array visitor */
151
f611d0c3
MD
152struct app_visitor_ctx {
153 const uint32_t *ptr;
352a4b77 154 uint32_t length;
f611d0c3
MD
155};
156
352a4b77 157static
67337c4a 158enum side_visitor_status test_visitor(const struct side_tracer_visitor_ctx *tracer_ctx, void *_ctx)
f611d0c3
MD
159{
160 struct app_visitor_ctx *ctx = (struct app_visitor_ctx *) _ctx;
352a4b77
MD
161 uint32_t length = ctx->length, i;
162
163 for (i = 0; i < length; i++) {
67337c4a 164 const struct side_arg elem = side_arg_u32(ctx->ptr[i]);
ffb5c809 165
67337c4a
MD
166 if (tracer_ctx->write_elem(tracer_ctx, &elem) != SIDE_VISITOR_STATUS_OK)
167 return SIDE_VISITOR_STATUS_ERROR;
352a4b77 168 }
67337c4a 169 return SIDE_VISITOR_STATUS_OK;
f611d0c3
MD
170}
171
172static uint32_t testarray[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
173
67337c4a
MD
174side_static_event(my_provider_event_vla_visitor, "myprovider", "myvlavisit", SIDE_LOGLEVEL_DEBUG,
175 side_field_list(
a82ffcff
MD
176 side_field_vla_visitor("vlavisit", side_elem(side_type_u32()), test_visitor),
177 side_field_s64("v"),
178 )
f611d0c3
MD
179);
180
181static
182void test_vla_visitor(void)
183{
67337c4a 184 side_event_cond(my_provider_event_vla_visitor) {
f611d0c3
MD
185 struct app_visitor_ctx ctx = {
186 .ptr = testarray,
67337c4a 187 .length = SIDE_ARRAY_SIZE(testarray),
f611d0c3 188 };
67337c4a 189 side_event_call(my_provider_event_vla_visitor, side_arg_list(side_arg_vla_visitor(&ctx), side_arg_s64(42)));
f611d0c3
MD
190 }
191}
192
cdd6e858
MD
193/* 2D array visitor */
194
195struct app_visitor_2d_inner_ctx {
196 const uint32_t *ptr;
197 uint32_t length;
198};
199
200static
67337c4a 201enum side_visitor_status test_inner_visitor(const struct side_tracer_visitor_ctx *tracer_ctx, void *_ctx)
cdd6e858
MD
202{
203 struct app_visitor_2d_inner_ctx *ctx = (struct app_visitor_2d_inner_ctx *) _ctx;
204 uint32_t length = ctx->length, i;
205
206 for (i = 0; i < length; i++) {
67337c4a 207 const struct side_arg elem = side_arg_u32(ctx->ptr[i]);
ffb5c809 208
67337c4a
MD
209 if (tracer_ctx->write_elem(tracer_ctx, &elem) != SIDE_VISITOR_STATUS_OK)
210 return SIDE_VISITOR_STATUS_ERROR;
cdd6e858 211 }
67337c4a 212 return SIDE_VISITOR_STATUS_OK;
cdd6e858
MD
213}
214
215struct app_visitor_2d_outer_ctx {
216 const uint32_t (*ptr)[2];
217 uint32_t length;
218};
219
220static
67337c4a 221enum side_visitor_status test_outer_visitor(const struct side_tracer_visitor_ctx *tracer_ctx, void *_ctx)
cdd6e858
MD
222{
223 struct app_visitor_2d_outer_ctx *ctx = (struct app_visitor_2d_outer_ctx *) _ctx;
224 uint32_t length = ctx->length, i;
225
226 for (i = 0; i < length; i++) {
227 struct app_visitor_2d_inner_ctx inner_ctx = {
228 .ptr = ctx->ptr[i],
229 .length = 2,
230 };
67337c4a
MD
231 const struct side_arg elem = side_arg_vla_visitor(&inner_ctx);
232 if (tracer_ctx->write_elem(tracer_ctx, &elem) != SIDE_VISITOR_STATUS_OK)
233 return SIDE_VISITOR_STATUS_ERROR;
cdd6e858 234 }
67337c4a 235 return SIDE_VISITOR_STATUS_OK;
cdd6e858
MD
236}
237
238static uint32_t testarray2d[][2] = {
239 { 1, 2 },
240 { 33, 44 },
241 { 55, 66 },
242};
243
67337c4a
MD
244side_static_event(my_provider_event_vla_visitor2d, "myprovider", "myvlavisit2d", SIDE_LOGLEVEL_DEBUG,
245 side_field_list(
246 side_field_vla_visitor("vlavisit2d",
247 side_elem(
248 side_type_vla_visitor(
a82ffcff
MD
249 side_elem(side_type_u32()),
250 test_inner_visitor
251 )
252 ), test_outer_visitor),
253 side_field_s64("v"),
254 )
cdd6e858
MD
255);
256
257static
258void test_vla_visitor_2d(void)
259{
67337c4a 260 side_event_cond(my_provider_event_vla_visitor2d) {
cdd6e858
MD
261 struct app_visitor_2d_outer_ctx ctx = {
262 .ptr = testarray2d,
67337c4a 263 .length = SIDE_ARRAY_SIZE(testarray2d),
cdd6e858 264 };
67337c4a 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
67337c4a
MD
269side_static_event(my_provider_event_dynamic_basic,
270 "myprovider", "mydynamicbasic", SIDE_LOGLEVEL_DEBUG,
271 side_field_list(
272 side_field_dynamic("dynamic"),
a82ffcff 273 )
a2e2357e
MD
274);
275
276static
277void test_dynamic_basic_type(void)
278{
67337c4a 279 side_event(my_provider_event_dynamic_basic,
a82ffcff 280 side_arg_list(side_arg_dynamic_s16(-33)));
a2e2357e
MD
281}
282
67337c4a
MD
283side_static_event(my_provider_event_dynamic_vla,
284 "myprovider", "mydynamicvla", SIDE_LOGLEVEL_DEBUG,
285 side_field_list(
286 side_field_dynamic("dynamic"),
a82ffcff 287 )
a2e2357e
MD
288);
289
290static
291void test_dynamic_vla(void)
292{
67337c4a
MD
293 side_arg_dynamic_define_vec(myvla,
294 side_arg_list(
a82ffcff
MD
295 side_arg_dynamic_u32(1),
296 side_arg_dynamic_u32(2),
297 side_arg_dynamic_u32(3),
298 )
df075fa5 299 );
67337c4a
MD
300 side_event(my_provider_event_dynamic_vla,
301 side_arg_list(side_arg_dynamic_vla(&myvla)));
a2e2357e
MD
302}
303
67337c4a
MD
304side_static_event(my_provider_event_dynamic_null,
305 "myprovider", "mydynamicnull", SIDE_LOGLEVEL_DEBUG,
306 side_field_list(
307 side_field_dynamic("dynamic"),
a82ffcff 308 )
465e5e7e
MD
309);
310
311static
312void test_dynamic_null(void)
313{
67337c4a 314 side_event(my_provider_event_dynamic_null,
a82ffcff 315 side_arg_list(side_arg_dynamic_null()));
465e5e7e
MD
316}
317
67337c4a
MD
318side_static_event(my_provider_event_dynamic_struct,
319 "myprovider", "mydynamicstruct", SIDE_LOGLEVEL_DEBUG,
320 side_field_list(
321 side_field_dynamic("dynamic"),
a82ffcff 322 )
465e5e7e
MD
323);
324
325static
c208889e 326void test_dynamic_struct(void)
465e5e7e 327{
67337c4a
MD
328 side_arg_dynamic_define_struct(mystruct,
329 side_arg_list(
a82ffcff
MD
330 side_arg_dynamic_field("a", side_arg_dynamic_u32(43)),
331 side_arg_dynamic_field("b", side_arg_dynamic_string("zzz")),
332 side_arg_dynamic_field("c", side_arg_dynamic_null()),
333 )
465e5e7e
MD
334 );
335
67337c4a
MD
336 side_event(my_provider_event_dynamic_struct,
337 side_arg_list(side_arg_dynamic_struct(&mystruct)));
465e5e7e
MD
338}
339
67337c4a
MD
340side_static_event(my_provider_event_dynamic_nested_struct,
341 "myprovider", "mydynamicnestedstruct", SIDE_LOGLEVEL_DEBUG,
342 side_field_list(
343 side_field_dynamic("dynamic"),
a82ffcff 344 )
3222d397
MD
345);
346
347static
c208889e 348void test_dynamic_nested_struct(void)
3222d397 349{
67337c4a
MD
350 side_arg_dynamic_define_struct(nested,
351 side_arg_list(
a82ffcff
MD
352 side_arg_dynamic_field("a", side_arg_dynamic_u32(43)),
353 side_arg_dynamic_field("b", side_arg_dynamic_u8(55)),
354 )
3222d397 355 );
67337c4a
MD
356 side_arg_dynamic_define_struct(nested2,
357 side_arg_list(
a82ffcff
MD
358 side_arg_dynamic_field("aa", side_arg_dynamic_u64(128)),
359 side_arg_dynamic_field("bb", side_arg_dynamic_u16(1)),
360 )
3222d397 361 );
67337c4a
MD
362 side_arg_dynamic_define_struct(mystruct,
363 side_arg_list(
364 side_arg_dynamic_field("nested", side_arg_dynamic_struct(&nested)),
365 side_arg_dynamic_field("nested2", side_arg_dynamic_struct(&nested2)),
a82ffcff 366 )
3222d397 367 );
67337c4a
MD
368 side_event(my_provider_event_dynamic_nested_struct,
369 side_arg_list(side_arg_dynamic_struct(&mystruct)));
3222d397
MD
370}
371
67337c4a
MD
372side_static_event(my_provider_event_dynamic_vla_struct,
373 "myprovider", "mydynamicvlastruct", SIDE_LOGLEVEL_DEBUG,
374 side_field_list(
375 side_field_dynamic("dynamic"),
a82ffcff 376 )
7ce1b78f
MD
377);
378
379static
c208889e 380void test_dynamic_vla_struct(void)
7ce1b78f 381{
67337c4a
MD
382 side_arg_dynamic_define_struct(nested,
383 side_arg_list(
a82ffcff
MD
384 side_arg_dynamic_field("a", side_arg_dynamic_u32(43)),
385 side_arg_dynamic_field("b", side_arg_dynamic_u8(55)),
386 )
7ce1b78f 387 );
67337c4a
MD
388 side_arg_dynamic_define_vec(myvla,
389 side_arg_list(
390 side_arg_dynamic_struct(&nested),
391 side_arg_dynamic_struct(&nested),
392 side_arg_dynamic_struct(&nested),
393 side_arg_dynamic_struct(&nested),
a82ffcff 394 )
7ce1b78f 395 );
67337c4a
MD
396 side_event(my_provider_event_dynamic_vla_struct,
397 side_arg_list(side_arg_dynamic_vla(&myvla)));
7ce1b78f
MD
398}
399
67337c4a
MD
400side_static_event(my_provider_event_dynamic_struct_vla,
401 "myprovider", "mydynamicstructvla", SIDE_LOGLEVEL_DEBUG,
402 side_field_list(
403 side_field_dynamic("dynamic"),
a82ffcff 404 )
980bfdc4
MD
405);
406
407static
c208889e 408void test_dynamic_struct_vla(void)
980bfdc4 409{
67337c4a
MD
410 side_arg_dynamic_define_vec(myvla,
411 side_arg_list(
a82ffcff
MD
412 side_arg_dynamic_u32(1),
413 side_arg_dynamic_u32(2),
414 side_arg_dynamic_u32(3),
415 )
df075fa5 416 );
67337c4a
MD
417 side_arg_dynamic_define_vec(myvla2,
418 side_arg_list(
a82ffcff
MD
419 side_arg_dynamic_u32(4),
420 side_arg_dynamic_u64(5),
421 side_arg_dynamic_u32(6),
422 )
df075fa5 423 );
67337c4a
MD
424 side_arg_dynamic_define_struct(mystruct,
425 side_arg_list(
426 side_arg_dynamic_field("a", side_arg_dynamic_vla(&myvla)),
427 side_arg_dynamic_field("b", side_arg_dynamic_vla(&myvla2)),
a82ffcff 428 )
980bfdc4 429 );
67337c4a
MD
430 side_event(my_provider_event_dynamic_struct_vla,
431 side_arg_list(side_arg_dynamic_struct(&mystruct)));
980bfdc4
MD
432}
433
67337c4a
MD
434side_static_event(my_provider_event_dynamic_nested_vla,
435 "myprovider", "mydynamicnestedvla", SIDE_LOGLEVEL_DEBUG,
436 side_field_list(
437 side_field_dynamic("dynamic"),
a82ffcff 438 )
948e3e72
MD
439);
440
441static
442void test_dynamic_nested_vla(void)
443{
67337c4a
MD
444 side_arg_dynamic_define_vec(nestedvla,
445 side_arg_list(
a82ffcff
MD
446 side_arg_dynamic_u32(1),
447 side_arg_dynamic_u16(2),
448 side_arg_dynamic_u32(3),
449 )
948e3e72 450 );
67337c4a
MD
451 side_arg_dynamic_define_vec(nestedvla2,
452 side_arg_list(
a82ffcff
MD
453 side_arg_dynamic_u8(4),
454 side_arg_dynamic_u32(5),
455 side_arg_dynamic_u32(6),
456 )
948e3e72 457 );
67337c4a
MD
458 side_arg_dynamic_define_vec(myvla,
459 side_arg_list(
460 side_arg_dynamic_vla(&nestedvla),
461 side_arg_dynamic_vla(&nestedvla2),
a82ffcff 462 )
948e3e72 463 );
67337c4a
MD
464 side_event(my_provider_event_dynamic_nested_vla,
465 side_arg_list(side_arg_dynamic_vla(&myvla)));
948e3e72
MD
466}
467
67337c4a
MD
468side_static_event_variadic(my_provider_event_variadic,
469 "myprovider", "myvariadicevent", SIDE_LOGLEVEL_DEBUG,
a82ffcff 470 side_field_list()
19fa6aa2
MD
471);
472
473static
474void test_variadic(void)
475{
67337c4a
MD
476 side_event_variadic(my_provider_event_variadic,
477 side_arg_list(),
478 side_arg_list(
a82ffcff
MD
479 side_arg_dynamic_field("a", side_arg_dynamic_u32(55)),
480 side_arg_dynamic_field("b", side_arg_dynamic_s8(-4)),
481 )
19fa6aa2
MD
482 );
483}
484
67337c4a
MD
485side_static_event_variadic(my_provider_event_static_variadic,
486 "myprovider", "mystaticvariadicevent", SIDE_LOGLEVEL_DEBUG,
487 side_field_list(
a82ffcff
MD
488 side_field_u32("abc"),
489 side_field_u16("def"),
490 )
41c4d119
MD
491);
492
493static
494void test_static_variadic(void)
495{
67337c4a
MD
496 side_event_variadic(my_provider_event_static_variadic,
497 side_arg_list(
498 side_arg_u32(1),
499 side_arg_u16(2),
41c4d119 500 ),
67337c4a 501 side_arg_list(
a82ffcff
MD
502 side_arg_dynamic_field("a", side_arg_dynamic_u32(55)),
503 side_arg_dynamic_field("b", side_arg_dynamic_s8(-4)),
504 )
41c4d119
MD
505 );
506}
507
67337c4a
MD
508side_static_event(my_provider_event_bool, "myprovider", "myeventbool", SIDE_LOGLEVEL_DEBUG,
509 side_field_list(
a82ffcff
MD
510 side_field_bool("a_false"),
511 side_field_bool("b_true"),
512 side_field_bool("c_true"),
513 side_field_bool("d_true"),
514 side_field_bool("e_true"),
515 side_field_bool("f_false"),
516 side_field_bool("g_true"),
517 )
4f40d951
MD
518);
519
520static
521void test_bool(void)
522{
523 uint32_t a = 0;
524 uint32_t b = 1;
525 uint64_t c = 0x12345678;
526 int16_t d = -32768;
527 bool e = true;
528 bool f = false;
529 uint32_t g = 256;
530
67337c4a
MD
531 side_event(my_provider_event_bool,
532 side_arg_list(
533 side_arg_bool(a),
534 side_arg_bool(b),
535 side_arg_bool(c),
536 side_arg_bool(d),
537 side_arg_bool(e),
538 side_arg_bool(f),
539 side_arg_bool(g),
4f40d951
MD
540 )
541 );
542}
543
67337c4a
MD
544side_static_event_variadic(my_provider_event_dynamic_bool,
545 "myprovider", "mydynamicbool", SIDE_LOGLEVEL_DEBUG,
a82ffcff 546 side_field_list()
4f40d951
MD
547);
548
549static
550void test_dynamic_bool(void)
551{
67337c4a
MD
552 side_event_variadic(my_provider_event_dynamic_bool,
553 side_arg_list(),
554 side_arg_list(
a82ffcff
MD
555 side_arg_dynamic_field("a_true", side_arg_dynamic_bool(55)),
556 side_arg_dynamic_field("b_true", side_arg_dynamic_bool(-4)),
557 side_arg_dynamic_field("c_false", side_arg_dynamic_bool(0)),
558 side_arg_dynamic_field("d_true", side_arg_dynamic_bool(256)),
559 )
4f40d951
MD
560 );
561}
562
67337c4a
MD
563side_static_event(my_provider_event_dynamic_vla_visitor,
564 "myprovider", "mydynamicvlavisitor", SIDE_LOGLEVEL_DEBUG,
565 side_field_list(
566 side_field_dynamic("dynamic"),
a82ffcff 567 )
8ceca0cd
MD
568);
569
570struct app_dynamic_vla_visitor_ctx {
571 const uint32_t *ptr;
572 uint32_t length;
573};
574
575static
67337c4a 576enum side_visitor_status test_dynamic_vla_visitor(const struct side_tracer_visitor_ctx *tracer_ctx, void *_ctx)
8ceca0cd
MD
577{
578 struct app_dynamic_vla_visitor_ctx *ctx = (struct app_dynamic_vla_visitor_ctx *) _ctx;
579 uint32_t length = ctx->length, i;
580
581 for (i = 0; i < length; i++) {
a82ffcff 582 const struct side_arg elem = side_arg_dynamic_u32(ctx->ptr[i]);
67337c4a
MD
583 if (tracer_ctx->write_elem(tracer_ctx, &elem) != SIDE_VISITOR_STATUS_OK)
584 return SIDE_VISITOR_STATUS_ERROR;
8ceca0cd 585 }
67337c4a 586 return SIDE_VISITOR_STATUS_OK;
8ceca0cd
MD
587}
588
589static uint32_t testarray_dynamic_vla[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
590
591static
592void test_dynamic_vla_with_visitor(void)
593{
67337c4a 594 side_event_cond(my_provider_event_dynamic_vla_visitor) {
8ceca0cd
MD
595 struct app_dynamic_vla_visitor_ctx ctx = {
596 .ptr = testarray_dynamic_vla,
67337c4a 597 .length = SIDE_ARRAY_SIZE(testarray_dynamic_vla),
8ceca0cd 598 };
67337c4a
MD
599 side_event_call(my_provider_event_dynamic_vla_visitor,
600 side_arg_list(
a82ffcff 601 side_arg_dynamic_vla_visitor(test_dynamic_vla_visitor, &ctx)
8ceca0cd
MD
602 )
603 );
604 }
605}
606
67337c4a
MD
607side_static_event(my_provider_event_dynamic_struct_visitor,
608 "myprovider", "mydynamicstructvisitor", SIDE_LOGLEVEL_DEBUG,
609 side_field_list(
610 side_field_dynamic("dynamic"),
a82ffcff 611 )
2b359235
MD
612);
613
614struct struct_visitor_pair {
615 const char *name;
616 uint32_t value;
617};
618
619struct app_dynamic_struct_visitor_ctx {
620 const struct struct_visitor_pair *ptr;
621 uint32_t length;
622};
623
624static
67337c4a 625enum side_visitor_status test_dynamic_struct_visitor(const struct side_tracer_dynamic_struct_visitor_ctx *tracer_ctx, void *_ctx)
2b359235
MD
626{
627 struct app_dynamic_struct_visitor_ctx *ctx = (struct app_dynamic_struct_visitor_ctx *) _ctx;
628 uint32_t length = ctx->length, i;
629
630 for (i = 0; i < length; i++) {
f13253cb
MD
631 struct side_arg_dynamic_field dynamic_field =
632 side_arg_dynamic_field(ctx->ptr[i].name,
633 side_arg_dynamic_u32(ctx->ptr[i].value));
67337c4a
MD
634 if (tracer_ctx->write_field(tracer_ctx, &dynamic_field) != SIDE_VISITOR_STATUS_OK)
635 return SIDE_VISITOR_STATUS_ERROR;
2b359235 636 }
67337c4a 637 return SIDE_VISITOR_STATUS_OK;
2b359235
MD
638}
639
640static struct struct_visitor_pair testarray_dynamic_struct[] = {
641 { "a", 1, },
642 { "b", 2, },
643 { "c", 3, },
644 { "d", 4, },
645};
646
647static
648void test_dynamic_struct_with_visitor(void)
649{
67337c4a 650 side_event_cond(my_provider_event_dynamic_struct_visitor) {
2b359235
MD
651 struct app_dynamic_struct_visitor_ctx ctx = {
652 .ptr = testarray_dynamic_struct,
67337c4a 653 .length = SIDE_ARRAY_SIZE(testarray_dynamic_struct),
2b359235 654 };
67337c4a
MD
655 side_event_call(my_provider_event_dynamic_struct_visitor,
656 side_arg_list(
a82ffcff 657 side_arg_dynamic_struct_visitor(test_dynamic_struct_visitor, &ctx)
2b359235
MD
658 )
659 );
660 }
661}
662
67337c4a
MD
663side_static_event(my_provider_event_user_attribute, "myprovider", "myevent_user_attribute", SIDE_LOGLEVEL_DEBUG,
664 side_field_list(
a82ffcff
MD
665 side_field_u32("abc"),
666 side_field_s64("def"),
399c836b 667 ),
67337c4a
MD
668 side_attr_list(
669 side_attr("user_attribute_a", side_attr_string("val1")),
670 side_attr("user_attribute_b", side_attr_string("val2")),
65010f43
MD
671 )
672);
673
674static
675void test_event_user_attribute(void)
676{
67337c4a 677 side_event(my_provider_event_user_attribute, side_arg_list(side_arg_u32(1), side_arg_s64(2)));
65010f43
MD
678}
679
67337c4a
MD
680side_static_event(my_provider_field_user_attribute, "myprovider", "myevent_field_attribute", SIDE_LOGLEVEL_DEBUG,
681 side_field_list(
682 side_field_u32("abc",
683 side_attr_list(
684 side_attr("user_attribute_a", side_attr_string("val1")),
685 side_attr("user_attribute_b", side_attr_u32(2)),
a848763d
MD
686 )
687 ),
67337c4a
MD
688 side_field_s64("def",
689 side_attr_list(
690 side_attr("user_attribute_c", side_attr_string("val3")),
691 side_attr("user_attribute_d", side_attr_s64(-5)),
a848763d
MD
692 )
693 ),
a82ffcff 694 )
a848763d
MD
695);
696
697static
698void test_field_user_attribute(void)
699{
67337c4a 700 side_event(my_provider_field_user_attribute, side_arg_list(side_arg_u32(1), side_arg_s64(2)));
a848763d
MD
701}
702
67337c4a
MD
703side_static_event_variadic(my_provider_event_variadic_attr,
704 "myprovider", "myvariadiceventattr", SIDE_LOGLEVEL_DEBUG,
a82ffcff 705 side_field_list()
808bd9bf
MD
706);
707
708static
709void test_variadic_attr(void)
710{
67337c4a
MD
711 side_event_variadic(my_provider_event_variadic_attr,
712 side_arg_list(),
713 side_arg_list(
714 side_arg_dynamic_field("a",
715 side_arg_dynamic_u32(55,
716 side_attr_list(
717 side_attr("user_attribute_c", side_attr_string("valX")),
718 side_attr("user_attribute_d", side_attr_u8(55)),
808bd9bf
MD
719 )
720 )
721 ),
67337c4a
MD
722 side_arg_dynamic_field("b",
723 side_arg_dynamic_s8(-4,
724 side_attr_list(
725 side_attr("X", side_attr_u8(1)),
726 side_attr("Y", side_attr_s8(2)),
808bd9bf
MD
727 )
728 )
729 ),
a82ffcff 730 )
808bd9bf
MD
731 );
732}
733
67337c4a
MD
734side_static_event_variadic(my_provider_event_variadic_vla_attr,
735 "myprovider", "myvariadiceventvlaattr", SIDE_LOGLEVEL_DEBUG,
a82ffcff 736 side_field_list()
808bd9bf
MD
737);
738
739static
740void test_variadic_vla_attr(void)
741{
67337c4a
MD
742 side_arg_dynamic_define_vec(myvla,
743 side_arg_list(
744 side_arg_dynamic_u32(1,
745 side_attr_list(
746 side_attr("Z", side_attr_u8(0)),
747 side_attr("A", side_attr_u8(123)),
808bd9bf
MD
748 )
749 ),
a82ffcff
MD
750 side_arg_dynamic_u32(2),
751 side_arg_dynamic_u32(3),
8d20e708 752 ),
67337c4a
MD
753 side_attr_list(
754 side_attr("X", side_attr_u8(1)),
755 side_attr("Y", side_attr_u8(2)),
808bd9bf
MD
756 )
757 );
67337c4a
MD
758 side_event_variadic(my_provider_event_variadic_vla_attr,
759 side_arg_list(),
760 side_arg_list(
761 side_arg_dynamic_field("a", side_arg_dynamic_vla(&myvla)),
a82ffcff 762 )
808bd9bf
MD
763 );
764}
765
67337c4a
MD
766side_static_event_variadic(my_provider_event_variadic_struct_attr,
767 "myprovider", "myvariadiceventstructattr", SIDE_LOGLEVEL_DEBUG,
a82ffcff 768 side_field_list()
808bd9bf
MD
769);
770
771static
772void test_variadic_struct_attr(void)
773{
67337c4a
MD
774 side_event_cond(my_provider_event_variadic_struct_attr) {
775 side_arg_dynamic_define_struct(mystruct,
776 side_arg_list(
777 side_arg_dynamic_field("a",
778 side_arg_dynamic_u32(43,
779 side_attr_list(
780 side_attr("A", side_attr_bool(true)),
808bd9bf
MD
781 )
782 )
783 ),
a82ffcff 784 side_arg_dynamic_field("b", side_arg_dynamic_u8(55)),
8d20e708 785 ),
67337c4a
MD
786 side_attr_list(
787 side_attr("X", side_attr_u8(1)),
788 side_attr("Y", side_attr_u8(2)),
808bd9bf
MD
789 )
790 );
67337c4a
MD
791 side_event_call_variadic(my_provider_event_variadic_struct_attr,
792 side_arg_list(),
793 side_arg_list(
794 side_arg_dynamic_field("a", side_arg_dynamic_struct(&mystruct)),
a82ffcff 795 )
808bd9bf
MD
796 );
797 }
798}
799
67337c4a
MD
800side_static_event(my_provider_event_float, "myprovider", "myeventfloat", SIDE_LOGLEVEL_DEBUG,
801 side_field_list(
fb25b355 802#if __HAVE_FLOAT16
a82ffcff
MD
803 side_field_float_binary16("binary16"),
804 side_field_float_binary16_le("binary16_le"),
805 side_field_float_binary16_be("binary16_be"),
fb25b355
MD
806#endif
807#if __HAVE_FLOAT32
a82ffcff
MD
808 side_field_float_binary32("binary32"),
809 side_field_float_binary32_le("binary32_le"),
810 side_field_float_binary32_be("binary32_be"),
fb25b355
MD
811#endif
812#if __HAVE_FLOAT64
a82ffcff
MD
813 side_field_float_binary64("binary64"),
814 side_field_float_binary64_le("binary64_le"),
815 side_field_float_binary64_be("binary64_be"),
fb25b355
MD
816#endif
817#if __HAVE_FLOAT128
a82ffcff
MD
818 side_field_float_binary128("binary128"),
819 side_field_float_binary128_le("binary128_le"),
820 side_field_float_binary128_be("binary128_be"),
fb25b355 821#endif
a82ffcff 822 )
fb25b355
MD
823);
824
825static
826void test_float(void)
827{
8bdd5c12
MD
828#if __HAVE_FLOAT16
829 union {
830 _Float16 f;
831 uint16_t u;
832 } float16 = {
833 .f = 1.1,
834 };
835#endif
836#if __HAVE_FLOAT32
837 union {
838 _Float32 f;
839 uint32_t u;
840 } float32 = {
841 .f = 2.2,
842 };
843#endif
844#if __HAVE_FLOAT64
845 union {
846 _Float64 f;
847 uint64_t u;
848 } float64 = {
849 .f = 3.3,
850 };
851#endif
852#if __HAVE_FLOAT128
853 union {
854 _Float128 f;
855 char arr[16];
856 } float128 = {
857 .f = 4.4,
858 };
859#endif
860
861#if __HAVE_FLOAT16
67337c4a 862 float16.u = side_bswap_16(float16.u);
8bdd5c12
MD
863#endif
864#if __HAVE_FLOAT32
67337c4a 865 float32.u = side_bswap_32(float32.u);
8bdd5c12
MD
866#endif
867#if __HAVE_FLOAT64
67337c4a 868 float64.u = side_bswap_64(float64.u);
8bdd5c12
MD
869#endif
870#if __HAVE_FLOAT128
67337c4a 871 side_bswap_128p(float128.arr);
8bdd5c12
MD
872#endif
873
67337c4a
MD
874 side_event(my_provider_event_float,
875 side_arg_list(
fb25b355 876#if __HAVE_FLOAT16
67337c4a
MD
877 side_arg_float_binary16(1.1),
878# if SIDE_FLOAT_WORD_ORDER == SIDE_LITTLE_ENDIAN
879 side_arg_float_binary16(1.1),
880 side_arg_float_binary16(float16.f),
8bdd5c12 881# else
67337c4a
MD
882 side_arg_float_binary16(float16.f),
883 side_arg_float_binary16(1.1),
8bdd5c12 884# endif
fb25b355
MD
885#endif
886#if __HAVE_FLOAT32
67337c4a
MD
887 side_arg_float_binary32(2.2),
888# if SIDE_FLOAT_WORD_ORDER == SIDE_LITTLE_ENDIAN
889 side_arg_float_binary32(2.2),
890 side_arg_float_binary32(float32.f),
8bdd5c12 891# else
67337c4a
MD
892 side_arg_float_binary32(float32.f),
893 side_arg_float_binary32(2.2),
8bdd5c12 894# endif
fb25b355
MD
895#endif
896#if __HAVE_FLOAT64
67337c4a
MD
897 side_arg_float_binary64(3.3),
898# if SIDE_FLOAT_WORD_ORDER == SIDE_LITTLE_ENDIAN
899 side_arg_float_binary64(3.3),
900 side_arg_float_binary64(float64.f),
8bdd5c12 901# else
67337c4a
MD
902 side_arg_float_binary64(float64.f),
903 side_arg_float_binary64(3.3),
8bdd5c12 904# endif
fb25b355
MD
905#endif
906#if __HAVE_FLOAT128
67337c4a
MD
907 side_arg_float_binary128(4.4),
908# if SIDE_FLOAT_WORD_ORDER == SIDE_LITTLE_ENDIAN
909 side_arg_float_binary128(4.4),
910 side_arg_float_binary128(float128.f),
8bdd5c12 911# else
67337c4a
MD
912 side_arg_float_binary128(float128.f),
913 side_arg_float_binary128(4.4),
8bdd5c12 914# endif
fb25b355
MD
915#endif
916 )
917 );
918}
919
67337c4a
MD
920side_static_event_variadic(my_provider_event_variadic_float,
921 "myprovider", "myvariadicfloat", SIDE_LOGLEVEL_DEBUG,
a82ffcff 922 side_field_list()
fb25b355
MD
923);
924
925static
926void test_variadic_float(void)
927{
8bdd5c12
MD
928#if __HAVE_FLOAT16
929 union {
930 _Float16 f;
931 uint16_t u;
932 } float16 = {
933 .f = 1.1,
934 };
935#endif
936#if __HAVE_FLOAT32
937 union {
938 _Float32 f;
939 uint32_t u;
940 } float32 = {
941 .f = 2.2,
942 };
943#endif
944#if __HAVE_FLOAT64
945 union {
946 _Float64 f;
947 uint64_t u;
948 } float64 = {
949 .f = 3.3,
950 };
951#endif
952#if __HAVE_FLOAT128
953 union {
954 _Float128 f;
955 char arr[16];
956 } float128 = {
957 .f = 4.4,
958 };
959#endif
960
961#if __HAVE_FLOAT16
67337c4a 962 float16.u = side_bswap_16(float16.u);
8bdd5c12
MD
963#endif
964#if __HAVE_FLOAT32
67337c4a 965 float32.u = side_bswap_32(float32.u);
8bdd5c12
MD
966#endif
967#if __HAVE_FLOAT64
67337c4a 968 float64.u = side_bswap_64(float64.u);
8bdd5c12
MD
969#endif
970#if __HAVE_FLOAT128
67337c4a 971 side_bswap_128p(float128.arr);
8bdd5c12
MD
972#endif
973
67337c4a
MD
974 side_event_variadic(my_provider_event_variadic_float,
975 side_arg_list(),
976 side_arg_list(
fb25b355 977#if __HAVE_FLOAT16
a82ffcff 978 side_arg_dynamic_field("binary16", side_arg_dynamic_float_binary16(1.1)),
67337c4a 979# if SIDE_FLOAT_WORD_ORDER == SIDE_LITTLE_ENDIAN
a82ffcff
MD
980 side_arg_dynamic_field("binary16_le", side_arg_dynamic_float_binary16_le(1.1)),
981 side_arg_dynamic_field("binary16_be", side_arg_dynamic_float_binary16_be(float16.f)),
8bdd5c12 982# else
a82ffcff
MD
983 side_arg_dynamic_field("binary16_le", side_arg_dynamic_float_binary16_le(float16.f)),
984 side_arg_dynamic_field("binary16_be", side_arg_dynamic_float_binary16_be(1.1)),
8bdd5c12 985# endif
fb25b355
MD
986#endif
987#if __HAVE_FLOAT32
a82ffcff 988 side_arg_dynamic_field("binary32", side_arg_dynamic_float_binary32(2.2)),
67337c4a 989# if SIDE_FLOAT_WORD_ORDER == SIDE_LITTLE_ENDIAN
a82ffcff
MD
990 side_arg_dynamic_field("binary32_le", side_arg_dynamic_float_binary32_le(2.2)),
991 side_arg_dynamic_field("binary32_be", side_arg_dynamic_float_binary32_be(float32.f)),
8bdd5c12 992# else
a82ffcff
MD
993 side_arg_dynamic_field("binary32_le", side_arg_dynamic_float_binary32_le(float32.f)),
994 side_arg_dynamic_field("binary32_be", side_arg_dynamic_float_binary32_be(2.2)),
8bdd5c12 995# endif
fb25b355
MD
996#endif
997#if __HAVE_FLOAT64
a82ffcff 998 side_arg_dynamic_field("binary64", side_arg_dynamic_float_binary64(3.3)),
67337c4a 999# if SIDE_FLOAT_WORD_ORDER == SIDE_LITTLE_ENDIAN
a82ffcff
MD
1000 side_arg_dynamic_field("binary64_le", side_arg_dynamic_float_binary64_le(3.3)),
1001 side_arg_dynamic_field("binary64_be", side_arg_dynamic_float_binary64_be(float64.f)),
8bdd5c12 1002# else
a82ffcff
MD
1003 side_arg_dynamic_field("binary64_le", side_arg_dynamic_float_binary64_le(float64.f)),
1004 side_arg_dynamic_field("binary64_be", side_arg_dynamic_float_binary64_be(3.3)),
8bdd5c12 1005# endif
fb25b355
MD
1006#endif
1007#if __HAVE_FLOAT128
a82ffcff 1008 side_arg_dynamic_field("binary128", side_arg_dynamic_float_binary128(4.4)),
67337c4a 1009# if SIDE_FLOAT_WORD_ORDER == SIDE_LITTLE_ENDIAN
a82ffcff
MD
1010 side_arg_dynamic_field("binary128_le", side_arg_dynamic_float_binary128_le(4.4)),
1011 side_arg_dynamic_field("binary128_be", side_arg_dynamic_float_binary128_be(float128.f)),
8bdd5c12 1012# else
a82ffcff
MD
1013 side_arg_dynamic_field("binary128_le", side_arg_dynamic_float_binary128_le(float128.f)),
1014 side_arg_dynamic_field("binary128_be", side_arg_dynamic_float_binary128_be(4.4)),
8bdd5c12 1015# endif
fb25b355 1016#endif
a82ffcff 1017 )
fb25b355
MD
1018 );
1019}
1020
67337c4a
MD
1021static side_define_enum(myenum,
1022 side_enum_mapping_list(
1023 side_enum_mapping_range("one-ten", 1, 10),
1024 side_enum_mapping_range("100-200", 100, 200),
1025 side_enum_mapping_value("200", 200),
1026 side_enum_mapping_value("300", 300),
a82ffcff 1027 )
79f677ba
MD
1028);
1029
67337c4a
MD
1030side_static_event(my_provider_event_enum, "myprovider", "myeventenum", SIDE_LOGLEVEL_DEBUG,
1031 side_field_list(
a82ffcff
MD
1032 side_field_enum("5", &myenum, side_elem(side_type_u32())),
1033 side_field_enum("400", &myenum, side_elem(side_type_u64())),
1034 side_field_enum("200", &myenum, side_elem(side_type_u8())),
1035 side_field_enum("-100", &myenum, side_elem(side_type_s8())),
1036 side_field_enum("6_be", &myenum, side_elem(side_type_u32_be())),
1037 side_field_enum("6_le", &myenum, side_elem(side_type_u32_le())),
1038 )
79f677ba
MD
1039);
1040
1041static
1042void test_enum(void)
1043{
67337c4a
MD
1044 side_event(my_provider_event_enum,
1045 side_arg_list(
1046 side_arg_u32(5),
1047 side_arg_u64(400),
1048 side_arg_u8(200),
1049 side_arg_s8(-100),
1050#if SIDE_BYTE_ORDER == SIDE_LITTLE_ENDIAN
1051 side_arg_u32(side_bswap_32(6)),
1052 side_arg_u32(6),
8bdd5c12 1053#else
67337c4a
MD
1054 side_arg_u32(6),
1055 side_arg_u32(side_bswap_32(6)),
8bdd5c12 1056#endif
79f677ba
MD
1057 )
1058 );
1059}
1060
ea32e5fc 1061/* A bitmap enum maps bits to labels. */
67337c4a
MD
1062static side_define_enum_bitmap(myenum_bitmap,
1063 side_enum_bitmap_mapping_list(
1064 side_enum_bitmap_mapping_value("0", 0),
1065 side_enum_bitmap_mapping_range("1-2", 1, 2),
1066 side_enum_bitmap_mapping_range("2-4", 2, 4),
1067 side_enum_bitmap_mapping_value("3", 3),
1068 side_enum_bitmap_mapping_value("30", 30),
1069 side_enum_bitmap_mapping_value("63", 63),
1070 side_enum_bitmap_mapping_range("158-160", 158, 160),
1071 side_enum_bitmap_mapping_value("159", 159),
1072 side_enum_bitmap_mapping_range("500-700", 500, 700),
a82ffcff 1073 )
ea32e5fc
MD
1074);
1075
67337c4a
MD
1076side_static_event(my_provider_event_enum_bitmap, "myprovider", "myeventenumbitmap", SIDE_LOGLEVEL_DEBUG,
1077 side_field_list(
a82ffcff
MD
1078 side_field_enum_bitmap("bit_0", &myenum_bitmap, side_elem(side_type_u32())),
1079 side_field_enum_bitmap("bit_1", &myenum_bitmap, side_elem(side_type_u32())),
1080 side_field_enum_bitmap("bit_2", &myenum_bitmap, side_elem(side_type_u8())),
1081 side_field_enum_bitmap("bit_3", &myenum_bitmap, side_elem(side_type_u8())),
1082 side_field_enum_bitmap("bit_30", &myenum_bitmap, side_elem(side_type_u32())),
1083 side_field_enum_bitmap("bit_31", &myenum_bitmap, side_elem(side_type_u32())),
1084 side_field_enum_bitmap("bit_63", &myenum_bitmap, side_elem(side_type_u64())),
1085 side_field_enum_bitmap("bits_1+63", &myenum_bitmap, side_elem(side_type_u64())),
1086 side_field_enum_bitmap("byte_bit_2", &myenum_bitmap, side_elem(side_type_byte())),
67337c4a 1087 side_field_enum_bitmap("bit_159", &myenum_bitmap,
a82ffcff 1088 side_elem(side_type_array(side_elem(side_type_u32()), 5))),
67337c4a 1089 side_field_enum_bitmap("bit_159", &myenum_bitmap,
a82ffcff
MD
1090 side_elem(side_type_vla(side_elem(side_type_u32())))),
1091 side_field_enum_bitmap("bit_2_be", &myenum_bitmap, side_elem(side_type_u32_be())),
1092 side_field_enum_bitmap("bit_2_le", &myenum_bitmap, side_elem(side_type_u32_le())),
1093 )
ea32e5fc
MD
1094);
1095
1096static
1097void test_enum_bitmap(void)
1098{
67337c4a
MD
1099 side_event_cond(my_provider_event_enum_bitmap) {
1100 side_arg_define_vec(myarray,
1101 side_arg_list(
1102 side_arg_u32(0),
1103 side_arg_u32(0),
1104 side_arg_u32(0),
1105 side_arg_u32(0),
1106 side_arg_u32(0x80000000), /* bit 159 */
af6aa6e1
MD
1107 )
1108 );
67337c4a
MD
1109 side_event_call(my_provider_event_enum_bitmap,
1110 side_arg_list(
1111 side_arg_u32(1U << 0),
1112 side_arg_u32(1U << 1),
1113 side_arg_u8(1U << 2),
1114 side_arg_u8(1U << 3),
1115 side_arg_u32(1U << 30),
1116 side_arg_u32(1U << 31),
1117 side_arg_u64(1ULL << 63),
1118 side_arg_u64((1ULL << 1) | (1ULL << 63)),
1119 side_arg_byte(1U << 2),
1120 side_arg_array(&myarray),
1121 side_arg_vla(&myarray),
1122#if SIDE_BYTE_ORDER == SIDE_LITTLE_ENDIAN
1123 side_arg_u32(side_bswap_32(1U << 2)),
1124 side_arg_u32(1U << 2),
8bdd5c12 1125#else
67337c4a
MD
1126 side_arg_u32(1U << 2),
1127 side_arg_u32(side_bswap_32(1U << 2)),
8bdd5c12 1128#endif
af6aa6e1
MD
1129 )
1130 );
1131 }
ea32e5fc
MD
1132}
1133
67337c4a
MD
1134side_static_event_variadic(my_provider_event_blob, "myprovider", "myeventblob", SIDE_LOGLEVEL_DEBUG,
1135 side_field_list(
a82ffcff
MD
1136 side_field_byte("blobfield"),
1137 side_field_array("arrayblob", side_elem(side_type_byte()), 3),
1138 )
7aec0d09
MD
1139);
1140
1141static
1142void test_blob(void)
1143{
67337c4a
MD
1144 side_event_cond(my_provider_event_blob) {
1145 side_arg_define_vec(myarray, side_arg_list(side_arg_byte(1), side_arg_byte(2), side_arg_byte(3)));
1146 side_arg_dynamic_define_vec(myvla,
1147 side_arg_list(
a82ffcff
MD
1148 side_arg_dynamic_byte(0x22),
1149 side_arg_dynamic_byte(0x33),
1150 )
199e7aa9 1151 );
67337c4a
MD
1152 side_event_call_variadic(my_provider_event_blob,
1153 side_arg_list(
1154 side_arg_byte(0x55),
1155 side_arg_array(&myarray),
199e7aa9 1156 ),
67337c4a
MD
1157 side_arg_list(
1158 side_arg_dynamic_field("varblobfield",
a82ffcff 1159 side_arg_dynamic_byte(0x55)
199e7aa9 1160 ),
67337c4a 1161 side_arg_dynamic_field("varblobvla", side_arg_dynamic_vla(&myvla)),
a82ffcff 1162 )
7aec0d09
MD
1163 );
1164 }
1165}
ea32e5fc 1166
67337c4a
MD
1167side_static_event_variadic(my_provider_event_format_string,
1168 "myprovider", "myeventformatstring", SIDE_LOGLEVEL_DEBUG,
1169 side_field_list(
a82ffcff 1170 side_field_string("fmt"),
71aa8975 1171 ),
67337c4a
MD
1172 side_attr_list(
1173 side_attr("lang.c.format_string", side_attr_bool(true)),
71aa8975
MD
1174 )
1175);
1176
1177static
1178void test_fmt_string(void)
1179{
67337c4a
MD
1180 side_event_cond(my_provider_event_format_string) {
1181 side_arg_dynamic_define_vec(args,
1182 side_arg_list(
a82ffcff
MD
1183 side_arg_dynamic_string("blah"),
1184 side_arg_dynamic_s32(123),
1185 )
71aa8975 1186 );
67337c4a
MD
1187 side_event_call_variadic(my_provider_event_format_string,
1188 side_arg_list(
1189 side_arg_string("This is a formatted string with str: %s int: %d"),
71aa8975 1190 ),
67337c4a
MD
1191 side_arg_list(
1192 side_arg_dynamic_field("arguments", side_arg_dynamic_vla(&args)),
a82ffcff 1193 )
71aa8975
MD
1194 );
1195 }
1196}
1197
67337c4a
MD
1198side_static_event_variadic(my_provider_event_endian, "myprovider", "myevent_endian", SIDE_LOGLEVEL_DEBUG,
1199 side_field_list(
a82ffcff
MD
1200 side_field_u16_le("u16_le"),
1201 side_field_u32_le("u32_le"),
1202 side_field_u64_le("u64_le"),
1203 side_field_s16_le("s16_le"),
1204 side_field_s32_le("s32_le"),
1205 side_field_s64_le("s64_le"),
1206 side_field_u16_be("u16_be"),
1207 side_field_u32_be("u32_be"),
1208 side_field_u64_be("u64_be"),
1209 side_field_s16_be("s16_be"),
1210 side_field_s32_be("s32_be"),
1211 side_field_s64_be("s64_be"),
1212 )
8bdd5c12
MD
1213);
1214
1215static
1216void test_endian(void)
1217{
67337c4a
MD
1218 side_event_variadic(my_provider_event_endian,
1219 side_arg_list(
1220#if SIDE_BYTE_ORDER == SIDE_LITTLE_ENDIAN
1221 side_arg_u16(1),
1222 side_arg_u32(1),
1223 side_arg_u64(1),
1224 side_arg_s16(1),
1225 side_arg_s32(1),
1226 side_arg_s64(1),
1227 side_arg_u16(side_bswap_16(1)),
1228 side_arg_u32(side_bswap_32(1)),
1229 side_arg_u64(side_bswap_64(1)),
1230 side_arg_s16(side_bswap_16(1)),
1231 side_arg_s32(side_bswap_32(1)),
1232 side_arg_s64(side_bswap_64(1)),
8bdd5c12 1233#else
67337c4a
MD
1234 side_arg_u16(side_bswap_16(1)),
1235 side_arg_u32(side_bswap_32(1)),
1236 side_arg_u64(side_bswap_64(1)),
1237 side_arg_s16(side_bswap_16(1)),
1238 side_arg_s32(side_bswap_32(1)),
1239 side_arg_s64(side_bswap_64(1)),
1240 side_arg_u16(1),
1241 side_arg_u32(1),
1242 side_arg_u64(1),
1243 side_arg_s16(1),
1244 side_arg_s32(1),
1245 side_arg_s64(1),
8bdd5c12
MD
1246#endif
1247 ),
67337c4a
MD
1248 side_arg_list(
1249#if SIDE_BYTE_ORDER == SIDE_LITTLE_ENDIAN
a82ffcff
MD
1250 side_arg_dynamic_field("u16_le", side_arg_dynamic_u16_le(1)),
1251 side_arg_dynamic_field("u32_le", side_arg_dynamic_u32_le(1)),
1252 side_arg_dynamic_field("u64_le", side_arg_dynamic_u64_le(1)),
1253 side_arg_dynamic_field("s16_le", side_arg_dynamic_s16_le(1)),
1254 side_arg_dynamic_field("s32_le", side_arg_dynamic_s32_le(1)),
1255 side_arg_dynamic_field("s64_le", side_arg_dynamic_s64_le(1)),
1256 side_arg_dynamic_field("u16_be", side_arg_dynamic_u16_be(side_bswap_16(1))),
1257 side_arg_dynamic_field("u32_be", side_arg_dynamic_u32_be(side_bswap_32(1))),
1258 side_arg_dynamic_field("u64_be", side_arg_dynamic_u64_be(side_bswap_64(1))),
1259 side_arg_dynamic_field("s16_be", side_arg_dynamic_s16_be(side_bswap_16(1))),
1260 side_arg_dynamic_field("s32_be", side_arg_dynamic_s32_be(side_bswap_32(1))),
1261 side_arg_dynamic_field("s64_be", side_arg_dynamic_s64_be(side_bswap_64(1))),
8bdd5c12 1262#else
a82ffcff
MD
1263 side_arg_dynamic_field("u16_le", side_arg_dynamic_u16_le(side_bswap_16(1))),
1264 side_arg_dynamic_field("u32_le", side_arg_dynamic_u32_le(side_bswap_32(1))),
1265 side_arg_dynamic_field("u64_le", side_arg_dynamic_u64_le(side_bswap_64(1))),
1266 side_arg_dynamic_field("s16_le", side_arg_dynamic_s16_le(side_bswap_16(1))),
1267 side_arg_dynamic_field("s32_le", side_arg_dynamic_s32_le(side_bswap_32(1))),
1268 side_arg_dynamic_field("s64_le", side_arg_dynamic_s64_le(side_bswap_64(1))),
1269 side_arg_dynamic_field("u16_be", side_arg_dynamic_u16_be(1)),
1270 side_arg_dynamic_field("u32_be", side_arg_dynamic_u32_be(1)),
1271 side_arg_dynamic_field("u64_be", side_arg_dynamic_u64_be(1)),
1272 side_arg_dynamic_field("s16_be", side_arg_dynamic_s16_be(1)),
1273 side_arg_dynamic_field("s32_be", side_arg_dynamic_s32_be(1)),
1274 side_arg_dynamic_field("s64_be", side_arg_dynamic_s64_be(1)),
8bdd5c12 1275#endif
a82ffcff 1276 )
8bdd5c12
MD
1277 );
1278}
1279
67337c4a
MD
1280side_static_event(my_provider_event_base, "myprovider", "myevent_base", SIDE_LOGLEVEL_DEBUG,
1281 side_field_list(
1282 side_field_u8("u8base2", side_attr_list(side_attr("std.integer.base", side_attr_u8(2)))),
1283 side_field_u8("u8base8", side_attr_list(side_attr("std.integer.base", side_attr_u8(8)))),
1284 side_field_u8("u8base10", side_attr_list(side_attr("std.integer.base", side_attr_u8(10)))),
1285 side_field_u8("u8base16", side_attr_list(side_attr("std.integer.base", side_attr_u8(16)))),
1286 side_field_u16("u16base2", side_attr_list(side_attr("std.integer.base", side_attr_u8(2)))),
1287 side_field_u16("u16base8", side_attr_list(side_attr("std.integer.base", side_attr_u8(8)))),
1288 side_field_u16("u16base10", side_attr_list(side_attr("std.integer.base", side_attr_u8(10)))),
1289 side_field_u16("u16base16", side_attr_list(side_attr("std.integer.base", side_attr_u8(16)))),
1290 side_field_u32("u32base2", side_attr_list(side_attr("std.integer.base", side_attr_u8(2)))),
1291 side_field_u32("u32base8", side_attr_list(side_attr("std.integer.base", side_attr_u8(8)))),
1292 side_field_u32("u32base10", side_attr_list(side_attr("std.integer.base", side_attr_u8(10)))),
1293 side_field_u32("u32base16", side_attr_list(side_attr("std.integer.base", side_attr_u8(16)))),
1294 side_field_u64("u64base2", side_attr_list(side_attr("std.integer.base", side_attr_u8(2)))),
1295 side_field_u64("u64base8", side_attr_list(side_attr("std.integer.base", side_attr_u8(8)))),
1296 side_field_u64("u64base10", side_attr_list(side_attr("std.integer.base", side_attr_u8(10)))),
1297 side_field_u64("u64base16", side_attr_list(side_attr("std.integer.base", side_attr_u8(16)))),
1298 side_field_s8("s8base2", side_attr_list(side_attr("std.integer.base", side_attr_u8(2)))),
1299 side_field_s8("s8base8", side_attr_list(side_attr("std.integer.base", side_attr_u8(8)))),
1300 side_field_s8("s8base10", side_attr_list(side_attr("std.integer.base", side_attr_u8(10)))),
1301 side_field_s8("s8base16", side_attr_list(side_attr("std.integer.base", side_attr_u8(16)))),
1302 side_field_s16("s16base2", side_attr_list(side_attr("std.integer.base", side_attr_u8(2)))),
1303 side_field_s16("s16base8", side_attr_list(side_attr("std.integer.base", side_attr_u8(8)))),
1304 side_field_s16("s16base10", side_attr_list(side_attr("std.integer.base", side_attr_u8(10)))),
1305 side_field_s16("s16base16", side_attr_list(side_attr("std.integer.base", side_attr_u8(16)))),
1306 side_field_s32("s32base2", side_attr_list(side_attr("std.integer.base", side_attr_u8(2)))),
1307 side_field_s32("s32base8", side_attr_list(side_attr("std.integer.base", side_attr_u8(8)))),
1308 side_field_s32("s32base10", side_attr_list(side_attr("std.integer.base", side_attr_u8(10)))),
1309 side_field_s32("s32base16", side_attr_list(side_attr("std.integer.base", side_attr_u8(16)))),
1310 side_field_s64("s64base2", side_attr_list(side_attr("std.integer.base", side_attr_u8(2)))),
1311 side_field_s64("s64base8", side_attr_list(side_attr("std.integer.base", side_attr_u8(8)))),
1312 side_field_s64("s64base10", side_attr_list(side_attr("std.integer.base", side_attr_u8(10)))),
1313 side_field_s64("s64base16", side_attr_list(side_attr("std.integer.base", side_attr_u8(16)))),
a82ffcff 1314 )
1d9c515c
MD
1315);
1316
1317static
1318void test_base(void)
1319{
67337c4a
MD
1320 side_event(my_provider_event_base,
1321 side_arg_list(
1322 side_arg_u8(55),
1323 side_arg_u8(55),
1324 side_arg_u8(55),
1325 side_arg_u8(55),
1326 side_arg_u16(55),
1327 side_arg_u16(55),
1328 side_arg_u16(55),
1329 side_arg_u16(55),
1330 side_arg_u32(55),
1331 side_arg_u32(55),
1332 side_arg_u32(55),
1333 side_arg_u32(55),
1334 side_arg_u64(55),
1335 side_arg_u64(55),
1336 side_arg_u64(55),
1337 side_arg_u64(55),
1338 side_arg_s8(-55),
1339 side_arg_s8(-55),
1340 side_arg_s8(-55),
1341 side_arg_s8(-55),
1342 side_arg_s16(-55),
1343 side_arg_s16(-55),
1344 side_arg_s16(-55),
1345 side_arg_s16(-55),
1346 side_arg_s32(-55),
1347 side_arg_s32(-55),
1348 side_arg_s32(-55),
1349 side_arg_s32(-55),
1350 side_arg_s64(-55),
1351 side_arg_s64(-55),
1352 side_arg_s64(-55),
1353 side_arg_s64(-55),
1d9c515c
MD
1354 )
1355 );
1356}
1357
7a1cb105
MD
1358struct test {
1359 uint32_t a;
1360 uint64_t b;
1361 uint8_t c;
1362 int32_t d;
1363 uint16_t e;
bc0b21eb
MD
1364 int8_t f;
1365 int16_t g;
1366 int32_t h;
1367 int64_t i;
1368 int64_t j;
1369 int64_t k;
c1723f3c 1370 uint64_t test;
7a1cb105
MD
1371};
1372
67337c4a
MD
1373static side_define_struct(mystructgatherdef,
1374 side_field_list(
1375 side_field_gather_unsigned_integer("a", offsetof(struct test, a),
1376 side_struct_field_sizeof(struct test, a), 0, 0,
a82ffcff 1377 SIDE_TYPE_GATHER_ACCESS_DIRECT),
67337c4a
MD
1378 side_field_gather_signed_integer("d", offsetof(struct test, d),
1379 side_struct_field_sizeof(struct test, d), 0, 0,
a82ffcff 1380 SIDE_TYPE_GATHER_ACCESS_DIRECT),
67337c4a
MD
1381 side_field_gather_unsigned_integer("e", offsetof(struct test, e),
1382 side_struct_field_sizeof(struct test, e), 8, 4,
1383 SIDE_TYPE_GATHER_ACCESS_DIRECT, side_attr_list(side_attr("std.integer.base", side_attr_u8(16)))),
1384 side_field_gather_signed_integer("f", offsetof(struct test, f),
1385 side_struct_field_sizeof(struct test, f), 1, 4,
1386 SIDE_TYPE_GATHER_ACCESS_DIRECT, side_attr_list(side_attr("std.integer.base", side_attr_u8(10)))),
1387 side_field_gather_signed_integer("g", offsetof(struct test, g),
1388 side_struct_field_sizeof(struct test, g), 11, 4,
1389 SIDE_TYPE_GATHER_ACCESS_DIRECT, side_attr_list(side_attr("std.integer.base", side_attr_u8(10)))),
1390 side_field_gather_signed_integer("h", offsetof(struct test, h),
1391 side_struct_field_sizeof(struct test, h), 1, 31,
1392 SIDE_TYPE_GATHER_ACCESS_DIRECT, side_attr_list(side_attr("std.integer.base", side_attr_u8(10)))),
1393 side_field_gather_signed_integer("i", offsetof(struct test, i),
1394 side_struct_field_sizeof(struct test, i), 33, 20,
1395 SIDE_TYPE_GATHER_ACCESS_DIRECT, side_attr_list(side_attr("std.integer.base", side_attr_u8(10)))),
1396 side_field_gather_signed_integer("j", offsetof(struct test, j),
1397 side_struct_field_sizeof(struct test, j), 63, 1,
1398 SIDE_TYPE_GATHER_ACCESS_DIRECT, side_attr_list(side_attr("std.integer.base", side_attr_u8(10)))),
1399 side_field_gather_signed_integer("k", offsetof(struct test, k),
1400 side_struct_field_sizeof(struct test, k), 1, 63,
1401 SIDE_TYPE_GATHER_ACCESS_DIRECT, side_attr_list(side_attr("std.integer.base", side_attr_u8(10)))),
1402 side_field_gather_unsigned_integer_le("test", offsetof(struct test, test),
1403 side_struct_field_sizeof(struct test, test), 0, 64,
1404 SIDE_TYPE_GATHER_ACCESS_DIRECT, side_attr_list(side_attr("std.integer.base", side_attr_u8(16)))),
1405 side_field_gather_unsigned_integer_le("test_le", offsetof(struct test, test),
1406 side_struct_field_sizeof(struct test, test), 0, 64,
1407 SIDE_TYPE_GATHER_ACCESS_DIRECT, side_attr_list(side_attr("std.integer.base", side_attr_u8(16)))),
1408 side_field_gather_unsigned_integer_be("test_be", offsetof(struct test, test),
1409 side_struct_field_sizeof(struct test, test), 0, 64,
1410 SIDE_TYPE_GATHER_ACCESS_DIRECT, side_attr_list(side_attr("std.integer.base", side_attr_u8(16)))),
a82ffcff 1411 )
7a1cb105
MD
1412);
1413
67337c4a
MD
1414side_static_event(my_provider_event_structgather, "myprovider", "myeventstructgather", SIDE_LOGLEVEL_DEBUG,
1415 side_field_list(
1416 side_field_gather_struct("structgather", &mystructgatherdef, 0, sizeof(struct test),
1417 SIDE_TYPE_GATHER_ACCESS_DIRECT),
1418 side_field_gather_signed_integer("intgather", 0, sizeof(int32_t), 0, 0, SIDE_TYPE_GATHER_ACCESS_DIRECT,
1419 side_attr_list(side_attr("std.integer.base", side_attr_u8(10)))),
13d97eca 1420#if __HAVE_FLOAT32
a82ffcff 1421 side_field_gather_float("f32", 0, sizeof(_Float32), SIDE_TYPE_GATHER_ACCESS_DIRECT),
13d97eca 1422#endif
a82ffcff 1423 )
7a1cb105
MD
1424);
1425
1426static
d41cb7ee 1427void test_struct_gather(void)
7a1cb105 1428{
67337c4a 1429 side_event_cond(my_provider_event_structgather) {
7a1cb105
MD
1430 struct test mystruct = {
1431 .a = 55,
1432 .b = 123,
1433 .c = 2,
1434 .d = -55,
1435 .e = 0xABCD,
bc0b21eb
MD
1436 .f = -1,
1437 .g = -1,
1438 .h = -1,
1439 .i = -1,
1440 .j = -1,
1441 .k = -1,
c1723f3c 1442 .test = 0xFF,
7a1cb105 1443 };
33956c71 1444 int32_t val = -66;
13d97eca
MD
1445#if __HAVE_FLOAT32
1446 _Float32 f32 = 1.1;
1447#endif
67337c4a
MD
1448 side_event_call(my_provider_event_structgather,
1449 side_arg_list(
1450 side_arg_gather_struct(&mystruct),
1451 side_arg_gather_integer(&val),
13d97eca 1452#if __HAVE_FLOAT32
67337c4a 1453 side_arg_gather_float(&f32),
13d97eca 1454#endif
33956c71
MD
1455 )
1456 );
7a1cb105
MD
1457 }
1458}
1459
7394a8b8
MD
1460struct testnest2 {
1461 uint8_t c;
1462};
1463
1464struct testnest1 {
1465 uint64_t b;
1466 struct testnest2 *nest;
1467};
1468
1469struct testnest0 {
1470 uint32_t a;
1471 struct testnest1 *nest;
1472};
1473
67337c4a
MD
1474static side_define_struct(mystructgathernest2,
1475 side_field_list(
1476 side_field_gather_unsigned_integer("c", offsetof(struct testnest2, c),
1477 side_struct_field_sizeof(struct testnest2, c), 0, 0,
a82ffcff
MD
1478 SIDE_TYPE_GATHER_ACCESS_DIRECT),
1479 )
7394a8b8
MD
1480);
1481
67337c4a
MD
1482static side_define_struct(mystructgathernest1,
1483 side_field_list(
1484 side_field_gather_unsigned_integer("b", offsetof(struct testnest1, b),
1485 side_struct_field_sizeof(struct testnest1, b), 0, 0,
a82ffcff 1486 SIDE_TYPE_GATHER_ACCESS_DIRECT),
67337c4a 1487 side_field_gather_struct("nest2", &mystructgathernest2,
dd7947bf 1488 offsetof(struct testnest1, nest), sizeof(struct testnest2),
67337c4a 1489 SIDE_TYPE_GATHER_ACCESS_POINTER),
a82ffcff 1490 )
7394a8b8
MD
1491);
1492
67337c4a
MD
1493static side_define_struct(mystructgathernest0,
1494 side_field_list(
1495 side_field_gather_unsigned_integer("a", offsetof(struct testnest0, a),
1496 side_struct_field_sizeof(struct testnest0, a), 0, 0,
a82ffcff 1497 SIDE_TYPE_GATHER_ACCESS_DIRECT),
67337c4a 1498 side_field_gather_struct("nest1", &mystructgathernest1,
dd7947bf 1499 offsetof(struct testnest0, nest), sizeof(struct testnest1),
67337c4a 1500 SIDE_TYPE_GATHER_ACCESS_POINTER),
a82ffcff 1501 )
7394a8b8
MD
1502);
1503
67337c4a
MD
1504side_static_event(my_provider_event_structgather_nest,
1505 "myprovider", "myeventstructgathernest", SIDE_LOGLEVEL_DEBUG,
1506 side_field_list(
1507 side_field_gather_struct("nest0", &mystructgathernest0, 0,
1508 sizeof(struct testnest0), SIDE_TYPE_GATHER_ACCESS_DIRECT),
a82ffcff 1509 )
7394a8b8
MD
1510);
1511
1512static
d41cb7ee 1513void test_struct_gather_nest_ptr(void)
7394a8b8 1514{
67337c4a 1515 side_event_cond(my_provider_event_structgather_nest) {
7394a8b8
MD
1516 struct testnest2 mystruct2 = {
1517 .c = 77,
1518 };
1519 struct testnest1 mystruct1 = {
1520 .b = 66,
1521 .nest = &mystruct2,
1522 };
1523 struct testnest0 mystruct = {
1524 .a = 55,
1525 .nest = &mystruct1,
1526 };
67337c4a
MD
1527 side_event_call(my_provider_event_structgather_nest,
1528 side_arg_list(
1529 side_arg_gather_struct(&mystruct),
7394a8b8
MD
1530 )
1531 );
1532 }
1533}
1534
905f68e3
MD
1535struct testfloat {
1536#if __HAVE_FLOAT16
1537 _Float16 f16;
1538#endif
1539#if __HAVE_FLOAT32
1540 _Float32 f32;
1541#endif
1542#if __HAVE_FLOAT64
1543 _Float64 f64;
1544#endif
1545#if __HAVE_FLOAT128
1546 _Float128 f128;
1547#endif
1548};
1549
67337c4a
MD
1550static side_define_struct(mystructgatherfloat,
1551 side_field_list(
905f68e3 1552#if __HAVE_FLOAT16
67337c4a 1553 side_field_gather_float("f16", offsetof(struct testfloat, f16), side_struct_field_sizeof(struct testfloat, f16),
a82ffcff 1554 SIDE_TYPE_GATHER_ACCESS_DIRECT),
905f68e3
MD
1555#endif
1556#if __HAVE_FLOAT32
67337c4a 1557 side_field_gather_float("f32", offsetof(struct testfloat, f32), side_struct_field_sizeof(struct testfloat, f32),
a82ffcff 1558 SIDE_TYPE_GATHER_ACCESS_DIRECT),
905f68e3
MD
1559#endif
1560#if __HAVE_FLOAT64
67337c4a 1561 side_field_gather_float("f64", offsetof(struct testfloat, f64), side_struct_field_sizeof(struct testfloat, f64),
a82ffcff 1562 SIDE_TYPE_GATHER_ACCESS_DIRECT),
905f68e3
MD
1563#endif
1564#if __HAVE_FLOAT128
67337c4a 1565 side_field_gather_float("f128", offsetof(struct testfloat, f128), side_struct_field_sizeof(struct testfloat, f128),
a82ffcff 1566 SIDE_TYPE_GATHER_ACCESS_DIRECT),
905f68e3 1567#endif
a82ffcff 1568 )
905f68e3
MD
1569);
1570
67337c4a
MD
1571side_static_event(my_provider_event_structgatherfloat,
1572 "myprovider", "myeventstructgatherfloat", SIDE_LOGLEVEL_DEBUG,
1573 side_field_list(
1574 side_field_gather_struct("structgatherfloat", &mystructgatherfloat, 0,
1575 sizeof(struct testfloat), SIDE_TYPE_GATHER_ACCESS_DIRECT),
a82ffcff 1576 )
905f68e3
MD
1577);
1578
1579static
d41cb7ee 1580void test_struct_gather_float(void)
905f68e3 1581{
67337c4a 1582 side_event_cond(my_provider_event_structgatherfloat) {
905f68e3
MD
1583 struct testfloat mystruct = {
1584#if __HAVE_FLOAT16
1585 .f16 = 1.1,
1586#endif
1587#if __HAVE_FLOAT32
1588 .f32 = 2.2,
1589#endif
1590#if __HAVE_FLOAT64
1591 .f64 = 3.3,
1592#endif
1593#if __HAVE_FLOAT128
1594 .f128 = 4.4,
1595#endif
1596 };
67337c4a
MD
1597 side_event_call(my_provider_event_structgatherfloat,
1598 side_arg_list(
1599 side_arg_gather_struct(&mystruct),
905f68e3
MD
1600 )
1601 );
1602 }
1603}
1604
d41cb7ee 1605uint32_t mygatherarray[] = { 1, 2, 3, 4, 5 };
d9359cfa 1606
d41cb7ee 1607uint16_t mygatherarray2[] = { 6, 7, 8, 9 };
d9359cfa
MD
1608
1609struct testarray {
1610 int a;
1611 uint32_t *ptr;
1612};
1613
67337c4a
MD
1614static side_define_struct(mystructgatherarray,
1615 side_field_list(
1616 side_field_gather_array("array",
a82ffcff 1617 side_elem(side_type_gather_unsigned_integer(0, sizeof(uint32_t), 0, 0, SIDE_TYPE_GATHER_ACCESS_DIRECT)),
67337c4a 1618 SIDE_ARRAY_SIZE(mygatherarray),
d9359cfa 1619 offsetof(struct testarray, ptr),
a82ffcff
MD
1620 SIDE_TYPE_GATHER_ACCESS_POINTER
1621 ),
1622 )
d9359cfa
MD
1623);
1624
67337c4a
MD
1625side_static_event(my_provider_event_structgatherarray,
1626 "myprovider", "myeventstructgatherarray", SIDE_LOGLEVEL_DEBUG,
1627 side_field_list(
1628 side_field_gather_struct("structgatherarray", &mystructgatherarray, 0,
1629 sizeof(struct testarray), SIDE_TYPE_GATHER_ACCESS_DIRECT),
1630 side_field_gather_array("array2",
a82ffcff 1631 side_elem(side_type_gather_unsigned_integer(0, sizeof(uint16_t), 0, 0, SIDE_TYPE_GATHER_ACCESS_DIRECT)),
67337c4a 1632 SIDE_ARRAY_SIZE(mygatherarray2), 0,
a82ffcff 1633 SIDE_TYPE_GATHER_ACCESS_DIRECT
d9359cfa 1634 ),
a82ffcff 1635 )
d9359cfa
MD
1636);
1637
1638static
d41cb7ee 1639void test_array_gather(void)
d9359cfa 1640{
67337c4a 1641 side_event_cond(my_provider_event_structgatherarray) {
d9359cfa
MD
1642 struct testarray mystruct = {
1643 .a = 55,
d41cb7ee 1644 .ptr = mygatherarray,
d9359cfa 1645 };
67337c4a
MD
1646 side_event_call(my_provider_event_structgatherarray,
1647 side_arg_list(
1648 side_arg_gather_struct(&mystruct),
1649 side_arg_gather_array(&mygatherarray2),
d9359cfa
MD
1650 )
1651 );
1652 }
1653}
1654
dd7947bf 1655#define TESTSGNESTARRAY_LEN 4
d41cb7ee 1656struct testgatherstructnest1 {
dd7947bf
MD
1657 int b;
1658 int c[TESTSGNESTARRAY_LEN];
1659};
1660
d41cb7ee
MD
1661struct testgatherstructnest0 {
1662 struct testgatherstructnest1 nest;
1663 struct testgatherstructnest1 nestarray[2];
dd7947bf
MD
1664 int a;
1665};
1666
67337c4a
MD
1667static side_define_struct(mystructgatherstructnest1,
1668 side_field_list(
1669 side_field_gather_signed_integer("b", offsetof(struct testgatherstructnest1, b),
1670 side_struct_field_sizeof(struct testgatherstructnest1, b), 0, 0,
a82ffcff 1671 SIDE_TYPE_GATHER_ACCESS_DIRECT),
67337c4a
MD
1672 side_field_gather_array("c",
1673 side_elem(
1674 side_type_gather_signed_integer(0, sizeof(uint32_t), 0, 0,
a82ffcff 1675 SIDE_TYPE_GATHER_ACCESS_DIRECT)
dd7947bf
MD
1676 ),
1677 TESTSGNESTARRAY_LEN,
d41cb7ee 1678 offsetof(struct testgatherstructnest1, c),
a82ffcff
MD
1679 SIDE_TYPE_GATHER_ACCESS_DIRECT),
1680 )
dd7947bf
MD
1681);
1682
67337c4a
MD
1683static side_define_struct(mystructgatherstructnest0,
1684 side_field_list(
1685 side_field_gather_signed_integer("a", offsetof(struct testgatherstructnest0, a),
1686 side_struct_field_sizeof(struct testgatherstructnest0, a), 0, 0,
a82ffcff 1687 SIDE_TYPE_GATHER_ACCESS_DIRECT),
67337c4a 1688 side_field_gather_struct("structnest0", &mystructgatherstructnest1,
d41cb7ee
MD
1689 offsetof(struct testgatherstructnest0, nest),
1690 sizeof(struct testgatherstructnest1),
67337c4a
MD
1691 SIDE_TYPE_GATHER_ACCESS_DIRECT),
1692 side_field_gather_array("nestarray",
1693 side_elem(
1694 side_type_gather_struct(&mystructgatherstructnest1,
dd7947bf 1695 0,
d41cb7ee 1696 sizeof(struct testgatherstructnest1),
a82ffcff 1697 SIDE_TYPE_GATHER_ACCESS_DIRECT)
dd7947bf
MD
1698 ),
1699 2,
d41cb7ee 1700 offsetof(struct testgatherstructnest0, nestarray),
a82ffcff
MD
1701 SIDE_TYPE_GATHER_ACCESS_DIRECT),
1702 )
dd7947bf
MD
1703);
1704
67337c4a
MD
1705side_static_event(my_provider_event_gatherstructnest,
1706 "myprovider", "myeventgatherstructnest", SIDE_LOGLEVEL_DEBUG,
1707 side_field_list(
1708 side_field_gather_struct("structgather", &mystructgatherstructnest0, 0,
1709 sizeof(struct testgatherstructnest0), SIDE_TYPE_GATHER_ACCESS_DIRECT),
a82ffcff 1710 )
dd7947bf
MD
1711);
1712
1713static
d41cb7ee 1714void test_gather_structnest(void)
dd7947bf 1715{
67337c4a 1716 side_event_cond(my_provider_event_gatherstructnest) {
d41cb7ee 1717 struct testgatherstructnest0 mystruct = {
dd7947bf
MD
1718 .nest = {
1719 .b = 66,
1720 .c = { 0, 1, 2, 3 },
1721 },
1722 .nestarray = {
1723 [0] = {
1724 .b = 77,
1725 .c = { 11, 12, 13, 14 },
1726 },
1727 [1] = {
1728 .b = 88,
1729 .c = { 15, 16, 17, 18 },
1730 },
1731 },
1732 .a = 55,
1733 };
67337c4a
MD
1734 side_event_call(my_provider_event_gatherstructnest,
1735 side_arg_list(
1736 side_arg_gather_struct(&mystruct),
dd7947bf
MD
1737 )
1738 );
1739 }
1740}
1741
d41cb7ee 1742uint32_t gathervla[] = { 1, 2, 3, 4 };
80429681 1743uint32_t gathervla2[] = { 5, 6, 7, 8, 9 };
65b8734a 1744
d41cb7ee 1745struct testgathervla {
65b8734a
MD
1746 int a;
1747 uint16_t len;
1748 uint32_t *p;
1749};
1750
67337c4a
MD
1751static side_define_struct(mystructgathervla,
1752 side_field_list(
1753 side_field_gather_signed_integer("a", offsetof(struct testgathervla, a),
1754 side_struct_field_sizeof(struct testgathervla, a), 0, 0,
a82ffcff 1755 SIDE_TYPE_GATHER_ACCESS_DIRECT
65b8734a 1756 ),
67337c4a 1757 side_field_gather_vla("nestvla",
a82ffcff 1758 side_elem(side_type_gather_unsigned_integer(0, sizeof(uint32_t), 0, 0, SIDE_TYPE_GATHER_ACCESS_DIRECT)),
d41cb7ee 1759 offsetof(struct testgathervla, p),
67337c4a
MD
1760 SIDE_TYPE_GATHER_ACCESS_POINTER,
1761 side_length(side_type_gather_unsigned_integer(offsetof(struct testgathervla, len),
a82ffcff 1762 sizeof(uint16_t), 0, 0, SIDE_TYPE_GATHER_ACCESS_DIRECT))
65b8734a 1763 ),
a82ffcff 1764 )
65b8734a
MD
1765);
1766
67337c4a
MD
1767side_static_event(my_provider_event_gathervla,
1768 "myprovider", "myeventgathervla", SIDE_LOGLEVEL_DEBUG,
1769 side_field_list(
1770 side_field_gather_struct("structgathervla", &mystructgathervla, 0,
1771 sizeof(struct testgathervla), SIDE_TYPE_GATHER_ACCESS_DIRECT),
1772 side_field_gather_vla("vla",
a82ffcff 1773 side_elem(side_type_gather_unsigned_integer(0, sizeof(uint32_t), 0, 0, SIDE_TYPE_GATHER_ACCESS_DIRECT)),
67337c4a 1774 0, SIDE_TYPE_GATHER_ACCESS_DIRECT,
a82ffcff 1775 side_length(side_type_gather_unsigned_integer(0, sizeof(uint16_t), 0, 0, SIDE_TYPE_GATHER_ACCESS_DIRECT))
80429681 1776 ),
a82ffcff 1777 )
65b8734a
MD
1778);
1779
1780static
d41cb7ee 1781void test_gather_vla(void)
65b8734a 1782{
67337c4a 1783 side_event_cond(my_provider_event_gathervla) {
d41cb7ee 1784 struct testgathervla mystruct = {
65b8734a 1785 .a = 55,
67337c4a 1786 .len = SIDE_ARRAY_SIZE(gathervla),
d41cb7ee 1787 .p = gathervla,
65b8734a 1788 };
80429681 1789 uint16_t vla2_len = 5;
67337c4a
MD
1790 side_event_call(my_provider_event_gathervla,
1791 side_arg_list(
1792 side_arg_gather_struct(&mystruct),
1793 side_arg_gather_vla(gathervla2, &vla2_len),
65b8734a
MD
1794 )
1795 );
1796 }
1797}
1798
d41cb7ee 1799struct testgathervlaflex {
65b8734a
MD
1800 uint8_t len;
1801 uint32_t otherfield;
1802 uint64_t array[];
1803};
1804
67337c4a
MD
1805static side_define_struct(mystructgathervlaflex,
1806 side_field_list(
1807 side_field_gather_vla("vlaflex",
a82ffcff 1808 side_elem(side_type_gather_unsigned_integer(0, sizeof(uint64_t), 0, 0, SIDE_TYPE_GATHER_ACCESS_DIRECT)),
d41cb7ee 1809 offsetof(struct testgathervlaflex, array),
67337c4a
MD
1810 SIDE_TYPE_GATHER_ACCESS_DIRECT,
1811 side_length(side_type_gather_unsigned_integer(offsetof(struct testgathervlaflex, len),
a82ffcff 1812 side_struct_field_sizeof(struct testgathervlaflex, len), 0, 0, SIDE_TYPE_GATHER_ACCESS_DIRECT))
65b8734a 1813 ),
a82ffcff 1814 )
65b8734a
MD
1815);
1816
67337c4a
MD
1817side_static_event(my_provider_event_gathervlaflex,
1818 "myprovider", "myeventgathervlaflex", SIDE_LOGLEVEL_DEBUG,
1819 side_field_list(
1820 side_field_gather_struct("structgathervlaflex", &mystructgathervlaflex, 0,
a82ffcff
MD
1821 sizeof(struct testgathervlaflex), SIDE_TYPE_GATHER_ACCESS_DIRECT)
1822 )
65b8734a
MD
1823);
1824
1825#define VLAFLEXLEN 6
1826static
d41cb7ee 1827void test_gather_vla_flex(void)
65b8734a 1828{
67337c4a 1829 side_event_cond(my_provider_event_gathervlaflex) {
358281a1 1830 struct testgathervlaflex *mystruct =
150b5c1d 1831 (struct testgathervlaflex *) malloc(sizeof(*mystruct) + VLAFLEXLEN * sizeof(uint64_t));
65b8734a
MD
1832
1833 mystruct->len = VLAFLEXLEN;
1834 mystruct->otherfield = 0;
1835 mystruct->array[0] = 1;
1836 mystruct->array[1] = 2;
1837 mystruct->array[2] = 3;
1838 mystruct->array[3] = 4;
1839 mystruct->array[4] = 5;
1840 mystruct->array[5] = 6;
67337c4a
MD
1841 side_event_call(my_provider_event_gathervlaflex,
1842 side_arg_list(
1843 side_arg_gather_struct(mystruct),
65b8734a
MD
1844 )
1845 );
1846 free(mystruct);
1847 }
1848}
1849
67337c4a
MD
1850side_static_event(my_provider_event_gatherbyte,
1851 "myprovider", "myeventgatherbyte", SIDE_LOGLEVEL_DEBUG,
1852 side_field_list(
a82ffcff 1853 side_field_gather_byte("byte", 0, SIDE_TYPE_GATHER_ACCESS_DIRECT),
67337c4a 1854 side_field_gather_array("array",
a82ffcff
MD
1855 side_elem(side_type_gather_byte(0, SIDE_TYPE_GATHER_ACCESS_DIRECT)),
1856 3, 0, SIDE_TYPE_GATHER_ACCESS_DIRECT
d69918cc 1857 ),
a82ffcff 1858 )
d69918cc
MD
1859);
1860
1861static
1862void test_gather_byte(void)
1863{
67337c4a 1864 side_event_cond(my_provider_event_gatherbyte) {
d69918cc
MD
1865 uint8_t v = 0x44;
1866 uint8_t array[3] = { 0x1, 0x2, 0x3 };
1867
67337c4a
MD
1868 side_event_call(my_provider_event_gatherbyte,
1869 side_arg_list(
1870 side_arg_gather_byte(&v),
1871 side_arg_gather_array(array),
d69918cc
MD
1872 )
1873 );
1874 }
1875}
1876
8ad2f385
MD
1877#define ARRAYBOOLLEN 4
1878static bool arraybool[ARRAYBOOLLEN] = { false, true, false, true };
1879
67337c4a
MD
1880side_static_event(my_provider_event_gatherbool,
1881 "myprovider", "myeventgatherbool", SIDE_LOGLEVEL_DEBUG,
1882 side_field_list(
1883 side_field_gather_bool("v1_true", 0, sizeof(bool), 0, 0,
a82ffcff 1884 SIDE_TYPE_GATHER_ACCESS_DIRECT),
67337c4a 1885 side_field_gather_bool("v2_false", 0, sizeof(bool), 0, 0,
a82ffcff 1886 SIDE_TYPE_GATHER_ACCESS_DIRECT),
67337c4a 1887 side_field_gather_bool("v3_true", 0, sizeof(uint16_t), 1, 1,
a82ffcff 1888 SIDE_TYPE_GATHER_ACCESS_DIRECT),
67337c4a 1889 side_field_gather_bool("v4_false", 0, sizeof(uint16_t), 1, 1,
a82ffcff 1890 SIDE_TYPE_GATHER_ACCESS_DIRECT),
67337c4a
MD
1891 side_field_gather_array("arraybool",
1892 side_elem(side_type_gather_bool(0, sizeof(bool), 0, 0,
a82ffcff
MD
1893 SIDE_TYPE_GATHER_ACCESS_DIRECT)),
1894 ARRAYBOOLLEN, 0, SIDE_TYPE_GATHER_ACCESS_DIRECT
8ad2f385 1895 ),
a82ffcff 1896 )
8ad2f385
MD
1897);
1898
1899static
1900void test_gather_bool(void)
1901{
67337c4a 1902 side_event_cond(my_provider_event_structgatherarray) {
8ad2f385
MD
1903 bool v1 = true;
1904 bool v2 = false;
1905 uint16_t v3 = 1U << 1;
1906 uint16_t v4 = 1U << 2;
1907
67337c4a
MD
1908 side_event_call(my_provider_event_gatherbool,
1909 side_arg_list(
1910 side_arg_gather_bool(&v1),
1911 side_arg_gather_bool(&v2),
1912 side_arg_gather_bool(&v3),
1913 side_arg_gather_bool(&v4),
1914 side_arg_gather_array(arraybool),
8ad2f385
MD
1915 )
1916 );
1917 }
1918}
1919
67337c4a
MD
1920side_static_event(my_provider_event_gatherpointer,
1921 "myprovider", "myeventgatherpointer", SIDE_LOGLEVEL_DEBUG,
1922 side_field_list(
a82ffcff 1923 side_field_gather_pointer("ptr", 0, SIDE_TYPE_GATHER_ACCESS_DIRECT),
67337c4a 1924 side_field_gather_array("array",
a82ffcff
MD
1925 side_elem(side_type_gather_pointer(0, SIDE_TYPE_GATHER_ACCESS_DIRECT)),
1926 3, 0, SIDE_TYPE_GATHER_ACCESS_DIRECT
4e1b0e0e 1927 ),
a82ffcff 1928 )
4e1b0e0e
MD
1929);
1930
1931static
1932void test_gather_pointer(void)
1933{
67337c4a 1934 side_event_cond(my_provider_event_structgatherarray) {
4e1b0e0e
MD
1935 void *v = (void *)0x44;
1936 void *array[3] = { (void *)0x1, (void *)0x2, (void *)0x3 };
1937
67337c4a
MD
1938 side_event_call(my_provider_event_gatherpointer,
1939 side_arg_list(
1940 side_arg_gather_pointer(&v),
1941 side_arg_gather_array(array),
4e1b0e0e
MD
1942 )
1943 );
1944 }
1945}
0519cb86 1946
67337c4a
MD
1947static side_define_enum(myenumgather,
1948 side_enum_mapping_list(
1949 side_enum_mapping_range("one-ten", 1, 10),
1950 side_enum_mapping_range("100-200", 100, 200),
1951 side_enum_mapping_value("200", 200),
1952 side_enum_mapping_value("300", 300),
a82ffcff 1953 )
0519cb86
MD
1954);
1955
67337c4a
MD
1956side_static_event(my_provider_event_enum_gather, "myprovider", "myeventenumgather", SIDE_LOGLEVEL_DEBUG,
1957 side_field_list(
1958 side_field_gather_enum("5", &myenumgather,
1959 side_elem(
1960 side_type_gather_unsigned_integer(0, sizeof(uint32_t), 0, 0,
a82ffcff 1961 SIDE_TYPE_GATHER_ACCESS_DIRECT)
0519cb86
MD
1962 )
1963 ),
67337c4a
MD
1964 side_field_gather_enum("400", &myenumgather,
1965 side_elem(
1966 side_type_gather_unsigned_integer(0, sizeof(uint64_t), 0, 0,
a82ffcff 1967 SIDE_TYPE_GATHER_ACCESS_DIRECT)
0519cb86
MD
1968 )
1969 ),
67337c4a
MD
1970 side_field_gather_enum("200", &myenumgather,
1971 side_elem(
1972 side_type_gather_unsigned_integer(0, sizeof(uint8_t), 0, 0,
a82ffcff 1973 SIDE_TYPE_GATHER_ACCESS_DIRECT)
0519cb86
MD
1974 )
1975 ),
67337c4a
MD
1976 side_field_gather_enum("-100", &myenumgather,
1977 side_elem(
1978 side_type_gather_signed_integer(0, sizeof(int8_t), 0, 0,
a82ffcff 1979 SIDE_TYPE_GATHER_ACCESS_DIRECT)
0519cb86
MD
1980 )
1981 ),
67337c4a
MD
1982 side_field_gather_enum("6_be", &myenumgather,
1983 side_elem(
1984 side_type_gather_unsigned_integer_be(0, sizeof(uint32_t), 0, 0,
a82ffcff 1985 SIDE_TYPE_GATHER_ACCESS_DIRECT)
0519cb86
MD
1986 )
1987 ),
67337c4a
MD
1988 side_field_gather_enum("6_le", &myenumgather,
1989 side_elem(
1990 side_type_gather_unsigned_integer_le(0, sizeof(uint32_t), 0, 0,
a82ffcff 1991 SIDE_TYPE_GATHER_ACCESS_DIRECT)
0519cb86
MD
1992 )
1993 ),
a82ffcff 1994 )
0519cb86
MD
1995);
1996
1997static
1998void test_gather_enum(void)
1999{
2000 uint32_t v1 = 5;
2001 uint64_t v2 = 400;
2002 uint8_t v3 = 200;
2003 int8_t v4 = -100;
67337c4a
MD
2004#if SIDE_BYTE_ORDER == SIDE_LITTLE_ENDIAN
2005 uint32_t v5 = side_bswap_32(6);
0519cb86
MD
2006 uint32_t v6 = 6;
2007#else
2008 uint32_t v5 = 6;
67337c4a 2009 uint32_t v6 = side_bswap_32(6);
0519cb86
MD
2010#endif
2011
67337c4a
MD
2012 side_event(my_provider_event_enum_gather,
2013 side_arg_list(
2014 side_arg_gather_integer(&v1),
2015 side_arg_gather_integer(&v2),
2016 side_arg_gather_integer(&v3),
2017 side_arg_gather_integer(&v4),
2018 side_arg_gather_integer(&v5),
2019 side_arg_gather_integer(&v6),
0519cb86
MD
2020 )
2021 );
2022}
2023
67337c4a
MD
2024side_static_event(my_provider_event_gatherstring,
2025 "myprovider", "myeventgatherstring", SIDE_LOGLEVEL_DEBUG,
2026 side_field_list(
a82ffcff 2027 side_field_gather_string("string", 0, SIDE_TYPE_GATHER_ACCESS_DIRECT),
67337c4a 2028 side_field_gather_array("arrayptr",
a82ffcff
MD
2029 side_elem(side_type_gather_string(0, SIDE_TYPE_GATHER_ACCESS_POINTER)),
2030 3, 0, SIDE_TYPE_GATHER_ACCESS_DIRECT
7d34edfc 2031 ),
67337c4a 2032 side_field_gather_array("array",
a82ffcff
MD
2033 side_elem(side_type_gather_string(0, SIDE_TYPE_GATHER_ACCESS_DIRECT)),
2034 3, 0, SIDE_TYPE_GATHER_ACCESS_DIRECT
7d34edfc 2035 ),
a82ffcff 2036 )
7d34edfc
MD
2037);
2038
2039static
2040void test_gather_string(void)
2041{
67337c4a 2042 side_event_cond(my_provider_event_gatherstring) {
9365e936
MJ
2043 const char *str1 = "abcdef";
2044 const char *ptrarray[3] = {
7d34edfc
MD
2045 "abc",
2046 "def",
2047 "ghi",
2048 };
2049 char flatarray[] = { 'a', 'b', '\0', 'c', 'd', '\0', 'e', 'f', '\0' };
2050
67337c4a
MD
2051 side_event_call(my_provider_event_gatherstring,
2052 side_arg_list(
2053 side_arg_gather_string(str1),
2054 side_arg_gather_array(ptrarray),
2055 side_arg_gather_array(flatarray),
7d34edfc
MD
2056 )
2057 );
2058 }
2059}
2060
67337c4a
MD
2061side_static_event(my_provider_event_str_utf, "myprovider", "myevent_str_utf", SIDE_LOGLEVEL_DEBUG,
2062 side_field_list(
a82ffcff
MD
2063 side_field_string("utf8"),
2064 side_field_string32("utf32"),
2065 side_field_string16("utf16"),
2066 side_field_string32_le("utf32_le"),
2067 side_field_string16_le("utf16_le"),
2068 side_field_string32_be("utf32_be"),
2069 side_field_string16_be("utf16_be"),
67337c4a 2070 side_field_dynamic("dynamic_utf32"),
a82ffcff
MD
2071 side_field_gather_string32("gather_utf32", 0, SIDE_TYPE_GATHER_ACCESS_DIRECT),
2072 )
52990f65
MD
2073);
2074
2075static
2076void test_string_utf(void)
2077{
2078 /*
2079 * Character '®' is:
2080 * UTF-8: \c2 \ae
2081 * UTF-16: U+00ae
2082 * UTF-32: U+000000ae
2083 */
2084 uint8_t str8[] = { 0xc2, 0xae, 'a', 'b', 'c', 0 };
2085 uint32_t str32[] = { 0x000000ae, 'a', 'b', 'c', 0 };
2086 uint16_t str16[] = { 0x00ae, 'a', 'b', 'c', 0 };
67337c4a 2087#if SIDE_BYTE_ORDER == SIDE_LITTLE_ENDIAN
52990f65
MD
2088 uint32_t str32_le[] = { 0x000000ae, 'a', 'b', 'c', 0 };
2089 uint16_t str16_le[] = { 0x00ae, 'a', 'b', 'c', 0 };
67337c4a
MD
2090 uint32_t str32_be[] = { side_bswap_32(0x000000ae), side_bswap_32('a'), side_bswap_32('b'), side_bswap_32('c'), 0 };
2091 uint16_t str16_be[] = { side_bswap_16(0x00ae), side_bswap_16('a'), side_bswap_16('b'), side_bswap_16('c'), 0 };
52990f65 2092#else
67337c4a
MD
2093 uint32_t str32_le[] = { side_bswap_32(0x000000ae), side_bswap_32('a'), side_bswap_32('b'), side_bswap_32('c'), 0 };
2094 uint16_t str16_le[] = { side_bswap_16(0x00ae), side_bswap_16('a'), side_bswap_16('b'), side_bswap_16('c'), 0 };
52990f65
MD
2095 uint32_t str32_be[] = { 0x000000ae, 'a', 'b', 'c', 0 };
2096 uint16_t str16_be[] = { 0x00ae, 'a', 'b', 'c', 0 };
2097#endif
2098
67337c4a
MD
2099 side_event(my_provider_event_str_utf,
2100 side_arg_list(
2101 side_arg_string(str8),
2102 side_arg_string32(str32),
2103 side_arg_string16(str16),
2104 side_arg_string32(str32_le),
2105 side_arg_string16(str16_le),
2106 side_arg_string32(str32_be),
2107 side_arg_string16(str16_be),
a82ffcff 2108 side_arg_dynamic_string32(str32),
67337c4a 2109 side_arg_gather_string(str32),
52990f65
MD
2110 )
2111 );
2112}
2113
5530345d 2114static side_define_variant(myvariantdef,
a82ffcff 2115 side_type_u32(),
5530345d 2116 side_option_list(
a82ffcff
MD
2117 side_option_range(1, 3, side_type_u16()),
2118 side_option(5, side_type_string()),
2119 )
5530345d
MD
2120);
2121
2122side_static_event(my_provider_event_variant, "myprovider", "myeventvariant", SIDE_LOGLEVEL_DEBUG,
2123 side_field_list(
2124 side_field_variant("variant1", &myvariantdef),
2125 side_field_variant("variant2", &myvariantdef),
a82ffcff
MD
2126 side_field_u8("z"),
2127 )
5530345d
MD
2128);
2129
2130static
2131void test_variant(void)
2132{
2133 side_event_cond(my_provider_event_variant) {
2134 side_arg_define_variant(myvariant1, side_arg_u32(2), side_arg_u16(4));
2135 side_arg_define_variant(myvariant2, side_arg_u32(5), side_arg_string("abc"));
2136
2137 side_event_call(my_provider_event_variant,
2138 side_arg_list(
2139 side_arg_variant(&myvariant1),
2140 side_arg_variant(&myvariant2),
2141 side_arg_u8(55),
2142 )
2143 );
2144 }
2145}
2146
0cbdadb5
MD
2147#ifdef __SIZEOF_INT128__
2148side_static_event(my_provider_event_integer128, "myprovider", "myevent_integer128", SIDE_LOGLEVEL_DEBUG,
2149 side_field_list(
2150 side_field_s128("signed128_base2", side_attr_list(side_attr("std.integer.base", side_attr_u8(2)))),
2151 side_field_u128("unsigned128_base2", side_attr_list(side_attr("std.integer.base", side_attr_u8(2)))),
2152 side_field_s128("signed128_base8", side_attr_list(side_attr("std.integer.base", side_attr_u8(8)))),
2153 side_field_u128("unsigned128_base8", side_attr_list(side_attr("std.integer.base", side_attr_u8(8)))),
2154 side_field_s128("signed128_base10", side_attr_list(side_attr("std.integer.base", side_attr_u8(10)))),
2155 side_field_u128("unsigned128_base10", side_attr_list(side_attr("std.integer.base", side_attr_u8(10)))),
2156 side_field_s128("signed128_base16", side_attr_list(side_attr("std.integer.base", side_attr_u8(16)))),
2157 side_field_u128("unsigned128_base16", side_attr_list(side_attr("std.integer.base", side_attr_u8(16)))),
2158 )
2159);
2160
2161static
2162void test_integer128(void)
2163{
2164 side_event_cond(my_provider_event_integer128) {
2165 __int128 s_v128 = 0;
2166 unsigned __int128 u_v128;
2167
2168 /* -2^63 - 1 */
2169 s_v128 = INT64_MIN;
2170 s_v128--;
2171 /* Maximum unsigned 128-bit value: 340282366920938463463374607431768211455. */
2172 u_v128 = 0;
2173 u_v128--;
2174 side_event_call(my_provider_event_integer128,
2175 side_arg_list(
2176 side_arg_s128(s_v128),
2177 side_arg_u128(u_v128),
2178 side_arg_s128(s_v128),
2179 side_arg_u128(u_v128),
2180 side_arg_s128(s_v128),
2181 side_arg_u128(u_v128),
2182 side_arg_s128(s_v128),
2183 side_arg_u128(u_v128),
2184 )
2185 );
2186 }
2187 side_event_cond(my_provider_event_integer128) {
2188 __int128 s_v128 = 0;
2189 unsigned __int128 u_v128;
2190
2191 /* Minimum signed 128-bit value: -170141183460469231731687303715884105728 */
2192 s_v128 = 1;
2193 s_v128 <<= 64;
2194 s_v128 <<= 63;
2195 /* Zero. */
2196 u_v128 = 0;
2197 side_event_call(my_provider_event_integer128,
2198 side_arg_list(
2199 side_arg_s128(s_v128),
2200 side_arg_u128(u_v128),
2201 side_arg_s128(s_v128),
2202 side_arg_u128(u_v128),
2203 side_arg_s128(s_v128),
2204 side_arg_u128(u_v128),
2205 side_arg_s128(s_v128),
2206 side_arg_u128(u_v128),
2207 )
2208 );
2209 }
2210 side_event_cond(my_provider_event_integer128) {
2211 __int128 s_v128 = 0;
2212 unsigned __int128 u_v128;
2213
2214 /* Minimum signed 128-bit value + 1: -170141183460469231731687303715884105727 */
2215 s_v128 = 1;
2216 s_v128 <<= 64;
2217 s_v128 <<= 63;
2218 s_v128++;
2219 /* INT64_MAX + 1. */
2220 u_v128 = INT64_MAX; /* 9223372036854775807LL */
2221 u_v128++;
2222 side_event_call(my_provider_event_integer128,
2223 side_arg_list(
2224 side_arg_s128(s_v128),
2225 side_arg_u128(u_v128),
2226 side_arg_s128(s_v128),
2227 side_arg_u128(u_v128),
2228 side_arg_s128(s_v128),
2229 side_arg_u128(u_v128),
2230 side_arg_s128(s_v128),
2231 side_arg_u128(u_v128),
2232 )
2233 );
2234 }
2235}
2236#else
2237static
2238void test_integer128(void)
2239{
2240}
2241#endif
2242
2243
f611d0c3
MD
2244int main()
2245{
2246 test_fields();
89747802
MD
2247 test_event_hidden();
2248 test_event_export();
c7a14585 2249 test_struct_literal();
f611d0c3
MD
2250 test_struct();
2251 test_array();
2252 test_vla();
2253 test_vla_visitor();
cdd6e858 2254 test_vla_visitor_2d();
a2e2357e
MD
2255 test_dynamic_basic_type();
2256 test_dynamic_vla();
465e5e7e 2257 test_dynamic_null();
c208889e
MD
2258 test_dynamic_struct();
2259 test_dynamic_nested_struct();
2260 test_dynamic_vla_struct();
2261 test_dynamic_struct_vla();
948e3e72 2262 test_dynamic_nested_vla();
19fa6aa2 2263 test_variadic();
41c4d119 2264 test_static_variadic();
4f40d951
MD
2265 test_bool();
2266 test_dynamic_bool();
8ceca0cd 2267 test_dynamic_vla_with_visitor();
2b359235 2268 test_dynamic_struct_with_visitor();
65010f43 2269 test_event_user_attribute();
a848763d 2270 test_field_user_attribute();
808bd9bf
MD
2271 test_variadic_attr();
2272 test_variadic_vla_attr();
2273 test_variadic_struct_attr();
fb25b355
MD
2274 test_float();
2275 test_variadic_float();
79f677ba 2276 test_enum();
ea32e5fc 2277 test_enum_bitmap();
7aec0d09 2278 test_blob();
71aa8975 2279 test_fmt_string();
8bdd5c12 2280 test_endian();
1d9c515c 2281 test_base();
d41cb7ee
MD
2282 test_struct_gather();
2283 test_struct_gather_nest_ptr();
2284 test_struct_gather_float();
2285 test_array_gather();
2286 test_gather_structnest();
2287 test_gather_vla();
2288 test_gather_vla_flex();
d69918cc 2289 test_gather_byte();
8ad2f385 2290 test_gather_bool();
4e1b0e0e 2291 test_gather_pointer();
0519cb86 2292 test_gather_enum();
7d34edfc 2293 test_gather_string();
52990f65 2294 test_string_utf();
5530345d 2295 test_variant();
0cbdadb5 2296 test_integer128();
f611d0c3
MD
2297 return 0;
2298}
This page took 0.147 seconds and 4 git commands to generate.