Typed user attributes
[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(
f37a556f
MD
19 side_field("abc", SIDE_TYPE_U32, side_attr_list()),
20 side_field("def", SIDE_TYPE_S64, side_attr_list()),
21 side_field("dynamic", SIDE_TYPE_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(
f37a556f
MD
41 side_field("x", SIDE_TYPE_U32, side_attr_list()),
42 side_field("y", SIDE_TYPE_S64, side_attr_list()),
43 ),
44 side_attr_list()
f611d0c3 45 ),
f37a556f 46 side_field("z", SIDE_TYPE_U8, 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(
f37a556f
MD
63 side_field_array("arr", side_elem_type(SIDE_TYPE_U32, side_attr_list()), 3, side_attr_list()),
64 side_field("v", SIDE_TYPE_S64, 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(
f37a556f
MD
81 side_field_vla("vla", side_elem_type(SIDE_TYPE_U32, side_attr_list()), side_attr_list()),
82 side_field("v", SIDE_TYPE_S64, 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++) {
111 const struct side_arg_vec elem = {
112 .type = SIDE_TYPE_U32,
113 .u = {
114 .side_u32 = ctx->ptr[i],
115 },
116 };
db6ecef9
MD
117 if (tracer_ctx->write_elem(tracer_ctx, &elem) != SIDE_VISITOR_STATUS_OK)
118 return SIDE_VISITOR_STATUS_ERROR;
352a4b77 119 }
f611d0c3
MD
120 return SIDE_VISITOR_STATUS_OK;
121}
122
123static uint32_t testarray[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
124
125static side_define_event(my_provider_event_vla_visitor, "myprovider", "myvlavisit", SIDE_LOGLEVEL_DEBUG,
126 side_field_list(
f37a556f
MD
127 side_field_vla_visitor("vlavisit", side_elem_type(SIDE_TYPE_U32, side_attr_list()), test_visitor, side_attr_list()),
128 side_field("v", SIDE_TYPE_S64, side_attr_list()),
399c836b
MD
129 ),
130 side_attr_list()
f611d0c3
MD
131);
132
133static
134void test_vla_visitor(void)
135{
136 my_provider_event_vla_visitor.enabled = 1;
137 side_event_cond(&my_provider_event_vla_visitor) {
138 struct app_visitor_ctx ctx = {
139 .ptr = testarray,
352a4b77 140 .length = SIDE_ARRAY_SIZE(testarray),
f611d0c3
MD
141 };
142 side_event_call(&my_provider_event_vla_visitor, side_arg_list(side_arg_vla_visitor(&ctx), side_arg_s64(42)));
143 }
144}
145
cdd6e858
MD
146/* 2D array visitor */
147
148struct app_visitor_2d_inner_ctx {
149 const uint32_t *ptr;
150 uint32_t length;
151};
152
153static
154enum side_visitor_status test_inner_visitor(const struct side_tracer_visitor_ctx *tracer_ctx, void *_ctx)
155{
156 struct app_visitor_2d_inner_ctx *ctx = (struct app_visitor_2d_inner_ctx *) _ctx;
157 uint32_t length = ctx->length, i;
158
159 for (i = 0; i < length; i++) {
160 const struct side_arg_vec elem = {
161 .type = SIDE_TYPE_U32,
162 .u = {
163 .side_u32 = ctx->ptr[i],
164 },
165 };
db6ecef9
MD
166 if (tracer_ctx->write_elem(tracer_ctx, &elem) != SIDE_VISITOR_STATUS_OK)
167 return SIDE_VISITOR_STATUS_ERROR;
cdd6e858
MD
168 }
169 return SIDE_VISITOR_STATUS_OK;
170}
171
172struct app_visitor_2d_outer_ctx {
173 const uint32_t (*ptr)[2];
174 uint32_t length;
175};
176
177static
178enum side_visitor_status test_outer_visitor(const struct side_tracer_visitor_ctx *tracer_ctx, void *_ctx)
179{
180 struct app_visitor_2d_outer_ctx *ctx = (struct app_visitor_2d_outer_ctx *) _ctx;
181 uint32_t length = ctx->length, i;
182
183 for (i = 0; i < length; i++) {
184 struct app_visitor_2d_inner_ctx inner_ctx = {
185 .ptr = ctx->ptr[i],
186 .length = 2,
187 };
188 const struct side_arg_vec elem = side_arg_vla_visitor(&inner_ctx);
db6ecef9
MD
189 if (tracer_ctx->write_elem(tracer_ctx, &elem) != SIDE_VISITOR_STATUS_OK)
190 return SIDE_VISITOR_STATUS_ERROR;
cdd6e858
MD
191 }
192 return SIDE_VISITOR_STATUS_OK;
193}
194
195static uint32_t testarray2d[][2] = {
196 { 1, 2 },
197 { 33, 44 },
198 { 55, 66 },
199};
200
201static side_define_event(my_provider_event_vla_visitor2d, "myprovider", "myvlavisit2d", SIDE_LOGLEVEL_DEBUG,
202 side_field_list(
203 side_field_vla_visitor("vlavisit2d",
f37a556f
MD
204 side_elem(
205 side_type_vla_visitor_decl(
206 side_elem_type(SIDE_TYPE_U32, side_attr_list()),
207 test_inner_visitor,
208 side_attr_list())
209 ), test_outer_visitor, side_attr_list()),
210 side_field("v", SIDE_TYPE_S64, side_attr_list()),
399c836b
MD
211 ),
212 side_attr_list()
cdd6e858
MD
213);
214
215static
216void test_vla_visitor_2d(void)
217{
218 my_provider_event_vla_visitor2d.enabled = 1;
219 side_event_cond(&my_provider_event_vla_visitor2d) {
220 struct app_visitor_2d_outer_ctx ctx = {
221 .ptr = testarray2d,
222 .length = SIDE_ARRAY_SIZE(testarray2d),
223 };
224 side_event_call(&my_provider_event_vla_visitor2d, side_arg_list(side_arg_vla_visitor(&ctx), side_arg_s64(42)));
225 }
226}
227
ba845af5
MD
228static int64_t array_fixint[] = { -444, 555, 123, 2897432587 };
229
230static side_define_event(my_provider_event_array_fixint, "myprovider", "myarrayfixint", SIDE_LOGLEVEL_DEBUG,
231 side_field_list(
f37a556f
MD
232 side_field_array("arrfixint", side_elem_type(SIDE_TYPE_S64, side_attr_list()), SIDE_ARRAY_SIZE(array_fixint), side_attr_list()),
233 side_field("v", SIDE_TYPE_S64, side_attr_list()),
399c836b
MD
234 ),
235 side_attr_list()
ba845af5
MD
236);
237
238static
239void test_array_fixint(void)
240{
241 my_provider_event_array_fixint.enabled = 1;
1533629f
MD
242 side_event(&my_provider_event_array_fixint,
243 side_arg_list(side_arg_array_s64(array_fixint), side_arg_s64(42)));
244}
245
246static int64_t vla_fixint[] = { -444, 555, 123, 2897432587 };
247
248static side_define_event(my_provider_event_vla_fixint, "myprovider", "myvlafixint", SIDE_LOGLEVEL_DEBUG,
249 side_field_list(
f37a556f
MD
250 side_field_vla("vlafixint", side_elem_type(SIDE_TYPE_S64, side_attr_list()), side_attr_list()),
251 side_field("v", SIDE_TYPE_S64, side_attr_list()),
399c836b
MD
252 ),
253 side_attr_list()
1533629f
MD
254);
255
256static
257void test_vla_fixint(void)
258{
259 my_provider_event_vla_fixint.enabled = 1;
260 side_event(&my_provider_event_vla_fixint,
261 side_arg_list(side_arg_vla_s64(vla_fixint, SIDE_ARRAY_SIZE(vla_fixint)), side_arg_s64(42)));
ba845af5
MD
262}
263
a2e2357e
MD
264static side_define_event(my_provider_event_dynamic_basic,
265 "myprovider", "mydynamicbasic", SIDE_LOGLEVEL_DEBUG,
266 side_field_list(
f37a556f 267 side_field("dynamic", SIDE_TYPE_DYNAMIC, side_attr_list()),
399c836b
MD
268 ),
269 side_attr_list()
a2e2357e
MD
270);
271
272static
273void test_dynamic_basic_type(void)
274{
275 my_provider_event_dynamic_basic.enabled = 1;
276 side_event(&my_provider_event_dynamic_basic,
808bd9bf 277 side_arg_list(side_arg_dynamic(side_arg_dynamic_s16(-33, side_attr_list()))));
a2e2357e
MD
278}
279
280static side_define_event(my_provider_event_dynamic_vla,
281 "myprovider", "mydynamicvla", SIDE_LOGLEVEL_DEBUG,
282 side_field_list(
f37a556f 283 side_field("dynamic", SIDE_TYPE_DYNAMIC, side_attr_list()),
399c836b
MD
284 ),
285 side_attr_list()
a2e2357e
MD
286);
287
288static
289void test_dynamic_vla(void)
290{
948e3e72
MD
291 side_arg_dynamic_define_vec(myvla,
292 side_arg_list(
808bd9bf
MD
293 side_arg_dynamic_u32(1, side_attr_list()),
294 side_arg_dynamic_u32(2, side_attr_list()),
295 side_arg_dynamic_u32(3, side_attr_list()),
df075fa5
MD
296 )
297 );
a2e2357e
MD
298 my_provider_event_dynamic_vla.enabled = 1;
299 side_event(&my_provider_event_dynamic_vla,
808bd9bf 300 side_arg_list(side_arg_dynamic(side_arg_dynamic_vla(&myvla, side_attr_list()))));
a2e2357e
MD
301}
302
465e5e7e
MD
303static side_define_event(my_provider_event_dynamic_null,
304 "myprovider", "mydynamicnull", SIDE_LOGLEVEL_DEBUG,
305 side_field_list(
f37a556f 306 side_field("dynamic", SIDE_TYPE_DYNAMIC, side_attr_list()),
399c836b
MD
307 ),
308 side_attr_list()
465e5e7e
MD
309);
310
311static
312void test_dynamic_null(void)
313{
314 my_provider_event_dynamic_null.enabled = 1;
315 side_event(&my_provider_event_dynamic_null,
808bd9bf 316 side_arg_list(side_arg_dynamic(side_arg_dynamic_null(side_attr_list()))));
465e5e7e
MD
317}
318
c208889e
MD
319static side_define_event(my_provider_event_dynamic_struct,
320 "myprovider", "mydynamicstruct", SIDE_LOGLEVEL_DEBUG,
465e5e7e 321 side_field_list(
f37a556f 322 side_field("dynamic", SIDE_TYPE_DYNAMIC, side_attr_list()),
399c836b
MD
323 ),
324 side_attr_list()
465e5e7e
MD
325);
326
327static
c208889e 328void test_dynamic_struct(void)
465e5e7e 329{
c208889e 330 side_arg_dynamic_define_struct(mystruct,
465e5e7e 331 side_arg_list(
808bd9bf
MD
332 side_arg_dynamic_field("a", side_arg_dynamic_u32(43, side_attr_list())),
333 side_arg_dynamic_field("b", side_arg_dynamic_string("zzz", side_attr_list())),
334 side_arg_dynamic_field("c", side_arg_dynamic_null(side_attr_list())),
465e5e7e
MD
335 )
336 );
337
c208889e
MD
338 my_provider_event_dynamic_struct.enabled = 1;
339 side_event(&my_provider_event_dynamic_struct,
808bd9bf 340 side_arg_list(side_arg_dynamic(side_arg_dynamic_struct(&mystruct, side_attr_list()))));
465e5e7e
MD
341}
342
c208889e
MD
343static side_define_event(my_provider_event_dynamic_nested_struct,
344 "myprovider", "mydynamicnestedstruct", SIDE_LOGLEVEL_DEBUG,
3222d397 345 side_field_list(
f37a556f 346 side_field("dynamic", SIDE_TYPE_DYNAMIC, side_attr_list()),
399c836b
MD
347 ),
348 side_attr_list()
3222d397
MD
349);
350
351static
c208889e 352void test_dynamic_nested_struct(void)
3222d397 353{
c208889e 354 side_arg_dynamic_define_struct(nested,
3222d397 355 side_arg_list(
808bd9bf
MD
356 side_arg_dynamic_field("a", side_arg_dynamic_u32(43, side_attr_list())),
357 side_arg_dynamic_field("b", side_arg_dynamic_u8(55, side_attr_list())),
3222d397
MD
358 )
359 );
c208889e 360 side_arg_dynamic_define_struct(nested2,
3222d397 361 side_arg_list(
808bd9bf
MD
362 side_arg_dynamic_field("aa", side_arg_dynamic_u64(128, side_attr_list())),
363 side_arg_dynamic_field("bb", side_arg_dynamic_u16(1, side_attr_list())),
3222d397
MD
364 )
365 );
c208889e 366 side_arg_dynamic_define_struct(mystruct,
3222d397 367 side_arg_list(
808bd9bf
MD
368 side_arg_dynamic_field("nested", side_arg_dynamic_struct(&nested, side_attr_list())),
369 side_arg_dynamic_field("nested2", side_arg_dynamic_struct(&nested2, side_attr_list())),
3222d397
MD
370 )
371 );
c208889e
MD
372 my_provider_event_dynamic_nested_struct.enabled = 1;
373 side_event(&my_provider_event_dynamic_nested_struct,
808bd9bf 374 side_arg_list(side_arg_dynamic(side_arg_dynamic_struct(&mystruct, side_attr_list()))));
3222d397
MD
375}
376
c208889e
MD
377static side_define_event(my_provider_event_dynamic_vla_struct,
378 "myprovider", "mydynamicvlastruct", SIDE_LOGLEVEL_DEBUG,
7ce1b78f 379 side_field_list(
f37a556f 380 side_field("dynamic", SIDE_TYPE_DYNAMIC, side_attr_list()),
399c836b
MD
381 ),
382 side_attr_list()
7ce1b78f
MD
383);
384
385static
c208889e 386void test_dynamic_vla_struct(void)
7ce1b78f 387{
c208889e 388 side_arg_dynamic_define_struct(nested,
7ce1b78f 389 side_arg_list(
808bd9bf
MD
390 side_arg_dynamic_field("a", side_arg_dynamic_u32(43, side_attr_list())),
391 side_arg_dynamic_field("b", side_arg_dynamic_u8(55, side_attr_list())),
7ce1b78f
MD
392 )
393 );
394 side_arg_dynamic_define_vec(myvla,
395 side_arg_list(
808bd9bf
MD
396 side_arg_dynamic_struct(&nested, side_attr_list()),
397 side_arg_dynamic_struct(&nested, side_attr_list()),
398 side_arg_dynamic_struct(&nested, side_attr_list()),
399 side_arg_dynamic_struct(&nested, side_attr_list()),
7ce1b78f
MD
400 )
401 );
c208889e
MD
402 my_provider_event_dynamic_vla_struct.enabled = 1;
403 side_event(&my_provider_event_dynamic_vla_struct,
808bd9bf 404 side_arg_list(side_arg_dynamic(side_arg_dynamic_vla(&myvla, side_attr_list()))));
7ce1b78f
MD
405}
406
c208889e
MD
407static side_define_event(my_provider_event_dynamic_struct_vla,
408 "myprovider", "mydynamicstructvla", SIDE_LOGLEVEL_DEBUG,
980bfdc4 409 side_field_list(
f37a556f 410 side_field("dynamic", SIDE_TYPE_DYNAMIC, side_attr_list()),
399c836b
MD
411 ),
412 side_attr_list()
980bfdc4
MD
413);
414
415static
c208889e 416void test_dynamic_struct_vla(void)
980bfdc4
MD
417{
418 side_arg_dynamic_define_vec(myvla,
948e3e72 419 side_arg_list(
808bd9bf
MD
420 side_arg_dynamic_u32(1, side_attr_list()),
421 side_arg_dynamic_u32(2, side_attr_list()),
422 side_arg_dynamic_u32(3, side_attr_list()),
df075fa5
MD
423 )
424 );
980bfdc4 425 side_arg_dynamic_define_vec(myvla2,
948e3e72 426 side_arg_list(
808bd9bf
MD
427 side_arg_dynamic_u32(4, side_attr_list()),
428 side_arg_dynamic_u64(5, side_attr_list()),
429 side_arg_dynamic_u32(6, side_attr_list()),
df075fa5
MD
430 )
431 );
c208889e 432 side_arg_dynamic_define_struct(mystruct,
980bfdc4 433 side_arg_list(
808bd9bf
MD
434 side_arg_dynamic_field("a", side_arg_dynamic_vla(&myvla, side_attr_list())),
435 side_arg_dynamic_field("b", side_arg_dynamic_vla(&myvla2, side_attr_list())),
980bfdc4
MD
436 )
437 );
c208889e
MD
438 my_provider_event_dynamic_struct_vla.enabled = 1;
439 side_event(&my_provider_event_dynamic_struct_vla,
808bd9bf 440 side_arg_list(side_arg_dynamic(side_arg_dynamic_struct(&mystruct, side_attr_list()))));
980bfdc4
MD
441}
442
948e3e72
MD
443static side_define_event(my_provider_event_dynamic_nested_vla,
444 "myprovider", "mydynamicnestedvla", SIDE_LOGLEVEL_DEBUG,
445 side_field_list(
f37a556f 446 side_field("dynamic", SIDE_TYPE_DYNAMIC, side_attr_list()),
399c836b
MD
447 ),
448 side_attr_list()
948e3e72
MD
449);
450
451static
452void test_dynamic_nested_vla(void)
453{
454 side_arg_dynamic_define_vec(nestedvla,
455 side_arg_list(
808bd9bf
MD
456 side_arg_dynamic_u32(1, side_attr_list()),
457 side_arg_dynamic_u16(2, side_attr_list()),
458 side_arg_dynamic_u32(3, side_attr_list()),
948e3e72
MD
459 )
460 );
461 side_arg_dynamic_define_vec(nestedvla2,
462 side_arg_list(
808bd9bf
MD
463 side_arg_dynamic_u8(4, side_attr_list()),
464 side_arg_dynamic_u32(5, side_attr_list()),
465 side_arg_dynamic_u32(6, side_attr_list()),
948e3e72
MD
466 )
467 );
468 side_arg_dynamic_define_vec(myvla,
469 side_arg_list(
808bd9bf
MD
470 side_arg_dynamic_vla(&nestedvla, side_attr_list()),
471 side_arg_dynamic_vla(&nestedvla2, side_attr_list()),
948e3e72
MD
472 )
473 );
474 my_provider_event_dynamic_nested_vla.enabled = 1;
475 side_event(&my_provider_event_dynamic_nested_vla,
808bd9bf 476 side_arg_list(side_arg_dynamic(side_arg_dynamic_vla(&myvla, side_attr_list()))));
948e3e72
MD
477}
478
8a25ce77 479static side_define_event_variadic(my_provider_event_variadic,
19fa6aa2 480 "myprovider", "myvariadicevent", SIDE_LOGLEVEL_DEBUG,
399c836b
MD
481 side_field_list(),
482 side_attr_list()
19fa6aa2
MD
483);
484
485static
486void test_variadic(void)
487{
488 my_provider_event_variadic.enabled = 1;
489 side_event_variadic(&my_provider_event_variadic,
490 side_arg_list(),
491 side_arg_list(
808bd9bf
MD
492 side_arg_dynamic_field("a", side_arg_dynamic_u32(55, side_attr_list())),
493 side_arg_dynamic_field("b", side_arg_dynamic_s8(-4, side_attr_list())),
19fa6aa2
MD
494 )
495 );
496}
497
8a25ce77 498static side_define_event_variadic(my_provider_event_static_variadic,
41c4d119
MD
499 "myprovider", "mystaticvariadicevent", SIDE_LOGLEVEL_DEBUG,
500 side_field_list(
f37a556f
MD
501 side_field("abc", SIDE_TYPE_U32, side_attr_list()),
502 side_field("def", SIDE_TYPE_U16, side_attr_list()),
399c836b
MD
503 ),
504 side_attr_list()
41c4d119
MD
505);
506
507static
508void test_static_variadic(void)
509{
510 my_provider_event_static_variadic.enabled = 1;
511 side_event_variadic(&my_provider_event_static_variadic,
512 side_arg_list(
513 side_arg_u32(1),
514 side_arg_u16(2),
515 ),
516 side_arg_list(
808bd9bf
MD
517 side_arg_dynamic_field("a", side_arg_dynamic_u32(55, side_attr_list())),
518 side_arg_dynamic_field("b", side_arg_dynamic_s8(-4, side_attr_list())),
41c4d119
MD
519 )
520 );
521}
522
4f40d951
MD
523static side_define_event(my_provider_event_bool, "myprovider", "myeventbool", SIDE_LOGLEVEL_DEBUG,
524 side_field_list(
f37a556f
MD
525 side_field("a_false", SIDE_TYPE_BOOL, side_attr_list()),
526 side_field("b_true", SIDE_TYPE_BOOL, side_attr_list()),
527 side_field("c_true", SIDE_TYPE_BOOL, side_attr_list()),
528 side_field("d_true", SIDE_TYPE_BOOL, side_attr_list()),
529 side_field("e_true", SIDE_TYPE_BOOL, side_attr_list()),
530 side_field("f_false", SIDE_TYPE_BOOL, side_attr_list()),
531 side_field("g_true", SIDE_TYPE_BOOL, side_attr_list()),
399c836b
MD
532 ),
533 side_attr_list()
4f40d951
MD
534);
535
536static
537void test_bool(void)
538{
539 uint32_t a = 0;
540 uint32_t b = 1;
541 uint64_t c = 0x12345678;
542 int16_t d = -32768;
543 bool e = true;
544 bool f = false;
545 uint32_t g = 256;
546
547 my_provider_event_bool.enabled = 1;
548 side_event(&my_provider_event_bool,
549 side_arg_list(
550 side_arg_bool(a),
551 side_arg_bool(b),
552 side_arg_bool(c),
553 side_arg_bool(d),
554 side_arg_bool(e),
555 side_arg_bool(f),
556 side_arg_bool(g),
557 )
558 );
559}
560
8a25ce77 561static side_define_event_variadic(my_provider_event_dynamic_bool,
4f40d951 562 "myprovider", "mydynamicbool", SIDE_LOGLEVEL_DEBUG,
399c836b
MD
563 side_field_list(),
564 side_attr_list()
4f40d951
MD
565);
566
567static
568void test_dynamic_bool(void)
569{
570 my_provider_event_dynamic_bool.enabled = 1;
571 side_event_variadic(&my_provider_event_dynamic_bool,
572 side_arg_list(),
573 side_arg_list(
808bd9bf
MD
574 side_arg_dynamic_field("a_true", side_arg_dynamic_bool(55, side_attr_list())),
575 side_arg_dynamic_field("b_true", side_arg_dynamic_bool(-4, side_attr_list())),
576 side_arg_dynamic_field("c_false", side_arg_dynamic_bool(0, side_attr_list())),
577 side_arg_dynamic_field("d_true", side_arg_dynamic_bool(256, side_attr_list())),
4f40d951
MD
578 )
579 );
580}
581
8ceca0cd
MD
582static side_define_event(my_provider_event_dynamic_vla_visitor,
583 "myprovider", "mydynamicvlavisitor", SIDE_LOGLEVEL_DEBUG,
584 side_field_list(
f37a556f 585 side_field("dynamic", SIDE_TYPE_DYNAMIC, side_attr_list()),
399c836b
MD
586 ),
587 side_attr_list()
8ceca0cd
MD
588);
589
590struct app_dynamic_vla_visitor_ctx {
591 const uint32_t *ptr;
592 uint32_t length;
593};
594
595static
596enum side_visitor_status test_dynamic_vla_visitor(const struct side_tracer_dynamic_vla_visitor_ctx *tracer_ctx, void *_ctx)
597{
598 struct app_dynamic_vla_visitor_ctx *ctx = (struct app_dynamic_vla_visitor_ctx *) _ctx;
599 uint32_t length = ctx->length, i;
600
601 for (i = 0; i < length; i++) {
602 const struct side_arg_dynamic_vec elem = {
603 .dynamic_type = SIDE_DYNAMIC_TYPE_U32,
808bd9bf
MD
604 .nr_attr = 0,
605 .attr = NULL,
8ceca0cd
MD
606 .u = {
607 .side_u32 = ctx->ptr[i],
608 },
609 };
610 if (tracer_ctx->write_elem(tracer_ctx, &elem) != SIDE_VISITOR_STATUS_OK)
611 return SIDE_VISITOR_STATUS_ERROR;
612 }
613 return SIDE_VISITOR_STATUS_OK;
614}
615
616static uint32_t testarray_dynamic_vla[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
617
618static
619void test_dynamic_vla_with_visitor(void)
620{
621 my_provider_event_dynamic_vla_visitor.enabled = 1;
622 side_event_cond(&my_provider_event_dynamic_vla_visitor) {
623 struct app_dynamic_vla_visitor_ctx ctx = {
624 .ptr = testarray_dynamic_vla,
625 .length = SIDE_ARRAY_SIZE(testarray_dynamic_vla),
626 };
627 side_event_call(&my_provider_event_dynamic_vla_visitor,
628 side_arg_list(
629 side_arg_dynamic(
808bd9bf 630 side_arg_dynamic_vla_visitor(test_dynamic_vla_visitor, &ctx, side_attr_list())
8ceca0cd
MD
631 )
632 )
633 );
634 }
635}
636
2b359235
MD
637static side_define_event(my_provider_event_dynamic_struct_visitor,
638 "myprovider", "mydynamicstructvisitor", SIDE_LOGLEVEL_DEBUG,
639 side_field_list(
f37a556f 640 side_field("dynamic", SIDE_TYPE_DYNAMIC, side_attr_list()),
399c836b
MD
641 ),
642 side_attr_list()
2b359235
MD
643);
644
645struct struct_visitor_pair {
646 const char *name;
647 uint32_t value;
648};
649
650struct app_dynamic_struct_visitor_ctx {
651 const struct struct_visitor_pair *ptr;
652 uint32_t length;
653};
654
655static
656enum side_visitor_status test_dynamic_struct_visitor(const struct side_tracer_dynamic_struct_visitor_ctx *tracer_ctx, void *_ctx)
657{
658 struct app_dynamic_struct_visitor_ctx *ctx = (struct app_dynamic_struct_visitor_ctx *) _ctx;
659 uint32_t length = ctx->length, i;
660
661 for (i = 0; i < length; i++) {
662 struct side_arg_dynamic_event_field dynamic_field = {
663 .field_name = ctx->ptr[i].name,
664 .elem = {
665 .dynamic_type = SIDE_DYNAMIC_TYPE_U32,
808bd9bf
MD
666 .nr_attr = 0,
667 .attr = NULL,
2b359235
MD
668 .u = {
669 .side_u32 = ctx->ptr[i].value,
670 },
671 },
672 };
673 if (tracer_ctx->write_field(tracer_ctx, &dynamic_field) != SIDE_VISITOR_STATUS_OK)
674 return SIDE_VISITOR_STATUS_ERROR;
675 }
676 return SIDE_VISITOR_STATUS_OK;
677}
678
679static struct struct_visitor_pair testarray_dynamic_struct[] = {
680 { "a", 1, },
681 { "b", 2, },
682 { "c", 3, },
683 { "d", 4, },
684};
685
686static
687void test_dynamic_struct_with_visitor(void)
688{
689 my_provider_event_dynamic_struct_visitor.enabled = 1;
690 side_event_cond(&my_provider_event_dynamic_struct_visitor) {
691 struct app_dynamic_struct_visitor_ctx ctx = {
692 .ptr = testarray_dynamic_struct,
693 .length = SIDE_ARRAY_SIZE(testarray_dynamic_struct),
694 };
695 side_event_call(&my_provider_event_dynamic_struct_visitor,
696 side_arg_list(
697 side_arg_dynamic(
808bd9bf 698 side_arg_dynamic_struct_visitor(test_dynamic_struct_visitor, &ctx, side_attr_list())
2b359235
MD
699 )
700 )
701 );
702 }
703}
704
a848763d 705static side_define_event(my_provider_event_user_attribute, "myprovider", "myevent_user_attribute", SIDE_LOGLEVEL_DEBUG,
65010f43 706 side_field_list(
f37a556f
MD
707 side_field("abc", SIDE_TYPE_U32, side_attr_list()),
708 side_field("def", SIDE_TYPE_S64, side_attr_list()),
399c836b
MD
709 ),
710 side_attr_list(
bc3c89b3
MD
711 side_attr("user_attribute_a", side_attr_string("val1")),
712 side_attr("user_attribute_b", side_attr_string("val2")),
65010f43
MD
713 )
714);
715
716static
717void test_event_user_attribute(void)
718{
719 my_provider_event_user_attribute.enabled = 1;
720 side_event(&my_provider_event_user_attribute, side_arg_list(side_arg_u32(1), side_arg_s64(2)));
721}
722
a848763d
MD
723static side_define_event(my_provider_field_user_attribute, "myprovider", "myevent_field_attribute", SIDE_LOGLEVEL_DEBUG,
724 side_field_list(
725 side_field("abc", SIDE_TYPE_U32,
726 side_attr_list(
bc3c89b3
MD
727 side_attr("user_attribute_a", side_attr_string("val1")),
728 side_attr("user_attribute_b", side_attr_u32(2)),
a848763d
MD
729 )
730 ),
731 side_field("def", SIDE_TYPE_S64,
732 side_attr_list(
bc3c89b3
MD
733 side_attr("user_attribute_c", side_attr_string("val3")),
734 side_attr("user_attribute_d", side_attr_s64(-5)),
a848763d
MD
735 )
736 ),
737 ),
738 side_attr_list()
739);
740
741static
742void test_field_user_attribute(void)
743{
744 my_provider_field_user_attribute.enabled = 1;
745 side_event(&my_provider_field_user_attribute, side_arg_list(side_arg_u32(1), side_arg_s64(2)));
746}
747
808bd9bf
MD
748static side_define_event_variadic(my_provider_event_variadic_attr,
749 "myprovider", "myvariadiceventattr", SIDE_LOGLEVEL_DEBUG,
750 side_field_list(),
751 side_attr_list()
752);
753
754static
755void test_variadic_attr(void)
756{
757 my_provider_event_variadic_attr.enabled = 1;
758 side_event_variadic(&my_provider_event_variadic_attr,
759 side_arg_list(),
760 side_arg_list(
761 side_arg_dynamic_field("a",
762 side_arg_dynamic_u32(55,
763 side_attr_list(
bc3c89b3
MD
764 side_attr("user_attribute_c", side_attr_string("valX")),
765 side_attr("user_attribute_d", side_attr_u8(55)),
808bd9bf
MD
766 )
767 )
768 ),
769 side_arg_dynamic_field("b",
770 side_arg_dynamic_s8(-4,
771 side_attr_list(
bc3c89b3
MD
772 side_attr("X", side_attr_u8(1)),
773 side_attr("Y", side_attr_s8(2)),
808bd9bf
MD
774 )
775 )
776 ),
777 )
778 );
779}
780
781static side_define_event_variadic(my_provider_event_variadic_vla_attr,
782 "myprovider", "myvariadiceventvlaattr", SIDE_LOGLEVEL_DEBUG,
783 side_field_list(),
784 side_attr_list()
785);
786
787static
788void test_variadic_vla_attr(void)
789{
790 side_arg_dynamic_define_vec(myvla,
791 side_arg_list(
792 side_arg_dynamic_u32(1,
793 side_attr_list(
bc3c89b3
MD
794 side_attr("Z", side_attr_u8(0)),
795 side_attr("A", side_attr_u8(123)),
808bd9bf
MD
796 )
797 ),
798 side_arg_dynamic_u32(2, side_attr_list()),
799 side_arg_dynamic_u32(3, side_attr_list()),
800 )
801 );
802 my_provider_event_variadic_vla_attr.enabled = 1;
803 side_event_variadic(&my_provider_event_variadic_vla_attr,
804 side_arg_list(),
805 side_arg_list(
806 side_arg_dynamic_field("a",
807 side_arg_dynamic_vla(&myvla,
808 side_attr_list(
bc3c89b3
MD
809 side_attr("X", side_attr_u8(1)),
810 side_attr("Y", side_attr_u8(2)),
808bd9bf
MD
811 )
812 )
813 ),
814 )
815 );
816}
817
818static side_define_event_variadic(my_provider_event_variadic_struct_attr,
819 "myprovider", "myvariadiceventstructattr", SIDE_LOGLEVEL_DEBUG,
820 side_field_list(),
821 side_attr_list()
822);
823
824static
825void test_variadic_struct_attr(void)
826{
827 my_provider_event_variadic_struct_attr.enabled = 1;
828 side_event_cond(&my_provider_event_variadic_struct_attr) {
829 side_arg_dynamic_define_struct(mystruct,
830 side_arg_list(
831 side_arg_dynamic_field("a",
832 side_arg_dynamic_u32(43,
833 side_attr_list(
bc3c89b3 834 side_attr("A", side_attr_bool(true)),
808bd9bf
MD
835 )
836 )
837 ),
838 side_arg_dynamic_field("b", side_arg_dynamic_u8(55, side_attr_list())),
839 )
840 );
841 side_event_call_variadic(&my_provider_event_variadic_struct_attr,
842 side_arg_list(),
843 side_arg_list(
844 side_arg_dynamic_field("a",
845 side_arg_dynamic_struct(&mystruct,
846 side_attr_list(
bc3c89b3
MD
847 side_attr("X", side_attr_u8(1)),
848 side_attr("Y", side_attr_u8(2)),
808bd9bf
MD
849 )
850 )
851 ),
852 )
853 );
854 }
855}
856
fb25b355
MD
857static side_define_event(my_provider_event_float, "myprovider", "myeventfloat", SIDE_LOGLEVEL_DEBUG,
858 side_field_list(
859#if __HAVE_FLOAT16
860 side_field("binary16", SIDE_TYPE_FLOAT_BINARY16, side_attr_list()),
861#endif
862#if __HAVE_FLOAT32
863 side_field("binary32", SIDE_TYPE_FLOAT_BINARY32, side_attr_list()),
864#endif
865#if __HAVE_FLOAT64
866 side_field("binary64", SIDE_TYPE_FLOAT_BINARY64, side_attr_list()),
867#endif
868#if __HAVE_FLOAT128
869 side_field("binary128", SIDE_TYPE_FLOAT_BINARY128, side_attr_list()),
870#endif
871 ),
872 side_attr_list()
873);
874
875static
876void test_float(void)
877{
878 my_provider_event_float.enabled = 1;
879 side_event(&my_provider_event_float,
880 side_arg_list(
881#if __HAVE_FLOAT16
882 side_arg_float_binary16(1.1),
883#endif
884#if __HAVE_FLOAT32
885 side_arg_float_binary32(2.2),
886#endif
887#if __HAVE_FLOAT64
888 side_arg_float_binary64(3.3),
889#endif
890#if __HAVE_FLOAT128
891 side_arg_float_binary128(4.4),
892#endif
893 )
894 );
895}
896
897static side_define_event_variadic(my_provider_event_variadic_float,
898 "myprovider", "myvariadicfloat", SIDE_LOGLEVEL_DEBUG,
899 side_field_list(),
900 side_attr_list()
901);
902
903static
904void test_variadic_float(void)
905{
906 my_provider_event_variadic_float.enabled = 1;
907 side_event_variadic(&my_provider_event_variadic_float,
908 side_arg_list(),
909 side_arg_list(
910#if __HAVE_FLOAT16
911 side_arg_dynamic_field("binary16",
912 side_arg_dynamic_float_binary16(1.1, side_attr_list())
913 ),
914#endif
915#if __HAVE_FLOAT32
916 side_arg_dynamic_field("binary32",
917 side_arg_dynamic_float_binary32(2.2, side_attr_list())
918 ),
919#endif
920#if __HAVE_FLOAT64
921 side_arg_dynamic_field("binary64",
922 side_arg_dynamic_float_binary64(3.3, side_attr_list())
923 ),
924#endif
925#if __HAVE_FLOAT128
926 side_arg_dynamic_field("binary128",
927 side_arg_dynamic_float_binary128(4.4, side_attr_list())
928 ),
929#endif
930 )
931 );
932}
933
f611d0c3
MD
934int main()
935{
936 test_fields();
937 test_struct();
938 test_array();
939 test_vla();
940 test_vla_visitor();
cdd6e858 941 test_vla_visitor_2d();
ba845af5 942 test_array_fixint();
1533629f 943 test_vla_fixint();
a2e2357e
MD
944 test_dynamic_basic_type();
945 test_dynamic_vla();
465e5e7e 946 test_dynamic_null();
c208889e
MD
947 test_dynamic_struct();
948 test_dynamic_nested_struct();
949 test_dynamic_vla_struct();
950 test_dynamic_struct_vla();
948e3e72 951 test_dynamic_nested_vla();
19fa6aa2 952 test_variadic();
41c4d119 953 test_static_variadic();
4f40d951
MD
954 test_bool();
955 test_dynamic_bool();
8ceca0cd 956 test_dynamic_vla_with_visitor();
2b359235 957 test_dynamic_struct_with_visitor();
65010f43 958 test_event_user_attribute();
a848763d 959 test_field_user_attribute();
808bd9bf
MD
960 test_variadic_attr();
961 test_variadic_vla_attr();
962 test_variadic_struct_attr();
fb25b355
MD
963 test_float();
964 test_variadic_float();
f611d0c3
MD
965 return 0;
966}
This page took 0.067507 seconds and 4 git commands to generate.