Fix dynamic attributes printing
[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()),
8d20e708
MD
316 ),
317 side_attr_list()
df075fa5 318 );
d5cdb129
MD
319 my_provider_event_dynamic_vla_enabled = 1;
320 side_event(my_provider_event_dynamic_vla,
8d20e708 321 side_arg_list(side_arg_dynamic(side_arg_dynamic_vla(&myvla))));
a2e2357e
MD
322}
323
465e5e7e
MD
324static side_define_event(my_provider_event_dynamic_null,
325 "myprovider", "mydynamicnull", SIDE_LOGLEVEL_DEBUG,
326 side_field_list(
485b800a 327 side_field_dynamic("dynamic", side_attr_list()),
399c836b
MD
328 ),
329 side_attr_list()
465e5e7e
MD
330);
331
332static
333void test_dynamic_null(void)
334{
d5cdb129
MD
335 my_provider_event_dynamic_null_enabled = 1;
336 side_event(my_provider_event_dynamic_null,
808bd9bf 337 side_arg_list(side_arg_dynamic(side_arg_dynamic_null(side_attr_list()))));
465e5e7e
MD
338}
339
c208889e
MD
340static side_define_event(my_provider_event_dynamic_struct,
341 "myprovider", "mydynamicstruct", SIDE_LOGLEVEL_DEBUG,
465e5e7e 342 side_field_list(
485b800a 343 side_field_dynamic("dynamic", side_attr_list()),
399c836b
MD
344 ),
345 side_attr_list()
465e5e7e
MD
346);
347
348static
c208889e 349void test_dynamic_struct(void)
465e5e7e 350{
c208889e 351 side_arg_dynamic_define_struct(mystruct,
465e5e7e 352 side_arg_list(
808bd9bf
MD
353 side_arg_dynamic_field("a", side_arg_dynamic_u32(43, side_attr_list())),
354 side_arg_dynamic_field("b", side_arg_dynamic_string("zzz", side_attr_list())),
355 side_arg_dynamic_field("c", side_arg_dynamic_null(side_attr_list())),
8d20e708
MD
356 ),
357 side_attr_list()
465e5e7e
MD
358 );
359
d5cdb129
MD
360 my_provider_event_dynamic_struct_enabled = 1;
361 side_event(my_provider_event_dynamic_struct,
8d20e708 362 side_arg_list(side_arg_dynamic(side_arg_dynamic_struct(&mystruct))));
465e5e7e
MD
363}
364
c208889e
MD
365static side_define_event(my_provider_event_dynamic_nested_struct,
366 "myprovider", "mydynamicnestedstruct", SIDE_LOGLEVEL_DEBUG,
3222d397 367 side_field_list(
485b800a 368 side_field_dynamic("dynamic", side_attr_list()),
399c836b
MD
369 ),
370 side_attr_list()
3222d397
MD
371);
372
373static
c208889e 374void test_dynamic_nested_struct(void)
3222d397 375{
c208889e 376 side_arg_dynamic_define_struct(nested,
3222d397 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_u8(55, side_attr_list())),
8d20e708
MD
380 ),
381 side_attr_list()
3222d397 382 );
c208889e 383 side_arg_dynamic_define_struct(nested2,
3222d397 384 side_arg_list(
808bd9bf
MD
385 side_arg_dynamic_field("aa", side_arg_dynamic_u64(128, side_attr_list())),
386 side_arg_dynamic_field("bb", side_arg_dynamic_u16(1, side_attr_list())),
8d20e708
MD
387 ),
388 side_attr_list()
3222d397 389 );
c208889e 390 side_arg_dynamic_define_struct(mystruct,
3222d397 391 side_arg_list(
8d20e708
MD
392 side_arg_dynamic_field("nested", side_arg_dynamic_struct(&nested)),
393 side_arg_dynamic_field("nested2", side_arg_dynamic_struct(&nested2)),
394 ),
395 side_attr_list()
3222d397 396 );
d5cdb129
MD
397 my_provider_event_dynamic_nested_struct_enabled = 1;
398 side_event(my_provider_event_dynamic_nested_struct,
8d20e708 399 side_arg_list(side_arg_dynamic(side_arg_dynamic_struct(&mystruct))));
3222d397
MD
400}
401
c208889e
MD
402static side_define_event(my_provider_event_dynamic_vla_struct,
403 "myprovider", "mydynamicvlastruct", SIDE_LOGLEVEL_DEBUG,
7ce1b78f 404 side_field_list(
485b800a 405 side_field_dynamic("dynamic", side_attr_list()),
399c836b
MD
406 ),
407 side_attr_list()
7ce1b78f
MD
408);
409
410static
c208889e 411void test_dynamic_vla_struct(void)
7ce1b78f 412{
c208889e 413 side_arg_dynamic_define_struct(nested,
7ce1b78f 414 side_arg_list(
808bd9bf
MD
415 side_arg_dynamic_field("a", side_arg_dynamic_u32(43, side_attr_list())),
416 side_arg_dynamic_field("b", side_arg_dynamic_u8(55, side_attr_list())),
8d20e708
MD
417 ),
418 side_attr_list()
7ce1b78f
MD
419 );
420 side_arg_dynamic_define_vec(myvla,
421 side_arg_list(
8d20e708
MD
422 side_arg_dynamic_struct(&nested),
423 side_arg_dynamic_struct(&nested),
424 side_arg_dynamic_struct(&nested),
425 side_arg_dynamic_struct(&nested),
426 ),
427 side_attr_list()
7ce1b78f 428 );
d5cdb129
MD
429 my_provider_event_dynamic_vla_struct_enabled = 1;
430 side_event(my_provider_event_dynamic_vla_struct,
8d20e708 431 side_arg_list(side_arg_dynamic(side_arg_dynamic_vla(&myvla))));
7ce1b78f
MD
432}
433
c208889e
MD
434static side_define_event(my_provider_event_dynamic_struct_vla,
435 "myprovider", "mydynamicstructvla", SIDE_LOGLEVEL_DEBUG,
980bfdc4 436 side_field_list(
485b800a 437 side_field_dynamic("dynamic", side_attr_list()),
399c836b
MD
438 ),
439 side_attr_list()
980bfdc4
MD
440);
441
442static
c208889e 443void test_dynamic_struct_vla(void)
980bfdc4
MD
444{
445 side_arg_dynamic_define_vec(myvla,
948e3e72 446 side_arg_list(
808bd9bf
MD
447 side_arg_dynamic_u32(1, side_attr_list()),
448 side_arg_dynamic_u32(2, side_attr_list()),
449 side_arg_dynamic_u32(3, side_attr_list()),
8d20e708
MD
450 ),
451 side_attr_list()
df075fa5 452 );
980bfdc4 453 side_arg_dynamic_define_vec(myvla2,
948e3e72 454 side_arg_list(
808bd9bf
MD
455 side_arg_dynamic_u32(4, side_attr_list()),
456 side_arg_dynamic_u64(5, side_attr_list()),
457 side_arg_dynamic_u32(6, side_attr_list()),
8d20e708
MD
458 ),
459 side_attr_list()
df075fa5 460 );
c208889e 461 side_arg_dynamic_define_struct(mystruct,
980bfdc4 462 side_arg_list(
8d20e708
MD
463 side_arg_dynamic_field("a", side_arg_dynamic_vla(&myvla)),
464 side_arg_dynamic_field("b", side_arg_dynamic_vla(&myvla2)),
465 ),
466 side_attr_list()
980bfdc4 467 );
d5cdb129
MD
468 my_provider_event_dynamic_struct_vla_enabled = 1;
469 side_event(my_provider_event_dynamic_struct_vla,
8d20e708 470 side_arg_list(side_arg_dynamic(side_arg_dynamic_struct(&mystruct))));
980bfdc4
MD
471}
472
948e3e72
MD
473static side_define_event(my_provider_event_dynamic_nested_vla,
474 "myprovider", "mydynamicnestedvla", SIDE_LOGLEVEL_DEBUG,
475 side_field_list(
485b800a 476 side_field_dynamic("dynamic", side_attr_list()),
399c836b
MD
477 ),
478 side_attr_list()
948e3e72
MD
479);
480
481static
482void test_dynamic_nested_vla(void)
483{
484 side_arg_dynamic_define_vec(nestedvla,
485 side_arg_list(
808bd9bf
MD
486 side_arg_dynamic_u32(1, side_attr_list()),
487 side_arg_dynamic_u16(2, side_attr_list()),
488 side_arg_dynamic_u32(3, side_attr_list()),
8d20e708
MD
489 ),
490 side_attr_list()
948e3e72
MD
491 );
492 side_arg_dynamic_define_vec(nestedvla2,
493 side_arg_list(
808bd9bf
MD
494 side_arg_dynamic_u8(4, side_attr_list()),
495 side_arg_dynamic_u32(5, side_attr_list()),
496 side_arg_dynamic_u32(6, side_attr_list()),
8d20e708
MD
497 ),
498 side_attr_list()
948e3e72
MD
499 );
500 side_arg_dynamic_define_vec(myvla,
501 side_arg_list(
8d20e708
MD
502 side_arg_dynamic_vla(&nestedvla),
503 side_arg_dynamic_vla(&nestedvla2),
504 ),
505 side_attr_list()
948e3e72 506 );
d5cdb129
MD
507 my_provider_event_dynamic_nested_vla_enabled = 1;
508 side_event(my_provider_event_dynamic_nested_vla,
8d20e708 509 side_arg_list(side_arg_dynamic(side_arg_dynamic_vla(&myvla))));
948e3e72
MD
510}
511
8a25ce77 512static side_define_event_variadic(my_provider_event_variadic,
19fa6aa2 513 "myprovider", "myvariadicevent", SIDE_LOGLEVEL_DEBUG,
399c836b
MD
514 side_field_list(),
515 side_attr_list()
19fa6aa2
MD
516);
517
518static
519void test_variadic(void)
520{
d5cdb129
MD
521 my_provider_event_variadic_enabled = 1;
522 side_event_variadic(my_provider_event_variadic,
19fa6aa2
MD
523 side_arg_list(),
524 side_arg_list(
808bd9bf
MD
525 side_arg_dynamic_field("a", side_arg_dynamic_u32(55, side_attr_list())),
526 side_arg_dynamic_field("b", side_arg_dynamic_s8(-4, side_attr_list())),
8d20e708
MD
527 ),
528 side_attr_list()
19fa6aa2
MD
529 );
530}
531
8a25ce77 532static side_define_event_variadic(my_provider_event_static_variadic,
41c4d119
MD
533 "myprovider", "mystaticvariadicevent", SIDE_LOGLEVEL_DEBUG,
534 side_field_list(
485b800a
MD
535 side_field_u32("abc", side_attr_list()),
536 side_field_u16("def", side_attr_list()),
399c836b
MD
537 ),
538 side_attr_list()
41c4d119
MD
539);
540
541static
542void test_static_variadic(void)
543{
d5cdb129
MD
544 my_provider_event_static_variadic_enabled = 1;
545 side_event_variadic(my_provider_event_static_variadic,
41c4d119
MD
546 side_arg_list(
547 side_arg_u32(1),
548 side_arg_u16(2),
549 ),
550 side_arg_list(
808bd9bf
MD
551 side_arg_dynamic_field("a", side_arg_dynamic_u32(55, side_attr_list())),
552 side_arg_dynamic_field("b", side_arg_dynamic_s8(-4, side_attr_list())),
8d20e708
MD
553 ),
554 side_attr_list()
41c4d119
MD
555 );
556}
557
4f40d951
MD
558static side_define_event(my_provider_event_bool, "myprovider", "myeventbool", SIDE_LOGLEVEL_DEBUG,
559 side_field_list(
485b800a
MD
560 side_field_bool("a_false", side_attr_list()),
561 side_field_bool("b_true", side_attr_list()),
562 side_field_bool("c_true", side_attr_list()),
563 side_field_bool("d_true", side_attr_list()),
564 side_field_bool("e_true", side_attr_list()),
565 side_field_bool("f_false", side_attr_list()),
566 side_field_bool("g_true", side_attr_list()),
399c836b
MD
567 ),
568 side_attr_list()
4f40d951
MD
569);
570
571static
572void test_bool(void)
573{
574 uint32_t a = 0;
575 uint32_t b = 1;
576 uint64_t c = 0x12345678;
577 int16_t d = -32768;
578 bool e = true;
579 bool f = false;
580 uint32_t g = 256;
581
d5cdb129
MD
582 my_provider_event_bool_enabled = 1;
583 side_event(my_provider_event_bool,
4f40d951
MD
584 side_arg_list(
585 side_arg_bool(a),
586 side_arg_bool(b),
587 side_arg_bool(c),
588 side_arg_bool(d),
589 side_arg_bool(e),
590 side_arg_bool(f),
591 side_arg_bool(g),
592 )
593 );
594}
595
8a25ce77 596static side_define_event_variadic(my_provider_event_dynamic_bool,
4f40d951 597 "myprovider", "mydynamicbool", SIDE_LOGLEVEL_DEBUG,
399c836b
MD
598 side_field_list(),
599 side_attr_list()
4f40d951
MD
600);
601
602static
603void test_dynamic_bool(void)
604{
d5cdb129
MD
605 my_provider_event_dynamic_bool_enabled = 1;
606 side_event_variadic(my_provider_event_dynamic_bool,
4f40d951
MD
607 side_arg_list(),
608 side_arg_list(
808bd9bf
MD
609 side_arg_dynamic_field("a_true", side_arg_dynamic_bool(55, side_attr_list())),
610 side_arg_dynamic_field("b_true", side_arg_dynamic_bool(-4, side_attr_list())),
611 side_arg_dynamic_field("c_false", side_arg_dynamic_bool(0, side_attr_list())),
612 side_arg_dynamic_field("d_true", side_arg_dynamic_bool(256, side_attr_list())),
8d20e708
MD
613 ),
614 side_attr_list()
4f40d951
MD
615 );
616}
617
8ceca0cd
MD
618static side_define_event(my_provider_event_dynamic_vla_visitor,
619 "myprovider", "mydynamicvlavisitor", SIDE_LOGLEVEL_DEBUG,
620 side_field_list(
485b800a 621 side_field_dynamic("dynamic", side_attr_list()),
399c836b
MD
622 ),
623 side_attr_list()
8ceca0cd
MD
624);
625
626struct app_dynamic_vla_visitor_ctx {
627 const uint32_t *ptr;
628 uint32_t length;
629};
630
631static
632enum side_visitor_status test_dynamic_vla_visitor(const struct side_tracer_dynamic_vla_visitor_ctx *tracer_ctx, void *_ctx)
633{
634 struct app_dynamic_vla_visitor_ctx *ctx = (struct app_dynamic_vla_visitor_ctx *) _ctx;
635 uint32_t length = ctx->length, i;
636
637 for (i = 0; i < length; i++) {
638 const struct side_arg_dynamic_vec elem = {
639 .dynamic_type = SIDE_DYNAMIC_TYPE_U32,
640 .u = {
8d20e708
MD
641 .side_basic = {
642 .attr = NULL,
643 .nr_attr = 0,
644 .u = {
645 .side_u32 = ctx->ptr[i],
646 },
647 },
8ceca0cd
MD
648 },
649 };
650 if (tracer_ctx->write_elem(tracer_ctx, &elem) != SIDE_VISITOR_STATUS_OK)
651 return SIDE_VISITOR_STATUS_ERROR;
652 }
653 return SIDE_VISITOR_STATUS_OK;
654}
655
656static uint32_t testarray_dynamic_vla[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
657
658static
659void test_dynamic_vla_with_visitor(void)
660{
d5cdb129
MD
661 my_provider_event_dynamic_vla_visitor_enabled = 1;
662 side_event_cond(my_provider_event_dynamic_vla_visitor) {
8ceca0cd
MD
663 struct app_dynamic_vla_visitor_ctx ctx = {
664 .ptr = testarray_dynamic_vla,
665 .length = SIDE_ARRAY_SIZE(testarray_dynamic_vla),
666 };
d5cdb129 667 side_event_call(my_provider_event_dynamic_vla_visitor,
8ceca0cd
MD
668 side_arg_list(
669 side_arg_dynamic(
808bd9bf 670 side_arg_dynamic_vla_visitor(test_dynamic_vla_visitor, &ctx, side_attr_list())
8ceca0cd
MD
671 )
672 )
673 );
674 }
675}
676
2b359235
MD
677static side_define_event(my_provider_event_dynamic_struct_visitor,
678 "myprovider", "mydynamicstructvisitor", SIDE_LOGLEVEL_DEBUG,
679 side_field_list(
485b800a 680 side_field_dynamic("dynamic", side_attr_list()),
399c836b
MD
681 ),
682 side_attr_list()
2b359235
MD
683);
684
685struct struct_visitor_pair {
686 const char *name;
687 uint32_t value;
688};
689
690struct app_dynamic_struct_visitor_ctx {
691 const struct struct_visitor_pair *ptr;
692 uint32_t length;
693};
694
695static
696enum side_visitor_status test_dynamic_struct_visitor(const struct side_tracer_dynamic_struct_visitor_ctx *tracer_ctx, void *_ctx)
697{
698 struct app_dynamic_struct_visitor_ctx *ctx = (struct app_dynamic_struct_visitor_ctx *) _ctx;
699 uint32_t length = ctx->length, i;
700
701 for (i = 0; i < length; i++) {
702 struct side_arg_dynamic_event_field dynamic_field = {
703 .field_name = ctx->ptr[i].name,
704 .elem = {
705 .dynamic_type = SIDE_DYNAMIC_TYPE_U32,
706 .u = {
8d20e708
MD
707 .side_basic = {
708 .nr_attr = 0,
709 .attr = NULL,
710 .u = {
711 .side_u32 = ctx->ptr[i].value,
712 },
713 },
2b359235
MD
714 },
715 },
716 };
717 if (tracer_ctx->write_field(tracer_ctx, &dynamic_field) != SIDE_VISITOR_STATUS_OK)
718 return SIDE_VISITOR_STATUS_ERROR;
719 }
720 return SIDE_VISITOR_STATUS_OK;
721}
722
723static struct struct_visitor_pair testarray_dynamic_struct[] = {
724 { "a", 1, },
725 { "b", 2, },
726 { "c", 3, },
727 { "d", 4, },
728};
729
730static
731void test_dynamic_struct_with_visitor(void)
732{
d5cdb129
MD
733 my_provider_event_dynamic_struct_visitor_enabled = 1;
734 side_event_cond(my_provider_event_dynamic_struct_visitor) {
2b359235
MD
735 struct app_dynamic_struct_visitor_ctx ctx = {
736 .ptr = testarray_dynamic_struct,
737 .length = SIDE_ARRAY_SIZE(testarray_dynamic_struct),
738 };
d5cdb129 739 side_event_call(my_provider_event_dynamic_struct_visitor,
2b359235
MD
740 side_arg_list(
741 side_arg_dynamic(
808bd9bf 742 side_arg_dynamic_struct_visitor(test_dynamic_struct_visitor, &ctx, side_attr_list())
2b359235
MD
743 )
744 )
745 );
746 }
747}
748
a848763d 749static side_define_event(my_provider_event_user_attribute, "myprovider", "myevent_user_attribute", SIDE_LOGLEVEL_DEBUG,
65010f43 750 side_field_list(
485b800a
MD
751 side_field_u32("abc", side_attr_list()),
752 side_field_s64("def", side_attr_list()),
399c836b
MD
753 ),
754 side_attr_list(
bc3c89b3
MD
755 side_attr("user_attribute_a", side_attr_string("val1")),
756 side_attr("user_attribute_b", side_attr_string("val2")),
65010f43
MD
757 )
758);
759
760static
761void test_event_user_attribute(void)
762{
d5cdb129
MD
763 my_provider_event_user_attribute_enabled = 1;
764 side_event(my_provider_event_user_attribute, side_arg_list(side_arg_u32(1), side_arg_s64(2)));
65010f43
MD
765}
766
a848763d
MD
767static side_define_event(my_provider_field_user_attribute, "myprovider", "myevent_field_attribute", SIDE_LOGLEVEL_DEBUG,
768 side_field_list(
485b800a 769 side_field_u32("abc",
a848763d 770 side_attr_list(
bc3c89b3
MD
771 side_attr("user_attribute_a", side_attr_string("val1")),
772 side_attr("user_attribute_b", side_attr_u32(2)),
a848763d
MD
773 )
774 ),
485b800a 775 side_field_s64("def",
a848763d 776 side_attr_list(
bc3c89b3
MD
777 side_attr("user_attribute_c", side_attr_string("val3")),
778 side_attr("user_attribute_d", side_attr_s64(-5)),
a848763d
MD
779 )
780 ),
781 ),
782 side_attr_list()
783);
784
785static
786void test_field_user_attribute(void)
787{
d5cdb129
MD
788 my_provider_field_user_attribute_enabled = 1;
789 side_event(my_provider_field_user_attribute, side_arg_list(side_arg_u32(1), side_arg_s64(2)));
a848763d
MD
790}
791
808bd9bf
MD
792static side_define_event_variadic(my_provider_event_variadic_attr,
793 "myprovider", "myvariadiceventattr", SIDE_LOGLEVEL_DEBUG,
794 side_field_list(),
795 side_attr_list()
796);
797
798static
799void test_variadic_attr(void)
800{
d5cdb129
MD
801 my_provider_event_variadic_attr_enabled = 1;
802 side_event_variadic(my_provider_event_variadic_attr,
808bd9bf
MD
803 side_arg_list(),
804 side_arg_list(
805 side_arg_dynamic_field("a",
806 side_arg_dynamic_u32(55,
807 side_attr_list(
bc3c89b3
MD
808 side_attr("user_attribute_c", side_attr_string("valX")),
809 side_attr("user_attribute_d", side_attr_u8(55)),
808bd9bf
MD
810 )
811 )
812 ),
813 side_arg_dynamic_field("b",
814 side_arg_dynamic_s8(-4,
815 side_attr_list(
bc3c89b3
MD
816 side_attr("X", side_attr_u8(1)),
817 side_attr("Y", side_attr_s8(2)),
808bd9bf
MD
818 )
819 )
820 ),
8d20e708
MD
821 ),
822 side_attr_list()
808bd9bf
MD
823 );
824}
825
826static side_define_event_variadic(my_provider_event_variadic_vla_attr,
827 "myprovider", "myvariadiceventvlaattr", SIDE_LOGLEVEL_DEBUG,
828 side_field_list(),
829 side_attr_list()
830);
831
832static
833void test_variadic_vla_attr(void)
834{
835 side_arg_dynamic_define_vec(myvla,
836 side_arg_list(
837 side_arg_dynamic_u32(1,
838 side_attr_list(
bc3c89b3
MD
839 side_attr("Z", side_attr_u8(0)),
840 side_attr("A", side_attr_u8(123)),
808bd9bf
MD
841 )
842 ),
843 side_arg_dynamic_u32(2, side_attr_list()),
844 side_arg_dynamic_u32(3, side_attr_list()),
8d20e708
MD
845 ),
846 side_attr_list(
847 side_attr("X", side_attr_u8(1)),
848 side_attr("Y", side_attr_u8(2)),
808bd9bf
MD
849 )
850 );
d5cdb129
MD
851 my_provider_event_variadic_vla_attr_enabled = 1;
852 side_event_variadic(my_provider_event_variadic_vla_attr,
808bd9bf
MD
853 side_arg_list(),
854 side_arg_list(
8d20e708
MD
855 side_arg_dynamic_field("a", side_arg_dynamic_vla(&myvla)),
856 ),
857 side_attr_list()
808bd9bf
MD
858 );
859}
860
861static side_define_event_variadic(my_provider_event_variadic_struct_attr,
862 "myprovider", "myvariadiceventstructattr", SIDE_LOGLEVEL_DEBUG,
863 side_field_list(),
864 side_attr_list()
865);
866
867static
868void test_variadic_struct_attr(void)
869{
d5cdb129
MD
870 my_provider_event_variadic_struct_attr_enabled = 1;
871 side_event_cond(my_provider_event_variadic_struct_attr) {
808bd9bf
MD
872 side_arg_dynamic_define_struct(mystruct,
873 side_arg_list(
874 side_arg_dynamic_field("a",
875 side_arg_dynamic_u32(43,
876 side_attr_list(
bc3c89b3 877 side_attr("A", side_attr_bool(true)),
808bd9bf
MD
878 )
879 )
880 ),
881 side_arg_dynamic_field("b", side_arg_dynamic_u8(55, side_attr_list())),
8d20e708
MD
882 ),
883 side_attr_list(
884 side_attr("X", side_attr_u8(1)),
885 side_attr("Y", side_attr_u8(2)),
808bd9bf
MD
886 )
887 );
d5cdb129 888 side_event_call_variadic(my_provider_event_variadic_struct_attr,
808bd9bf
MD
889 side_arg_list(),
890 side_arg_list(
8d20e708
MD
891 side_arg_dynamic_field("a", side_arg_dynamic_struct(&mystruct)),
892 ),
893 side_attr_list()
808bd9bf
MD
894 );
895 }
896}
897
fb25b355
MD
898static side_define_event(my_provider_event_float, "myprovider", "myeventfloat", SIDE_LOGLEVEL_DEBUG,
899 side_field_list(
900#if __HAVE_FLOAT16
485b800a 901 side_field_float_binary16("binary16", side_attr_list()),
fb25b355
MD
902#endif
903#if __HAVE_FLOAT32
485b800a 904 side_field_float_binary32("binary32", side_attr_list()),
fb25b355
MD
905#endif
906#if __HAVE_FLOAT64
485b800a 907 side_field_float_binary64("binary64", side_attr_list()),
fb25b355
MD
908#endif
909#if __HAVE_FLOAT128
485b800a 910 side_field_float_binary128("binary128", side_attr_list()),
fb25b355
MD
911#endif
912 ),
913 side_attr_list()
914);
915
916static
917void test_float(void)
918{
d5cdb129
MD
919 my_provider_event_float_enabled = 1;
920 side_event(my_provider_event_float,
fb25b355
MD
921 side_arg_list(
922#if __HAVE_FLOAT16
923 side_arg_float_binary16(1.1),
924#endif
925#if __HAVE_FLOAT32
926 side_arg_float_binary32(2.2),
927#endif
928#if __HAVE_FLOAT64
929 side_arg_float_binary64(3.3),
930#endif
931#if __HAVE_FLOAT128
932 side_arg_float_binary128(4.4),
933#endif
934 )
935 );
936}
937
938static side_define_event_variadic(my_provider_event_variadic_float,
939 "myprovider", "myvariadicfloat", SIDE_LOGLEVEL_DEBUG,
940 side_field_list(),
941 side_attr_list()
942);
943
944static
945void test_variadic_float(void)
946{
d5cdb129
MD
947 my_provider_event_variadic_float_enabled = 1;
948 side_event_variadic(my_provider_event_variadic_float,
fb25b355
MD
949 side_arg_list(),
950 side_arg_list(
951#if __HAVE_FLOAT16
952 side_arg_dynamic_field("binary16",
953 side_arg_dynamic_float_binary16(1.1, side_attr_list())
954 ),
955#endif
956#if __HAVE_FLOAT32
957 side_arg_dynamic_field("binary32",
958 side_arg_dynamic_float_binary32(2.2, side_attr_list())
959 ),
960#endif
961#if __HAVE_FLOAT64
962 side_arg_dynamic_field("binary64",
963 side_arg_dynamic_float_binary64(3.3, side_attr_list())
964 ),
965#endif
966#if __HAVE_FLOAT128
967 side_arg_dynamic_field("binary128",
968 side_arg_dynamic_float_binary128(4.4, side_attr_list())
969 ),
970#endif
8d20e708
MD
971 ),
972 side_attr_list()
fb25b355
MD
973 );
974}
975
79f677ba 976static side_define_enum(myenum,
66cff328 977 side_enum_mapping_list(
79f677ba
MD
978 side_enum_mapping_range("one-ten", 1, 10),
979 side_enum_mapping_range("100-200", 100, 200),
980 side_enum_mapping_value("200", 200),
981 side_enum_mapping_value("300", 300),
d4328528
MD
982 ),
983 side_attr_list()
79f677ba
MD
984);
985
986static side_define_event(my_provider_event_enum, "myprovider", "myeventenum", SIDE_LOGLEVEL_DEBUG,
987 side_field_list(
f89c4ad1
MD
988 side_field_enum("5", &myenum, side_elem(side_type_u32(side_attr_list()))),
989 side_field_enum("400", &myenum, side_elem(side_type_u64(side_attr_list()))),
990 side_field_enum("200", &myenum, side_elem(side_type_u8(side_attr_list()))),
991 side_field_enum("-100", &myenum, side_elem(side_type_s8(side_attr_list()))),
79f677ba
MD
992 ),
993 side_attr_list()
994);
995
996static
997void test_enum(void)
998{
d5cdb129
MD
999 my_provider_event_enum_enabled = 1;
1000 side_event(my_provider_event_enum,
79f677ba 1001 side_arg_list(
d8be25de
MD
1002 side_arg_u32(5),
1003 side_arg_u64(400),
1004 side_arg_u8(200),
1005 side_arg_s8(-100),
79f677ba
MD
1006 )
1007 );
1008}
1009
ea32e5fc 1010/* A bitmap enum maps bits to labels. */
66cff328
MD
1011static side_define_enum_bitmap(myenum_bitmap,
1012 side_enum_bitmap_mapping_list(
1013 side_enum_bitmap_mapping_value("0", 0),
1014 side_enum_bitmap_mapping_range("1-2", 1, 2),
1015 side_enum_bitmap_mapping_range("2-4", 2, 4),
1016 side_enum_bitmap_mapping_value("3", 3),
1017 side_enum_bitmap_mapping_value("30", 30),
1018 side_enum_bitmap_mapping_value("63", 63),
af6aa6e1
MD
1019 side_enum_bitmap_mapping_range("158-160", 158, 160),
1020 side_enum_bitmap_mapping_value("159", 159),
1021 side_enum_bitmap_mapping_range("500-700", 500, 700),
d4328528
MD
1022 ),
1023 side_attr_list()
ea32e5fc
MD
1024);
1025
1026static side_define_event(my_provider_event_enum_bitmap, "myprovider", "myeventenumbitmap", SIDE_LOGLEVEL_DEBUG,
1027 side_field_list(
f89c4ad1
MD
1028 side_field_enum_bitmap("bit_0", &myenum_bitmap, side_elem(side_type_u32(side_attr_list()))),
1029 side_field_enum_bitmap("bit_1", &myenum_bitmap, side_elem(side_type_u32(side_attr_list()))),
1030 side_field_enum_bitmap("bit_2", &myenum_bitmap, side_elem(side_type_u8(side_attr_list()))),
1031 side_field_enum_bitmap("bit_3", &myenum_bitmap, side_elem(side_type_u8(side_attr_list()))),
1032 side_field_enum_bitmap("bit_30", &myenum_bitmap, side_elem(side_type_u32(side_attr_list()))),
1033 side_field_enum_bitmap("bit_31", &myenum_bitmap, side_elem(side_type_u32(side_attr_list()))),
1034 side_field_enum_bitmap("bit_63", &myenum_bitmap, side_elem(side_type_u64(side_attr_list()))),
1035 side_field_enum_bitmap("bits_1+63", &myenum_bitmap, side_elem(side_type_u64(side_attr_list()))),
4cc2880b 1036 side_field_enum_bitmap("byte_bit_2", &myenum_bitmap, side_elem(side_type_byte(side_attr_list()))),
f89c4ad1
MD
1037 side_field_enum_bitmap("bit_159", &myenum_bitmap,
1038 side_elem(side_type_array(side_elem(side_type_u32(side_attr_list())), 5, side_attr_list()))),
1039 side_field_enum_bitmap("bit_159", &myenum_bitmap,
1040 side_elem(side_type_vla(side_elem(side_type_u32(side_attr_list())), side_attr_list()))),
ea32e5fc
MD
1041 ),
1042 side_attr_list()
1043);
1044
1045static
1046void test_enum_bitmap(void)
1047{
d5cdb129 1048 my_provider_event_enum_bitmap_enabled = 1;
af6aa6e1
MD
1049 side_event_cond(my_provider_event_enum_bitmap) {
1050 side_arg_define_vec(myarray,
1051 side_arg_list(
1052 side_arg_u32(0),
1053 side_arg_u32(0),
1054 side_arg_u32(0),
1055 side_arg_u32(0),
1056 side_arg_u32(0x80000000), /* bit 159 */
1057 )
1058 );
1059 side_event_call(my_provider_event_enum_bitmap,
1060 side_arg_list(
bab5d6e4
MD
1061 side_arg_u32(1 << 0),
1062 side_arg_u32(1 << 1),
1063 side_arg_u8(1 << 2),
1064 side_arg_u8(1 << 3),
1065 side_arg_u32(1 << 30),
1066 side_arg_u32(1 << 31),
1067 side_arg_u64(1ULL << 63),
1068 side_arg_u64((1ULL << 1) | (1ULL << 63)),
4cc2880b 1069 side_arg_byte(1 << 2),
bab5d6e4
MD
1070 side_arg_array(&myarray),
1071 side_arg_vla(&myarray),
af6aa6e1
MD
1072 )
1073 );
1074 }
ea32e5fc
MD
1075}
1076
7aec0d09
MD
1077static uint8_t blob_fixint[] = { 0x55, 0x44, 0x33, 0x22, 0x11 };
1078
199e7aa9 1079static side_define_event_variadic(my_provider_event_blob, "myprovider", "myeventblob", SIDE_LOGLEVEL_DEBUG,
7aec0d09 1080 side_field_list(
f7653b43
MD
1081 side_field_byte("blobfield", side_attr_list()),
1082 side_field_array("arrayblob", side_elem(side_type_byte(side_attr_list())), 3, side_attr_list()),
1083 side_field_array("arrayblobfix", side_elem(side_type_byte(side_attr_list())), SIDE_ARRAY_SIZE(blob_fixint), side_attr_list()),
1084 side_field_vla("vlablobfix", side_elem(side_type_byte(side_attr_list())), side_attr_list()),
7aec0d09
MD
1085 ),
1086 side_attr_list()
1087);
1088
1089static
1090void test_blob(void)
1091{
d5cdb129
MD
1092 my_provider_event_blob_enabled = 1;
1093 side_event_cond(my_provider_event_blob) {
f7653b43 1094 side_arg_define_vec(myarray, side_arg_list(side_arg_byte(1), side_arg_byte(2), side_arg_byte(3)));
199e7aa9
MD
1095 side_arg_dynamic_define_vec(myvla,
1096 side_arg_list(
f7653b43
MD
1097 side_arg_dynamic_byte(0x22, side_attr_list()),
1098 side_arg_dynamic_byte(0x33, side_attr_list()),
8d20e708
MD
1099 ),
1100 side_attr_list()
199e7aa9 1101 );
d5cdb129 1102 side_event_call_variadic(my_provider_event_blob,
7aec0d09 1103 side_arg_list(
f7653b43 1104 side_arg_byte(0x55),
7aec0d09 1105 side_arg_array(&myarray),
f7653b43
MD
1106 side_arg_array_byte(blob_fixint),
1107 side_arg_vla_byte(blob_fixint, SIDE_ARRAY_SIZE(blob_fixint)),
199e7aa9
MD
1108 ),
1109 side_arg_list(
1110 side_arg_dynamic_field("varblobfield",
f7653b43 1111 side_arg_dynamic_byte(0x55, side_attr_list())
199e7aa9 1112 ),
8d20e708
MD
1113 side_arg_dynamic_field("varblobvla", side_arg_dynamic_vla(&myvla)),
1114 ),
1115 side_attr_list()
7aec0d09
MD
1116 );
1117 }
1118}
ea32e5fc 1119
71aa8975
MD
1120static side_define_event_variadic(my_provider_event_format_string,
1121 "myprovider", "myeventformatstring", SIDE_LOGLEVEL_DEBUG,
1122 side_field_list(
1123 side_field_string("fmt", side_attr_list()),
1124 ),
1125 side_attr_list(
1126 side_attr("lang.c.format_string", side_attr_bool(true)),
1127 )
1128);
1129
1130static
1131void test_fmt_string(void)
1132{
1133 my_provider_event_format_string_enabled = 1;
1134 side_event_cond(my_provider_event_format_string) {
1135 side_arg_dynamic_define_vec(args,
1136 side_arg_list(
1137 side_arg_dynamic_string("blah", side_attr_list()),
1138 side_arg_dynamic_s32(123, side_attr_list()),
1139 ),
1140 side_attr_list()
1141 );
1142 side_event_call_variadic(my_provider_event_format_string,
1143 side_arg_list(
1144 side_arg_string("This is a formatted string with str: %s int: %d"),
1145 ),
1146 side_arg_list(
1147 side_arg_dynamic_field("arguments", side_arg_dynamic_vla(&args)),
1148 ),
1149 side_attr_list()
1150 );
1151 }
1152}
1153
f611d0c3
MD
1154int main()
1155{
1156 test_fields();
c7a14585 1157 test_struct_literal();
f611d0c3
MD
1158 test_struct();
1159 test_array();
1160 test_vla();
1161 test_vla_visitor();
cdd6e858 1162 test_vla_visitor_2d();
ba845af5 1163 test_array_fixint();
1533629f 1164 test_vla_fixint();
a2e2357e
MD
1165 test_dynamic_basic_type();
1166 test_dynamic_vla();
465e5e7e 1167 test_dynamic_null();
c208889e
MD
1168 test_dynamic_struct();
1169 test_dynamic_nested_struct();
1170 test_dynamic_vla_struct();
1171 test_dynamic_struct_vla();
948e3e72 1172 test_dynamic_nested_vla();
19fa6aa2 1173 test_variadic();
41c4d119 1174 test_static_variadic();
4f40d951
MD
1175 test_bool();
1176 test_dynamic_bool();
8ceca0cd 1177 test_dynamic_vla_with_visitor();
2b359235 1178 test_dynamic_struct_with_visitor();
65010f43 1179 test_event_user_attribute();
a848763d 1180 test_field_user_attribute();
808bd9bf
MD
1181 test_variadic_attr();
1182 test_variadic_vla_attr();
1183 test_variadic_struct_attr();
fb25b355
MD
1184 test_float();
1185 test_variadic_float();
79f677ba 1186 test_enum();
ea32e5fc 1187 test_enum_bitmap();
7aec0d09 1188 test_blob();
71aa8975 1189 test_fmt_string();
f611d0c3
MD
1190 return 0;
1191}
This page took 0.077195 seconds and 4 git commands to generate.