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