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