1
+ #define MKCREFLECT_IMPL
1
2
#include "../submodules/generic-print/print.h"
2
3
#include "deps-test.h"
3
4
#include <assert.h>
4
5
static int do_get_google ();
5
6
static inline int file_exists (const char * path );
6
7
8
+
7
9
enum ExampleEvents {
8
10
EVENT_START = 100 ,
9
11
EVENT_MIDDLE = 200 ,
@@ -12,6 +14,80 @@ enum ExampleEvents {
12
14
struct FnArgs {
13
15
int counter ;
14
16
};
17
+ typedef struct {
18
+ int p1 ;
19
+ int p2 ;
20
+ } BaseStruct ;
21
+
22
+ MKCREFLECT_DEFINE_STRUCT (T ,
23
+ (STRING , char , s , 20 ),
24
+ (INTEGER , unsigned int , i ))
25
+
26
+ MKCREFLECT_DEFINE_STRUCT (Address ,
27
+ (STRING , char , street , 20 ),
28
+ (STRUCT , T , t ),
29
+ (INTEGER , unsigned int , house_number ))
30
+
31
+
32
+ MKCREFLECT_DEFINE_STRUCT (TestStruct ,
33
+ (INTEGER , int , int_field ),
34
+ (STRING , char , array_field , 20 ),
35
+ (INTEGER , size_t , size_field ),
36
+ (INTEGER , unsigned int , field1 ),
37
+ (INTEGER , int64_t , field2 , 20 ),
38
+ (STRING , char , field3 , 10 ),
39
+ (STRUCT , BaseStruct , field4 ),
40
+ (FLOAT , float , field5 ),
41
+ (DOUBLE , double , field6 ),
42
+ (POINTER , void * , field7 , 3 ))
43
+
44
+
45
+ Address address ;
46
+ TestStruct test ;
47
+ T t ;
48
+ MKCREFLECT_TypeInfo * test_info , * address_info , * t_info ;
49
+
50
+
51
+ void do_mkcreflect (){
52
+ test_info = mkcreflect_get_TestStruct_type_info ();
53
+
54
+ for (size_t i = 0 ; i < test_info -> fields_count ; i ++ ) {
55
+ MKCREFLECT_FieldInfo * field = & test_info -> fields [i ];
56
+ printf (" * %s\n" , field -> field_name );
57
+ printf (" Type: %s\n" , field -> field_type );
58
+ printf (" Total size: %lu\n" , field -> size );
59
+ printf (" Offset: %lu\n" , field -> offset );
60
+ if (field -> array_size != -1 ) {
61
+ printf (" It is an array! Number of elements: %d, size of single element: %lu\n" ,
62
+ field -> array_size , field -> size / field -> array_size );
63
+ }
64
+ }
65
+ address_info = mkcreflect_get_Address_type_info ();
66
+ for (size_t i = 0 ; i < address_info -> fields_count ; i ++ ) {
67
+ MKCREFLECT_FieldInfo * field = & address_info -> fields [i ];
68
+ printf (" * %s\n" , field -> field_name );
69
+ printf (" Type: %s\n" , field -> field_type );
70
+ printf (" Total size: %lu\n" , field -> size );
71
+ printf (" Offset: %lu\n" , field -> offset );
72
+ if (field -> array_size != -1 ) {
73
+ printf (" It is an array! Number of elements: %d, size of single element: %lu\n" ,
74
+ field -> array_size , field -> size / field -> array_size );
75
+ }
76
+ }
77
+ t_info = mkcreflect_get_T_type_info ();
78
+ for (size_t i = 0 ; i < t_info -> fields_count ; i ++ ) {
79
+ MKCREFLECT_FieldInfo * field = & t_info -> fields [i ];
80
+ printf (" * %s\n" , field -> field_name );
81
+ printf (" Type: %s\n" , field -> field_type );
82
+ printf (" Total size: %lu\n" , field -> size );
83
+ printf (" Offset: %lu\n" , field -> offset );
84
+ if (field -> array_size != -1 ) {
85
+ printf (" It is an array! Number of elements: %d, size of single element: %lu\n" ,
86
+ field -> array_size , field -> size / field -> array_size );
87
+ }
88
+ }
89
+ }
90
+
15
91
char JSON_TESTS_FILE [] = ".tests.json" ,
16
92
* JSON_TESTS_CONTENT ;
17
93
@@ -836,6 +912,13 @@ TEST t_vtparse_simple(void){
836
912
}
837
913
838
914
915
+ TEST t_mkcreflect (){
916
+ do_mkcreflect ();
917
+
918
+ PASS ();
919
+ }
920
+
921
+
839
922
TEST t_generic_print (){
840
923
int x [] = { 1 , 2 , 3 };
841
924
char * args [] = { "gcc" , "hello.c" , "-o" , "hello" };
@@ -1020,6 +1103,10 @@ SUITE(s_generic_print) {
1020
1103
PASS ();
1021
1104
}
1022
1105
1106
+ SUITE (s_mkcreflect ) {
1107
+ RUN_TEST (t_mkcreflect );
1108
+ PASS ();
1109
+ }
1023
1110
SUITE (s_json ) {
1024
1111
RUN_TEST (t_read_json_file );
1025
1112
RUN_TEST (t_process_json_lines );
@@ -1059,6 +1146,7 @@ int main(int argc, char **argv) {
1059
1146
RUN_SUITE (s_generic_print );
1060
1147
RUN_SUITE (s_murmurhash );
1061
1148
RUN_SUITE (s_libbeaufort );
1149
+ RUN_SUITE (s_mkcreflect );
1062
1150
GREATEST_MAIN_END ();
1063
1151
size_t used = do_dmt_summary ();
1064
1152
ASSERT_EQ (used , 0 );
0 commit comments