Refactor: use _side_field()
[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
32 my_provider_event.enabled = 1;
a2e2357e 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{
54 my_provider_event2.enabled = 1;
55 side_event_cond(&my_provider_event2) {
56 side_arg_define_vec(mystruct, side_arg_list(side_arg_u32(21), side_arg_s64(22)));
57 side_event_call(&my_provider_event2, side_arg_list(side_arg_struct(&mystruct), side_arg_u8(55)));
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{
72 my_provider_event_array.enabled = 1;
73 side_event_cond(&my_provider_event_array) {
74 side_arg_define_vec(myarray, side_arg_list(side_arg_u32(1), side_arg_u32(2), side_arg_u32(3)));
75 side_event_call(&my_provider_event_array, side_arg_list(side_arg_array(&myarray), side_arg_s64(42)));
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{
90 my_provider_event_vla.enabled = 1;
91 side_event_cond(&my_provider_event_vla) {
92 side_arg_define_vec(myvla, side_arg_list(side_arg_u32(1), side_arg_u32(2), side_arg_u32(3)));
93 side_event_call(&my_provider_event_vla, side_arg_list(side_arg_vla(&myvla), side_arg_s64(42)));
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{
132 my_provider_event_vla_visitor.enabled = 1;
133 side_event_cond(&my_provider_event_vla_visitor) {
134 struct app_visitor_ctx ctx = {
135 .ptr = testarray,
352a4b77 136 .length = SIDE_ARRAY_SIZE(testarray),
f611d0c3
MD
137 };
138 side_event_call(&my_provider_event_vla_visitor, side_arg_list(side_arg_vla_visitor(&ctx), side_arg_s64(42)));
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{
210 my_provider_event_vla_visitor2d.enabled = 1;
211 side_event_cond(&my_provider_event_vla_visitor2d) {
212 struct app_visitor_2d_outer_ctx ctx = {
213 .ptr = testarray2d,
214 .length = SIDE_ARRAY_SIZE(testarray2d),
215 };
216 side_event_call(&my_provider_event_vla_visitor2d, side_arg_list(side_arg_vla_visitor(&ctx), side_arg_s64(42)));
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{
233 my_provider_event_array_fixint.enabled = 1;
1533629f
MD
234 side_event(&my_provider_event_array_fixint,
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{
251 my_provider_event_vla_fixint.enabled = 1;
252 side_event(&my_provider_event_vla_fixint,
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{
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 );
a2e2357e
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{
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
c208889e
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 );
c208889e
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 );
c208889e
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 );
c208889e
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 );
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{
480 my_provider_event_variadic.enabled = 1;
481 side_event_variadic(&my_provider_event_variadic,
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{
502 my_provider_event_static_variadic.enabled = 1;
503 side_event_variadic(&my_provider_event_static_variadic,
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
539 my_provider_event_bool.enabled = 1;
540 side_event(&my_provider_event_bool,
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{
562 my_provider_event_dynamic_bool.enabled = 1;
563 side_event_variadic(&my_provider_event_dynamic_bool,
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{
613 my_provider_event_dynamic_vla_visitor.enabled = 1;
614 side_event_cond(&my_provider_event_dynamic_vla_visitor) {
615 struct app_dynamic_vla_visitor_ctx ctx = {
616 .ptr = testarray_dynamic_vla,
617 .length = SIDE_ARRAY_SIZE(testarray_dynamic_vla),
618 };
619 side_event_call(&my_provider_event_dynamic_vla_visitor,
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{
681 my_provider_event_dynamic_struct_visitor.enabled = 1;
682 side_event_cond(&my_provider_event_dynamic_struct_visitor) {
683 struct app_dynamic_struct_visitor_ctx ctx = {
684 .ptr = testarray_dynamic_struct,
685 .length = SIDE_ARRAY_SIZE(testarray_dynamic_struct),
686 };
687 side_event_call(&my_provider_event_dynamic_struct_visitor,
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{
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)));
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{
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)));
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{
749 my_provider_event_variadic_attr.enabled = 1;
750 side_event_variadic(&my_provider_event_variadic_attr,
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 );
794 my_provider_event_variadic_vla_attr.enabled = 1;
795 side_event_variadic(&my_provider_event_variadic_vla_attr,
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{
819 my_provider_event_variadic_struct_attr.enabled = 1;
820 side_event_cond(&my_provider_event_variadic_struct_attr) {
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 );
833 side_event_call_variadic(&my_provider_event_variadic_struct_attr,
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{
870 my_provider_event_float.enabled = 1;
871 side_event(&my_provider_event_float,
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{
898 my_provider_event_variadic_float.enabled = 1;
899 side_event_variadic(&my_provider_event_variadic_float,
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{
948 my_provider_event_enum.enabled = 1;
949 side_event(&my_provider_event_enum,
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{
988 my_provider_event_enum_bitmap.enabled = 1;
989 side_event(&my_provider_event_enum_bitmap,
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
1003
f611d0c3
MD
1004int main()
1005{
1006 test_fields();
1007 test_struct();
1008 test_array();
1009 test_vla();
1010 test_vla_visitor();
cdd6e858 1011 test_vla_visitor_2d();
ba845af5 1012 test_array_fixint();
1533629f 1013 test_vla_fixint();
a2e2357e
MD
1014 test_dynamic_basic_type();
1015 test_dynamic_vla();
465e5e7e 1016 test_dynamic_null();
c208889e
MD
1017 test_dynamic_struct();
1018 test_dynamic_nested_struct();
1019 test_dynamic_vla_struct();
1020 test_dynamic_struct_vla();
948e3e72 1021 test_dynamic_nested_vla();
19fa6aa2 1022 test_variadic();
41c4d119 1023 test_static_variadic();
4f40d951
MD
1024 test_bool();
1025 test_dynamic_bool();
8ceca0cd 1026 test_dynamic_vla_with_visitor();
2b359235 1027 test_dynamic_struct_with_visitor();
65010f43 1028 test_event_user_attribute();
a848763d 1029 test_field_user_attribute();
808bd9bf
MD
1030 test_variadic_attr();
1031 test_variadic_vla_attr();
1032 test_variadic_struct_attr();
fb25b355
MD
1033 test_float();
1034 test_variadic_float();
79f677ba 1035 test_enum();
ea32e5fc 1036 test_enum_bitmap();
f611d0c3
MD
1037 return 0;
1038}
This page took 0.068315 seconds and 4 git commands to generate.