Print "element:" for dynamic type
[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
17static side_define_event(my_provider_event, "myprovider", "myevent", SIDE_LOGLEVEL_DEBUG,
18 side_field_list(
485b800a
MD
19 side_field_u32("abc", side_attr_list()),
20 side_field_s64("def", side_attr_list()),
21 side_field_dynamic("dynamic", side_attr_list()),
399c836b
MD
22 ),
23 side_attr_list()
f611d0c3
MD
24);
25
26static
27void test_fields(void)
28{
29 uint32_t uw = 42;
30 int64_t sdw = -500;
31
d5cdb129
MD
32 my_provider_event_enabled = 1;
33 side_event(my_provider_event, side_arg_list(side_arg_u32(uw), side_arg_s64(sdw),
808bd9bf 34 side_arg_dynamic(side_arg_dynamic_string("zzz", side_attr_list()))));
f611d0c3
MD
35}
36
c7a14585 37static side_define_event(my_provider_event_struct_literal, "myprovider", "myeventstructliteral", SIDE_LOGLEVEL_DEBUG,
f611d0c3 38 side_field_list(
c7a14585
MD
39 side_field_struct("structliteral",
40 side_struct_literal(
41 side_field_list(
42 side_field_u32("x", side_attr_list()),
43 side_field_s64("y", side_attr_list()),
44 ),
45 side_attr_list()
46 )
f611d0c3 47 ),
485b800a 48 side_field_u8("z", side_attr_list()),
399c836b
MD
49 ),
50 side_attr_list()
f611d0c3
MD
51);
52
c7a14585
MD
53static
54void test_struct_literal(void)
55{
56 my_provider_event_struct_literal_enabled = 1;
57 side_event_cond(my_provider_event_struct_literal) {
58 side_arg_define_vec(mystruct, side_arg_list(side_arg_u32(21), side_arg_s64(22)));
59 side_event_call(my_provider_event_struct_literal, side_arg_list(side_arg_struct(&mystruct), side_arg_u8(55)));
60 }
61}
62
63static side_define_struct(mystructdef,
64 side_field_list(
65 side_field_u32("x", side_attr_list()),
66 side_field_s64("y", side_attr_list()),
67 ),
68 side_attr_list()
69);
70
71static side_define_event(my_provider_event_struct, "myprovider", "myeventstruct", SIDE_LOGLEVEL_DEBUG,
72 side_field_list(
73 side_field_struct("struct", &mystructdef),
74 side_field_u8("z", side_attr_list()),
75 ),
76 side_attr_list()
77);
78
f611d0c3
MD
79static
80void test_struct(void)
81{
c7a14585
MD
82 my_provider_event_struct_enabled = 1;
83 side_event_cond(my_provider_event_struct) {
f611d0c3 84 side_arg_define_vec(mystruct, side_arg_list(side_arg_u32(21), side_arg_s64(22)));
c7a14585 85 side_event_call(my_provider_event_struct, side_arg_list(side_arg_struct(&mystruct), side_arg_u8(55)));
f611d0c3
MD
86 }
87}
88
89static side_define_event(my_provider_event_array, "myprovider", "myarray", SIDE_LOGLEVEL_DEBUG,
90 side_field_list(
9a55f555 91 side_field_array("arr", side_elem(side_type_u32(side_attr_list())), 3, side_attr_list()),
485b800a 92 side_field_s64("v", side_attr_list()),
399c836b
MD
93 ),
94 side_attr_list()
f611d0c3
MD
95);
96
97static
98void test_array(void)
99{
d5cdb129
MD
100 my_provider_event_array_enabled = 1;
101 side_event_cond(my_provider_event_array) {
f611d0c3 102 side_arg_define_vec(myarray, side_arg_list(side_arg_u32(1), side_arg_u32(2), side_arg_u32(3)));
d5cdb129 103 side_event_call(my_provider_event_array, side_arg_list(side_arg_array(&myarray), side_arg_s64(42)));
f611d0c3
MD
104 }
105}
106
107static side_define_event(my_provider_event_vla, "myprovider", "myvla", SIDE_LOGLEVEL_DEBUG,
108 side_field_list(
9a55f555 109 side_field_vla("vla", side_elem(side_type_u32(side_attr_list())), side_attr_list()),
485b800a 110 side_field_s64("v", side_attr_list()),
399c836b
MD
111 ),
112 side_attr_list()
f611d0c3
MD
113);
114
115static
116void test_vla(void)
117{
d5cdb129
MD
118 my_provider_event_vla_enabled = 1;
119 side_event_cond(my_provider_event_vla) {
f611d0c3 120 side_arg_define_vec(myvla, side_arg_list(side_arg_u32(1), side_arg_u32(2), side_arg_u32(3)));
d5cdb129 121 side_event_call(my_provider_event_vla, side_arg_list(side_arg_vla(&myvla), side_arg_s64(42)));
f611d0c3
MD
122 }
123}
124
cdd6e858
MD
125/* 1D array visitor */
126
f611d0c3
MD
127struct app_visitor_ctx {
128 const uint32_t *ptr;
352a4b77 129 uint32_t length;
f611d0c3
MD
130};
131
352a4b77
MD
132static
133enum side_visitor_status test_visitor(const struct side_tracer_visitor_ctx *tracer_ctx, void *_ctx)
f611d0c3
MD
134{
135 struct app_visitor_ctx *ctx = (struct app_visitor_ctx *) _ctx;
352a4b77
MD
136 uint32_t length = ctx->length, i;
137
138 for (i = 0; i < length; i++) {
ffb5c809
MD
139 const struct side_arg_vec elem = side_arg_u32(ctx->ptr[i]);
140
db6ecef9
MD
141 if (tracer_ctx->write_elem(tracer_ctx, &elem) != SIDE_VISITOR_STATUS_OK)
142 return SIDE_VISITOR_STATUS_ERROR;
352a4b77 143 }
f611d0c3
MD
144 return SIDE_VISITOR_STATUS_OK;
145}
146
147static uint32_t testarray[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
148
149static side_define_event(my_provider_event_vla_visitor, "myprovider", "myvlavisit", SIDE_LOGLEVEL_DEBUG,
150 side_field_list(
9a55f555 151 side_field_vla_visitor("vlavisit", side_elem(side_type_u32(side_attr_list())), test_visitor, side_attr_list()),
485b800a 152 side_field_s64("v", side_attr_list()),
399c836b
MD
153 ),
154 side_attr_list()
f611d0c3
MD
155);
156
157static
158void test_vla_visitor(void)
159{
d5cdb129
MD
160 my_provider_event_vla_visitor_enabled = 1;
161 side_event_cond(my_provider_event_vla_visitor) {
f611d0c3
MD
162 struct app_visitor_ctx ctx = {
163 .ptr = testarray,
352a4b77 164 .length = SIDE_ARRAY_SIZE(testarray),
f611d0c3 165 };
d5cdb129 166 side_event_call(my_provider_event_vla_visitor, side_arg_list(side_arg_vla_visitor(&ctx), side_arg_s64(42)));
f611d0c3
MD
167 }
168}
169
cdd6e858
MD
170/* 2D array visitor */
171
172struct app_visitor_2d_inner_ctx {
173 const uint32_t *ptr;
174 uint32_t length;
175};
176
177static
178enum side_visitor_status test_inner_visitor(const struct side_tracer_visitor_ctx *tracer_ctx, void *_ctx)
179{
180 struct app_visitor_2d_inner_ctx *ctx = (struct app_visitor_2d_inner_ctx *) _ctx;
181 uint32_t length = ctx->length, i;
182
183 for (i = 0; i < length; i++) {
ffb5c809
MD
184 const struct side_arg_vec elem = side_arg_u32(ctx->ptr[i]);
185
db6ecef9
MD
186 if (tracer_ctx->write_elem(tracer_ctx, &elem) != SIDE_VISITOR_STATUS_OK)
187 return SIDE_VISITOR_STATUS_ERROR;
cdd6e858
MD
188 }
189 return SIDE_VISITOR_STATUS_OK;
190}
191
192struct app_visitor_2d_outer_ctx {
193 const uint32_t (*ptr)[2];
194 uint32_t length;
195};
196
197static
198enum side_visitor_status test_outer_visitor(const struct side_tracer_visitor_ctx *tracer_ctx, void *_ctx)
199{
200 struct app_visitor_2d_outer_ctx *ctx = (struct app_visitor_2d_outer_ctx *) _ctx;
201 uint32_t length = ctx->length, i;
202
203 for (i = 0; i < length; i++) {
204 struct app_visitor_2d_inner_ctx inner_ctx = {
205 .ptr = ctx->ptr[i],
206 .length = 2,
207 };
208 const struct side_arg_vec elem = side_arg_vla_visitor(&inner_ctx);
db6ecef9
MD
209 if (tracer_ctx->write_elem(tracer_ctx, &elem) != SIDE_VISITOR_STATUS_OK)
210 return SIDE_VISITOR_STATUS_ERROR;
cdd6e858
MD
211 }
212 return SIDE_VISITOR_STATUS_OK;
213}
214
215static uint32_t testarray2d[][2] = {
216 { 1, 2 },
217 { 33, 44 },
218 { 55, 66 },
219};
220
221static side_define_event(my_provider_event_vla_visitor2d, "myprovider", "myvlavisit2d", SIDE_LOGLEVEL_DEBUG,
222 side_field_list(
223 side_field_vla_visitor("vlavisit2d",
f37a556f 224 side_elem(
32ba58fc 225 side_type_vla_visitor(
9a55f555 226 side_elem(side_type_u32(side_attr_list())),
f37a556f
MD
227 test_inner_visitor,
228 side_attr_list())
229 ), test_outer_visitor, side_attr_list()),
485b800a 230 side_field_s64("v", side_attr_list()),
399c836b
MD
231 ),
232 side_attr_list()
cdd6e858
MD
233);
234
235static
236void test_vla_visitor_2d(void)
237{
d5cdb129
MD
238 my_provider_event_vla_visitor2d_enabled = 1;
239 side_event_cond(my_provider_event_vla_visitor2d) {
cdd6e858
MD
240 struct app_visitor_2d_outer_ctx ctx = {
241 .ptr = testarray2d,
242 .length = SIDE_ARRAY_SIZE(testarray2d),
243 };
d5cdb129 244 side_event_call(my_provider_event_vla_visitor2d, side_arg_list(side_arg_vla_visitor(&ctx), side_arg_s64(42)));
cdd6e858
MD
245 }
246}
247
ba845af5
MD
248static int64_t array_fixint[] = { -444, 555, 123, 2897432587 };
249
250static side_define_event(my_provider_event_array_fixint, "myprovider", "myarrayfixint", SIDE_LOGLEVEL_DEBUG,
251 side_field_list(
9a55f555 252 side_field_array("arrfixint", side_elem(side_type_s64(side_attr_list())), SIDE_ARRAY_SIZE(array_fixint), side_attr_list()),
485b800a 253 side_field_s64("v", side_attr_list()),
399c836b
MD
254 ),
255 side_attr_list()
ba845af5
MD
256);
257
258static
259void test_array_fixint(void)
260{
d5cdb129
MD
261 my_provider_event_array_fixint_enabled = 1;
262 side_event(my_provider_event_array_fixint,
1533629f
MD
263 side_arg_list(side_arg_array_s64(array_fixint), side_arg_s64(42)));
264}
265
266static int64_t vla_fixint[] = { -444, 555, 123, 2897432587 };
267
268static side_define_event(my_provider_event_vla_fixint, "myprovider", "myvlafixint", SIDE_LOGLEVEL_DEBUG,
269 side_field_list(
9a55f555 270 side_field_vla("vlafixint", side_elem(side_type_s64(side_attr_list())), side_attr_list()),
485b800a 271 side_field_s64("v", side_attr_list()),
399c836b
MD
272 ),
273 side_attr_list()
1533629f
MD
274);
275
276static
277void test_vla_fixint(void)
278{
d5cdb129
MD
279 my_provider_event_vla_fixint_enabled = 1;
280 side_event(my_provider_event_vla_fixint,
1533629f 281 side_arg_list(side_arg_vla_s64(vla_fixint, SIDE_ARRAY_SIZE(vla_fixint)), side_arg_s64(42)));
ba845af5
MD
282}
283
a2e2357e
MD
284static side_define_event(my_provider_event_dynamic_basic,
285 "myprovider", "mydynamicbasic", SIDE_LOGLEVEL_DEBUG,
286 side_field_list(
485b800a 287 side_field_dynamic("dynamic", side_attr_list()),
399c836b
MD
288 ),
289 side_attr_list()
a2e2357e
MD
290);
291
292static
293void test_dynamic_basic_type(void)
294{
d5cdb129
MD
295 my_provider_event_dynamic_basic_enabled = 1;
296 side_event(my_provider_event_dynamic_basic,
808bd9bf 297 side_arg_list(side_arg_dynamic(side_arg_dynamic_s16(-33, side_attr_list()))));
a2e2357e
MD
298}
299
300static side_define_event(my_provider_event_dynamic_vla,
301 "myprovider", "mydynamicvla", SIDE_LOGLEVEL_DEBUG,
302 side_field_list(
485b800a 303 side_field_dynamic("dynamic", side_attr_list()),
399c836b
MD
304 ),
305 side_attr_list()
a2e2357e
MD
306);
307
308static
309void test_dynamic_vla(void)
310{
948e3e72
MD
311 side_arg_dynamic_define_vec(myvla,
312 side_arg_list(
808bd9bf
MD
313 side_arg_dynamic_u32(1, side_attr_list()),
314 side_arg_dynamic_u32(2, side_attr_list()),
315 side_arg_dynamic_u32(3, side_attr_list()),
df075fa5
MD
316 )
317 );
d5cdb129
MD
318 my_provider_event_dynamic_vla_enabled = 1;
319 side_event(my_provider_event_dynamic_vla,
808bd9bf 320 side_arg_list(side_arg_dynamic(side_arg_dynamic_vla(&myvla, side_attr_list()))));
a2e2357e
MD
321}
322
465e5e7e
MD
323static side_define_event(my_provider_event_dynamic_null,
324 "myprovider", "mydynamicnull", SIDE_LOGLEVEL_DEBUG,
325 side_field_list(
485b800a 326 side_field_dynamic("dynamic", side_attr_list()),
399c836b
MD
327 ),
328 side_attr_list()
465e5e7e
MD
329);
330
331static
332void test_dynamic_null(void)
333{
d5cdb129
MD
334 my_provider_event_dynamic_null_enabled = 1;
335 side_event(my_provider_event_dynamic_null,
808bd9bf 336 side_arg_list(side_arg_dynamic(side_arg_dynamic_null(side_attr_list()))));
465e5e7e
MD
337}
338
c208889e
MD
339static side_define_event(my_provider_event_dynamic_struct,
340 "myprovider", "mydynamicstruct", SIDE_LOGLEVEL_DEBUG,
465e5e7e 341 side_field_list(
485b800a 342 side_field_dynamic("dynamic", side_attr_list()),
399c836b
MD
343 ),
344 side_attr_list()
465e5e7e
MD
345);
346
347static
c208889e 348void test_dynamic_struct(void)
465e5e7e 349{
c208889e 350 side_arg_dynamic_define_struct(mystruct,
465e5e7e 351 side_arg_list(
808bd9bf
MD
352 side_arg_dynamic_field("a", side_arg_dynamic_u32(43, side_attr_list())),
353 side_arg_dynamic_field("b", side_arg_dynamic_string("zzz", side_attr_list())),
354 side_arg_dynamic_field("c", side_arg_dynamic_null(side_attr_list())),
465e5e7e
MD
355 )
356 );
357
d5cdb129
MD
358 my_provider_event_dynamic_struct_enabled = 1;
359 side_event(my_provider_event_dynamic_struct,
808bd9bf 360 side_arg_list(side_arg_dynamic(side_arg_dynamic_struct(&mystruct, side_attr_list()))));
465e5e7e
MD
361}
362
c208889e
MD
363static side_define_event(my_provider_event_dynamic_nested_struct,
364 "myprovider", "mydynamicnestedstruct", SIDE_LOGLEVEL_DEBUG,
3222d397 365 side_field_list(
485b800a 366 side_field_dynamic("dynamic", side_attr_list()),
399c836b
MD
367 ),
368 side_attr_list()
3222d397
MD
369);
370
371static
c208889e 372void test_dynamic_nested_struct(void)
3222d397 373{
c208889e 374 side_arg_dynamic_define_struct(nested,
3222d397 375 side_arg_list(
808bd9bf
MD
376 side_arg_dynamic_field("a", side_arg_dynamic_u32(43, side_attr_list())),
377 side_arg_dynamic_field("b", side_arg_dynamic_u8(55, side_attr_list())),
3222d397
MD
378 )
379 );
c208889e 380 side_arg_dynamic_define_struct(nested2,
3222d397 381 side_arg_list(
808bd9bf
MD
382 side_arg_dynamic_field("aa", side_arg_dynamic_u64(128, side_attr_list())),
383 side_arg_dynamic_field("bb", side_arg_dynamic_u16(1, side_attr_list())),
3222d397
MD
384 )
385 );
c208889e 386 side_arg_dynamic_define_struct(mystruct,
3222d397 387 side_arg_list(
808bd9bf
MD
388 side_arg_dynamic_field("nested", side_arg_dynamic_struct(&nested, side_attr_list())),
389 side_arg_dynamic_field("nested2", side_arg_dynamic_struct(&nested2, side_attr_list())),
3222d397
MD
390 )
391 );
d5cdb129
MD
392 my_provider_event_dynamic_nested_struct_enabled = 1;
393 side_event(my_provider_event_dynamic_nested_struct,
808bd9bf 394 side_arg_list(side_arg_dynamic(side_arg_dynamic_struct(&mystruct, side_attr_list()))));
3222d397
MD
395}
396
c208889e
MD
397static side_define_event(my_provider_event_dynamic_vla_struct,
398 "myprovider", "mydynamicvlastruct", SIDE_LOGLEVEL_DEBUG,
7ce1b78f 399 side_field_list(
485b800a 400 side_field_dynamic("dynamic", side_attr_list()),
399c836b
MD
401 ),
402 side_attr_list()
7ce1b78f
MD
403);
404
405static
c208889e 406void test_dynamic_vla_struct(void)
7ce1b78f 407{
c208889e 408 side_arg_dynamic_define_struct(nested,
7ce1b78f 409 side_arg_list(
808bd9bf
MD
410 side_arg_dynamic_field("a", side_arg_dynamic_u32(43, side_attr_list())),
411 side_arg_dynamic_field("b", side_arg_dynamic_u8(55, side_attr_list())),
7ce1b78f
MD
412 )
413 );
414 side_arg_dynamic_define_vec(myvla,
415 side_arg_list(
808bd9bf
MD
416 side_arg_dynamic_struct(&nested, side_attr_list()),
417 side_arg_dynamic_struct(&nested, side_attr_list()),
418 side_arg_dynamic_struct(&nested, side_attr_list()),
419 side_arg_dynamic_struct(&nested, side_attr_list()),
7ce1b78f
MD
420 )
421 );
d5cdb129
MD
422 my_provider_event_dynamic_vla_struct_enabled = 1;
423 side_event(my_provider_event_dynamic_vla_struct,
808bd9bf 424 side_arg_list(side_arg_dynamic(side_arg_dynamic_vla(&myvla, side_attr_list()))));
7ce1b78f
MD
425}
426
c208889e
MD
427static side_define_event(my_provider_event_dynamic_struct_vla,
428 "myprovider", "mydynamicstructvla", SIDE_LOGLEVEL_DEBUG,
980bfdc4 429 side_field_list(
485b800a 430 side_field_dynamic("dynamic", side_attr_list()),
399c836b
MD
431 ),
432 side_attr_list()
980bfdc4
MD
433);
434
435static
c208889e 436void test_dynamic_struct_vla(void)
980bfdc4
MD
437{
438 side_arg_dynamic_define_vec(myvla,
948e3e72 439 side_arg_list(
808bd9bf
MD
440 side_arg_dynamic_u32(1, side_attr_list()),
441 side_arg_dynamic_u32(2, side_attr_list()),
442 side_arg_dynamic_u32(3, side_attr_list()),
df075fa5
MD
443 )
444 );
980bfdc4 445 side_arg_dynamic_define_vec(myvla2,
948e3e72 446 side_arg_list(
808bd9bf
MD
447 side_arg_dynamic_u32(4, side_attr_list()),
448 side_arg_dynamic_u64(5, side_attr_list()),
449 side_arg_dynamic_u32(6, side_attr_list()),
df075fa5
MD
450 )
451 );
c208889e 452 side_arg_dynamic_define_struct(mystruct,
980bfdc4 453 side_arg_list(
808bd9bf
MD
454 side_arg_dynamic_field("a", side_arg_dynamic_vla(&myvla, side_attr_list())),
455 side_arg_dynamic_field("b", side_arg_dynamic_vla(&myvla2, side_attr_list())),
980bfdc4
MD
456 )
457 );
d5cdb129
MD
458 my_provider_event_dynamic_struct_vla_enabled = 1;
459 side_event(my_provider_event_dynamic_struct_vla,
808bd9bf 460 side_arg_list(side_arg_dynamic(side_arg_dynamic_struct(&mystruct, side_attr_list()))));
980bfdc4
MD
461}
462
948e3e72
MD
463static side_define_event(my_provider_event_dynamic_nested_vla,
464 "myprovider", "mydynamicnestedvla", SIDE_LOGLEVEL_DEBUG,
465 side_field_list(
485b800a 466 side_field_dynamic("dynamic", side_attr_list()),
399c836b
MD
467 ),
468 side_attr_list()
948e3e72
MD
469);
470
471static
472void test_dynamic_nested_vla(void)
473{
474 side_arg_dynamic_define_vec(nestedvla,
475 side_arg_list(
808bd9bf
MD
476 side_arg_dynamic_u32(1, side_attr_list()),
477 side_arg_dynamic_u16(2, side_attr_list()),
478 side_arg_dynamic_u32(3, side_attr_list()),
948e3e72
MD
479 )
480 );
481 side_arg_dynamic_define_vec(nestedvla2,
482 side_arg_list(
808bd9bf
MD
483 side_arg_dynamic_u8(4, side_attr_list()),
484 side_arg_dynamic_u32(5, side_attr_list()),
485 side_arg_dynamic_u32(6, side_attr_list()),
948e3e72
MD
486 )
487 );
488 side_arg_dynamic_define_vec(myvla,
489 side_arg_list(
808bd9bf
MD
490 side_arg_dynamic_vla(&nestedvla, side_attr_list()),
491 side_arg_dynamic_vla(&nestedvla2, side_attr_list()),
948e3e72
MD
492 )
493 );
d5cdb129
MD
494 my_provider_event_dynamic_nested_vla_enabled = 1;
495 side_event(my_provider_event_dynamic_nested_vla,
808bd9bf 496 side_arg_list(side_arg_dynamic(side_arg_dynamic_vla(&myvla, side_attr_list()))));
948e3e72
MD
497}
498
8a25ce77 499static side_define_event_variadic(my_provider_event_variadic,
19fa6aa2 500 "myprovider", "myvariadicevent", SIDE_LOGLEVEL_DEBUG,
399c836b
MD
501 side_field_list(),
502 side_attr_list()
19fa6aa2
MD
503);
504
505static
506void test_variadic(void)
507{
d5cdb129
MD
508 my_provider_event_variadic_enabled = 1;
509 side_event_variadic(my_provider_event_variadic,
19fa6aa2
MD
510 side_arg_list(),
511 side_arg_list(
808bd9bf
MD
512 side_arg_dynamic_field("a", side_arg_dynamic_u32(55, side_attr_list())),
513 side_arg_dynamic_field("b", side_arg_dynamic_s8(-4, side_attr_list())),
19fa6aa2
MD
514 )
515 );
516}
517
8a25ce77 518static side_define_event_variadic(my_provider_event_static_variadic,
41c4d119
MD
519 "myprovider", "mystaticvariadicevent", SIDE_LOGLEVEL_DEBUG,
520 side_field_list(
485b800a
MD
521 side_field_u32("abc", side_attr_list()),
522 side_field_u16("def", side_attr_list()),
399c836b
MD
523 ),
524 side_attr_list()
41c4d119
MD
525);
526
527static
528void test_static_variadic(void)
529{
d5cdb129
MD
530 my_provider_event_static_variadic_enabled = 1;
531 side_event_variadic(my_provider_event_static_variadic,
41c4d119
MD
532 side_arg_list(
533 side_arg_u32(1),
534 side_arg_u16(2),
535 ),
536 side_arg_list(
808bd9bf
MD
537 side_arg_dynamic_field("a", side_arg_dynamic_u32(55, side_attr_list())),
538 side_arg_dynamic_field("b", side_arg_dynamic_s8(-4, side_attr_list())),
41c4d119
MD
539 )
540 );
541}
542
4f40d951
MD
543static side_define_event(my_provider_event_bool, "myprovider", "myeventbool", SIDE_LOGLEVEL_DEBUG,
544 side_field_list(
485b800a
MD
545 side_field_bool("a_false", side_attr_list()),
546 side_field_bool("b_true", side_attr_list()),
547 side_field_bool("c_true", side_attr_list()),
548 side_field_bool("d_true", side_attr_list()),
549 side_field_bool("e_true", side_attr_list()),
550 side_field_bool("f_false", side_attr_list()),
551 side_field_bool("g_true", side_attr_list()),
399c836b
MD
552 ),
553 side_attr_list()
4f40d951
MD
554);
555
556static
557void test_bool(void)
558{
559 uint32_t a = 0;
560 uint32_t b = 1;
561 uint64_t c = 0x12345678;
562 int16_t d = -32768;
563 bool e = true;
564 bool f = false;
565 uint32_t g = 256;
566
d5cdb129
MD
567 my_provider_event_bool_enabled = 1;
568 side_event(my_provider_event_bool,
4f40d951
MD
569 side_arg_list(
570 side_arg_bool(a),
571 side_arg_bool(b),
572 side_arg_bool(c),
573 side_arg_bool(d),
574 side_arg_bool(e),
575 side_arg_bool(f),
576 side_arg_bool(g),
577 )
578 );
579}
580
8a25ce77 581static side_define_event_variadic(my_provider_event_dynamic_bool,
4f40d951 582 "myprovider", "mydynamicbool", SIDE_LOGLEVEL_DEBUG,
399c836b
MD
583 side_field_list(),
584 side_attr_list()
4f40d951
MD
585);
586
587static
588void test_dynamic_bool(void)
589{
d5cdb129
MD
590 my_provider_event_dynamic_bool_enabled = 1;
591 side_event_variadic(my_provider_event_dynamic_bool,
4f40d951
MD
592 side_arg_list(),
593 side_arg_list(
808bd9bf
MD
594 side_arg_dynamic_field("a_true", side_arg_dynamic_bool(55, side_attr_list())),
595 side_arg_dynamic_field("b_true", side_arg_dynamic_bool(-4, side_attr_list())),
596 side_arg_dynamic_field("c_false", side_arg_dynamic_bool(0, side_attr_list())),
597 side_arg_dynamic_field("d_true", side_arg_dynamic_bool(256, side_attr_list())),
4f40d951
MD
598 )
599 );
600}
601
8ceca0cd
MD
602static side_define_event(my_provider_event_dynamic_vla_visitor,
603 "myprovider", "mydynamicvlavisitor", SIDE_LOGLEVEL_DEBUG,
604 side_field_list(
485b800a 605 side_field_dynamic("dynamic", side_attr_list()),
399c836b
MD
606 ),
607 side_attr_list()
8ceca0cd
MD
608);
609
610struct app_dynamic_vla_visitor_ctx {
611 const uint32_t *ptr;
612 uint32_t length;
613};
614
615static
616enum side_visitor_status test_dynamic_vla_visitor(const struct side_tracer_dynamic_vla_visitor_ctx *tracer_ctx, void *_ctx)
617{
618 struct app_dynamic_vla_visitor_ctx *ctx = (struct app_dynamic_vla_visitor_ctx *) _ctx;
619 uint32_t length = ctx->length, i;
620
621 for (i = 0; i < length; i++) {
622 const struct side_arg_dynamic_vec elem = {
623 .dynamic_type = SIDE_DYNAMIC_TYPE_U32,
808bd9bf
MD
624 .nr_attr = 0,
625 .attr = NULL,
8ceca0cd
MD
626 .u = {
627 .side_u32 = ctx->ptr[i],
628 },
629 };
630 if (tracer_ctx->write_elem(tracer_ctx, &elem) != SIDE_VISITOR_STATUS_OK)
631 return SIDE_VISITOR_STATUS_ERROR;
632 }
633 return SIDE_VISITOR_STATUS_OK;
634}
635
636static uint32_t testarray_dynamic_vla[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
637
638static
639void test_dynamic_vla_with_visitor(void)
640{
d5cdb129
MD
641 my_provider_event_dynamic_vla_visitor_enabled = 1;
642 side_event_cond(my_provider_event_dynamic_vla_visitor) {
8ceca0cd
MD
643 struct app_dynamic_vla_visitor_ctx ctx = {
644 .ptr = testarray_dynamic_vla,
645 .length = SIDE_ARRAY_SIZE(testarray_dynamic_vla),
646 };
d5cdb129 647 side_event_call(my_provider_event_dynamic_vla_visitor,
8ceca0cd
MD
648 side_arg_list(
649 side_arg_dynamic(
808bd9bf 650 side_arg_dynamic_vla_visitor(test_dynamic_vla_visitor, &ctx, side_attr_list())
8ceca0cd
MD
651 )
652 )
653 );
654 }
655}
656
2b359235
MD
657static side_define_event(my_provider_event_dynamic_struct_visitor,
658 "myprovider", "mydynamicstructvisitor", SIDE_LOGLEVEL_DEBUG,
659 side_field_list(
485b800a 660 side_field_dynamic("dynamic", side_attr_list()),
399c836b
MD
661 ),
662 side_attr_list()
2b359235
MD
663);
664
665struct struct_visitor_pair {
666 const char *name;
667 uint32_t value;
668};
669
670struct app_dynamic_struct_visitor_ctx {
671 const struct struct_visitor_pair *ptr;
672 uint32_t length;
673};
674
675static
676enum side_visitor_status test_dynamic_struct_visitor(const struct side_tracer_dynamic_struct_visitor_ctx *tracer_ctx, void *_ctx)
677{
678 struct app_dynamic_struct_visitor_ctx *ctx = (struct app_dynamic_struct_visitor_ctx *) _ctx;
679 uint32_t length = ctx->length, i;
680
681 for (i = 0; i < length; i++) {
682 struct side_arg_dynamic_event_field dynamic_field = {
683 .field_name = ctx->ptr[i].name,
684 .elem = {
685 .dynamic_type = SIDE_DYNAMIC_TYPE_U32,
808bd9bf
MD
686 .nr_attr = 0,
687 .attr = NULL,
2b359235
MD
688 .u = {
689 .side_u32 = ctx->ptr[i].value,
690 },
691 },
692 };
693 if (tracer_ctx->write_field(tracer_ctx, &dynamic_field) != SIDE_VISITOR_STATUS_OK)
694 return SIDE_VISITOR_STATUS_ERROR;
695 }
696 return SIDE_VISITOR_STATUS_OK;
697}
698
699static struct struct_visitor_pair testarray_dynamic_struct[] = {
700 { "a", 1, },
701 { "b", 2, },
702 { "c", 3, },
703 { "d", 4, },
704};
705
706static
707void test_dynamic_struct_with_visitor(void)
708{
d5cdb129
MD
709 my_provider_event_dynamic_struct_visitor_enabled = 1;
710 side_event_cond(my_provider_event_dynamic_struct_visitor) {
2b359235
MD
711 struct app_dynamic_struct_visitor_ctx ctx = {
712 .ptr = testarray_dynamic_struct,
713 .length = SIDE_ARRAY_SIZE(testarray_dynamic_struct),
714 };
d5cdb129 715 side_event_call(my_provider_event_dynamic_struct_visitor,
2b359235
MD
716 side_arg_list(
717 side_arg_dynamic(
808bd9bf 718 side_arg_dynamic_struct_visitor(test_dynamic_struct_visitor, &ctx, side_attr_list())
2b359235
MD
719 )
720 )
721 );
722 }
723}
724
a848763d 725static side_define_event(my_provider_event_user_attribute, "myprovider", "myevent_user_attribute", SIDE_LOGLEVEL_DEBUG,
65010f43 726 side_field_list(
485b800a
MD
727 side_field_u32("abc", side_attr_list()),
728 side_field_s64("def", side_attr_list()),
399c836b
MD
729 ),
730 side_attr_list(
bc3c89b3
MD
731 side_attr("user_attribute_a", side_attr_string("val1")),
732 side_attr("user_attribute_b", side_attr_string("val2")),
65010f43
MD
733 )
734);
735
736static
737void test_event_user_attribute(void)
738{
d5cdb129
MD
739 my_provider_event_user_attribute_enabled = 1;
740 side_event(my_provider_event_user_attribute, side_arg_list(side_arg_u32(1), side_arg_s64(2)));
65010f43
MD
741}
742
a848763d
MD
743static side_define_event(my_provider_field_user_attribute, "myprovider", "myevent_field_attribute", SIDE_LOGLEVEL_DEBUG,
744 side_field_list(
485b800a 745 side_field_u32("abc",
a848763d 746 side_attr_list(
bc3c89b3
MD
747 side_attr("user_attribute_a", side_attr_string("val1")),
748 side_attr("user_attribute_b", side_attr_u32(2)),
a848763d
MD
749 )
750 ),
485b800a 751 side_field_s64("def",
a848763d 752 side_attr_list(
bc3c89b3
MD
753 side_attr("user_attribute_c", side_attr_string("val3")),
754 side_attr("user_attribute_d", side_attr_s64(-5)),
a848763d
MD
755 )
756 ),
757 ),
758 side_attr_list()
759);
760
761static
762void test_field_user_attribute(void)
763{
d5cdb129
MD
764 my_provider_field_user_attribute_enabled = 1;
765 side_event(my_provider_field_user_attribute, side_arg_list(side_arg_u32(1), side_arg_s64(2)));
a848763d
MD
766}
767
808bd9bf
MD
768static side_define_event_variadic(my_provider_event_variadic_attr,
769 "myprovider", "myvariadiceventattr", SIDE_LOGLEVEL_DEBUG,
770 side_field_list(),
771 side_attr_list()
772);
773
774static
775void test_variadic_attr(void)
776{
d5cdb129
MD
777 my_provider_event_variadic_attr_enabled = 1;
778 side_event_variadic(my_provider_event_variadic_attr,
808bd9bf
MD
779 side_arg_list(),
780 side_arg_list(
781 side_arg_dynamic_field("a",
782 side_arg_dynamic_u32(55,
783 side_attr_list(
bc3c89b3
MD
784 side_attr("user_attribute_c", side_attr_string("valX")),
785 side_attr("user_attribute_d", side_attr_u8(55)),
808bd9bf
MD
786 )
787 )
788 ),
789 side_arg_dynamic_field("b",
790 side_arg_dynamic_s8(-4,
791 side_attr_list(
bc3c89b3
MD
792 side_attr("X", side_attr_u8(1)),
793 side_attr("Y", side_attr_s8(2)),
808bd9bf
MD
794 )
795 )
796 ),
797 )
798 );
799}
800
801static side_define_event_variadic(my_provider_event_variadic_vla_attr,
802 "myprovider", "myvariadiceventvlaattr", SIDE_LOGLEVEL_DEBUG,
803 side_field_list(),
804 side_attr_list()
805);
806
807static
808void test_variadic_vla_attr(void)
809{
810 side_arg_dynamic_define_vec(myvla,
811 side_arg_list(
812 side_arg_dynamic_u32(1,
813 side_attr_list(
bc3c89b3
MD
814 side_attr("Z", side_attr_u8(0)),
815 side_attr("A", side_attr_u8(123)),
808bd9bf
MD
816 )
817 ),
818 side_arg_dynamic_u32(2, side_attr_list()),
819 side_arg_dynamic_u32(3, side_attr_list()),
820 )
821 );
d5cdb129
MD
822 my_provider_event_variadic_vla_attr_enabled = 1;
823 side_event_variadic(my_provider_event_variadic_vla_attr,
808bd9bf
MD
824 side_arg_list(),
825 side_arg_list(
826 side_arg_dynamic_field("a",
827 side_arg_dynamic_vla(&myvla,
828 side_attr_list(
bc3c89b3
MD
829 side_attr("X", side_attr_u8(1)),
830 side_attr("Y", side_attr_u8(2)),
808bd9bf
MD
831 )
832 )
833 ),
834 )
835 );
836}
837
838static side_define_event_variadic(my_provider_event_variadic_struct_attr,
839 "myprovider", "myvariadiceventstructattr", SIDE_LOGLEVEL_DEBUG,
840 side_field_list(),
841 side_attr_list()
842);
843
844static
845void test_variadic_struct_attr(void)
846{
d5cdb129
MD
847 my_provider_event_variadic_struct_attr_enabled = 1;
848 side_event_cond(my_provider_event_variadic_struct_attr) {
808bd9bf
MD
849 side_arg_dynamic_define_struct(mystruct,
850 side_arg_list(
851 side_arg_dynamic_field("a",
852 side_arg_dynamic_u32(43,
853 side_attr_list(
bc3c89b3 854 side_attr("A", side_attr_bool(true)),
808bd9bf
MD
855 )
856 )
857 ),
858 side_arg_dynamic_field("b", side_arg_dynamic_u8(55, side_attr_list())),
859 )
860 );
d5cdb129 861 side_event_call_variadic(my_provider_event_variadic_struct_attr,
808bd9bf
MD
862 side_arg_list(),
863 side_arg_list(
864 side_arg_dynamic_field("a",
865 side_arg_dynamic_struct(&mystruct,
866 side_attr_list(
bc3c89b3
MD
867 side_attr("X", side_attr_u8(1)),
868 side_attr("Y", side_attr_u8(2)),
808bd9bf
MD
869 )
870 )
871 ),
872 )
873 );
874 }
875}
876
fb25b355
MD
877static side_define_event(my_provider_event_float, "myprovider", "myeventfloat", SIDE_LOGLEVEL_DEBUG,
878 side_field_list(
879#if __HAVE_FLOAT16
485b800a 880 side_field_float_binary16("binary16", side_attr_list()),
fb25b355
MD
881#endif
882#if __HAVE_FLOAT32
485b800a 883 side_field_float_binary32("binary32", side_attr_list()),
fb25b355
MD
884#endif
885#if __HAVE_FLOAT64
485b800a 886 side_field_float_binary64("binary64", side_attr_list()),
fb25b355
MD
887#endif
888#if __HAVE_FLOAT128
485b800a 889 side_field_float_binary128("binary128", side_attr_list()),
fb25b355
MD
890#endif
891 ),
892 side_attr_list()
893);
894
895static
896void test_float(void)
897{
d5cdb129
MD
898 my_provider_event_float_enabled = 1;
899 side_event(my_provider_event_float,
fb25b355
MD
900 side_arg_list(
901#if __HAVE_FLOAT16
902 side_arg_float_binary16(1.1),
903#endif
904#if __HAVE_FLOAT32
905 side_arg_float_binary32(2.2),
906#endif
907#if __HAVE_FLOAT64
908 side_arg_float_binary64(3.3),
909#endif
910#if __HAVE_FLOAT128
911 side_arg_float_binary128(4.4),
912#endif
913 )
914 );
915}
916
917static side_define_event_variadic(my_provider_event_variadic_float,
918 "myprovider", "myvariadicfloat", SIDE_LOGLEVEL_DEBUG,
919 side_field_list(),
920 side_attr_list()
921);
922
923static
924void test_variadic_float(void)
925{
d5cdb129
MD
926 my_provider_event_variadic_float_enabled = 1;
927 side_event_variadic(my_provider_event_variadic_float,
fb25b355
MD
928 side_arg_list(),
929 side_arg_list(
930#if __HAVE_FLOAT16
931 side_arg_dynamic_field("binary16",
932 side_arg_dynamic_float_binary16(1.1, side_attr_list())
933 ),
934#endif
935#if __HAVE_FLOAT32
936 side_arg_dynamic_field("binary32",
937 side_arg_dynamic_float_binary32(2.2, side_attr_list())
938 ),
939#endif
940#if __HAVE_FLOAT64
941 side_arg_dynamic_field("binary64",
942 side_arg_dynamic_float_binary64(3.3, side_attr_list())
943 ),
944#endif
945#if __HAVE_FLOAT128
946 side_arg_dynamic_field("binary128",
947 side_arg_dynamic_float_binary128(4.4, side_attr_list())
948 ),
949#endif
950 )
951 );
952}
953
79f677ba 954static side_define_enum(myenum,
66cff328 955 side_enum_mapping_list(
79f677ba
MD
956 side_enum_mapping_range("one-ten", 1, 10),
957 side_enum_mapping_range("100-200", 100, 200),
958 side_enum_mapping_value("200", 200),
959 side_enum_mapping_value("300", 300),
960 )
961);
962
963static side_define_event(my_provider_event_enum, "myprovider", "myeventenum", SIDE_LOGLEVEL_DEBUG,
964 side_field_list(
f0975428
MD
965 side_field_enum_u32("5", &myenum, side_attr_list()),
966 side_field_enum_u64("400", &myenum, side_attr_list()),
967 side_field_enum_u8("200", &myenum, side_attr_list()),
968 side_field_enum_s8("-100", &myenum, side_attr_list()),
79f677ba
MD
969 ),
970 side_attr_list()
971);
972
973static
974void test_enum(void)
975{
d5cdb129
MD
976 my_provider_event_enum_enabled = 1;
977 side_event(my_provider_event_enum,
79f677ba
MD
978 side_arg_list(
979 side_arg_enum_u32(5),
980 side_arg_enum_u64(400),
981 side_arg_enum_u8(200),
982 side_arg_enum_s8(-100),
983 )
984 );
985}
986
ea32e5fc 987/* A bitmap enum maps bits to labels. */
66cff328
MD
988static side_define_enum_bitmap(myenum_bitmap,
989 side_enum_bitmap_mapping_list(
990 side_enum_bitmap_mapping_value("0", 0),
991 side_enum_bitmap_mapping_range("1-2", 1, 2),
992 side_enum_bitmap_mapping_range("2-4", 2, 4),
993 side_enum_bitmap_mapping_value("3", 3),
994 side_enum_bitmap_mapping_value("30", 30),
995 side_enum_bitmap_mapping_value("63", 63),
ea32e5fc
MD
996 )
997);
998
999static side_define_event(my_provider_event_enum_bitmap, "myprovider", "myeventenumbitmap", SIDE_LOGLEVEL_DEBUG,
1000 side_field_list(
f0975428
MD
1001 side_field_enum_bitmap32("bit_0", &myenum_bitmap, side_attr_list()),
1002 side_field_enum_bitmap32("bit_1", &myenum_bitmap, side_attr_list()),
1003 side_field_enum_bitmap8("bit_2", &myenum_bitmap, side_attr_list()),
1004 side_field_enum_bitmap8("bit_3", &myenum_bitmap, side_attr_list()),
1005 side_field_enum_bitmap32("bit_30", &myenum_bitmap, side_attr_list()),
1006 side_field_enum_bitmap32("bit_31", &myenum_bitmap, side_attr_list()),
1007 side_field_enum_bitmap64("bit_63", &myenum_bitmap, side_attr_list()),
1008 side_field_enum_bitmap64("bits_1+63", &myenum_bitmap, side_attr_list()),
ea32e5fc
MD
1009 ),
1010 side_attr_list()
1011);
1012
1013static
1014void test_enum_bitmap(void)
1015{
d5cdb129
MD
1016 my_provider_event_enum_bitmap_enabled = 1;
1017 side_event(my_provider_event_enum_bitmap,
ea32e5fc
MD
1018 side_arg_list(
1019 side_arg_enum_bitmap32(1 << 0),
1020 side_arg_enum_bitmap32(1 << 1),
1021 side_arg_enum_bitmap8(1 << 2),
1022 side_arg_enum_bitmap8(1 << 3),
1023 side_arg_enum_bitmap32(1 << 30),
1024 side_arg_enum_bitmap32(1 << 31),
1025 side_arg_enum_bitmap64(1ULL << 63),
1026 side_arg_enum_bitmap64((1ULL << 1) | (1ULL << 63)),
1027 )
1028 );
1029}
1030
7aec0d09
MD
1031static uint8_t blob_fixint[] = { 0x55, 0x44, 0x33, 0x22, 0x11 };
1032
199e7aa9 1033static side_define_event_variadic(my_provider_event_blob, "myprovider", "myeventblob", SIDE_LOGLEVEL_DEBUG,
7aec0d09
MD
1034 side_field_list(
1035 side_field_blob("blobfield", side_attr_list()),
1036 side_field_array("arrayblob", side_elem(side_type_blob(side_attr_list())), 3, side_attr_list()),
1037 side_field_array("arrayblobfix", side_elem(side_type_blob(side_attr_list())), SIDE_ARRAY_SIZE(blob_fixint), side_attr_list()),
1038 side_field_vla("vlablobfix", side_elem(side_type_blob(side_attr_list())), side_attr_list()),
1039 ),
1040 side_attr_list()
1041);
1042
1043static
1044void test_blob(void)
1045{
d5cdb129
MD
1046 my_provider_event_blob_enabled = 1;
1047 side_event_cond(my_provider_event_blob) {
7aec0d09 1048 side_arg_define_vec(myarray, side_arg_list(side_arg_blob(1), side_arg_blob(2), side_arg_blob(3)));
199e7aa9
MD
1049 side_arg_dynamic_define_vec(myvla,
1050 side_arg_list(
1051 side_arg_dynamic_blob(0x22, side_attr_list()),
1052 side_arg_dynamic_blob(0x33, side_attr_list()),
1053 )
1054 );
d5cdb129 1055 side_event_call_variadic(my_provider_event_blob,
7aec0d09
MD
1056 side_arg_list(
1057 side_arg_blob(0x55),
1058 side_arg_array(&myarray),
1059 side_arg_array_blob(blob_fixint),
1060 side_arg_vla_blob(blob_fixint, SIDE_ARRAY_SIZE(blob_fixint)),
199e7aa9
MD
1061 ),
1062 side_arg_list(
1063 side_arg_dynamic_field("varblobfield",
1064 side_arg_dynamic_blob(0x55, side_attr_list())
1065 ),
1066 side_arg_dynamic_field("varblobvla",
1067 side_arg_dynamic_vla(&myvla, side_attr_list())
1068 ),
7aec0d09
MD
1069 )
1070 );
1071 }
1072}
ea32e5fc 1073
f611d0c3
MD
1074int main()
1075{
1076 test_fields();
c7a14585 1077 test_struct_literal();
f611d0c3
MD
1078 test_struct();
1079 test_array();
1080 test_vla();
1081 test_vla_visitor();
cdd6e858 1082 test_vla_visitor_2d();
ba845af5 1083 test_array_fixint();
1533629f 1084 test_vla_fixint();
a2e2357e
MD
1085 test_dynamic_basic_type();
1086 test_dynamic_vla();
465e5e7e 1087 test_dynamic_null();
c208889e
MD
1088 test_dynamic_struct();
1089 test_dynamic_nested_struct();
1090 test_dynamic_vla_struct();
1091 test_dynamic_struct_vla();
948e3e72 1092 test_dynamic_nested_vla();
19fa6aa2 1093 test_variadic();
41c4d119 1094 test_static_variadic();
4f40d951
MD
1095 test_bool();
1096 test_dynamic_bool();
8ceca0cd 1097 test_dynamic_vla_with_visitor();
2b359235 1098 test_dynamic_struct_with_visitor();
65010f43 1099 test_event_user_attribute();
a848763d 1100 test_field_user_attribute();
808bd9bf
MD
1101 test_variadic_attr();
1102 test_variadic_vla_attr();
1103 test_variadic_struct_attr();
fb25b355
MD
1104 test_float();
1105 test_variadic_float();
79f677ba 1106 test_enum();
ea32e5fc 1107 test_enum_bitmap();
7aec0d09 1108 test_blob();
f611d0c3
MD
1109 return 0;
1110}
This page took 0.075726 seconds and 4 git commands to generate.