Skip to content

Commit ce24307

Browse files
feat(tests): add comprehensive tests for struct and pointer access in complex types
Signed-off-by: Praneeth Sarode <praneethsarode@gmail.com> Co-authored-by: G-Prototype <garggauransh375@gmail.com>
1 parent 93be150 commit ce24307

File tree

1 file changed

+87
-0
lines changed

1 file changed

+87
-0
lines changed
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
int printf(char* fmt, ...);
2+
3+
struct A{
4+
int a;
5+
struct B{
6+
int b;
7+
} b;
8+
};
9+
10+
typedef int v;
11+
typedef struct A A_s;
12+
13+
typedef struct C{
14+
struct A* a_ptr;
15+
v val;
16+
} C_s;
17+
18+
typedef class D{
19+
public:
20+
int x;
21+
A_s a_member;
22+
C_s c_member;
23+
D(){
24+
x = 0;
25+
}
26+
} D_c;
27+
28+
typedef struct {
29+
D_c d_member;
30+
A_s a_member;
31+
} E_s;
32+
33+
typedef E_s* E_p;
34+
35+
int main() {
36+
A_s a_instance;
37+
a_instance.a = 10;
38+
a_instance.b.b = 20;
39+
printf("a: %d, b.b: %d\n", a_instance.a, a_instance.b.b);
40+
41+
C_s c_instance;
42+
c_instance.a_ptr = &a_instance;
43+
c_instance.val = 30;
44+
45+
c_instance.a_ptr->a = 40; // Accessing A's member via pointer in C_s
46+
c_instance.a_ptr->b.b = 50;
47+
printf("C_s val: %d, A_s a via pointer: %d\n", c_instance.val, c_instance.a_ptr->a);
48+
printf("a_instance.a: %d, a_instance.b.b: %d\n", a_instance.a, a_instance.b.b);
49+
50+
D_c d_instance{};
51+
d_instance.x = 60;
52+
d_instance.a_member.a = 70;
53+
d_instance.a_member.b.b = 80;
54+
d_instance.c_member.a_ptr = &a_instance;
55+
d_instance.c_member.val = 90;
56+
57+
printf("D_c x: %d, a_member.a: %d, a_member.b.b: %d\n", d_instance.x, d_instance.a_member.a, d_instance.a_member.b.b);
58+
printf("c_member val: %d, a_ptr->a: %d\n", d_instance.c_member.val, d_instance.c_member.a_ptr->a);
59+
60+
E_s e_instance;
61+
e_instance.a_member.a = 100;
62+
e_instance.a_member.b.b = 110;
63+
e_instance.d_member.x = 120;
64+
e_instance.d_member.a_member.a = 130;
65+
e_instance.d_member.a_member.b.b = 140;
66+
e_instance.d_member.c_member.a_ptr = &a_instance;
67+
e_instance.d_member.c_member.val = 150;
68+
69+
printf("E_s a_member.a: %d, a_member.b.b: %d\n", e_instance.a_member.a, e_instance.a_member.b.b);
70+
printf("E_s d_member.x: %d, d_member.a_member.a: %d, d_member.a_member.b.b: %d\n",
71+
e_instance.d_member.x, e_instance.d_member.a_member.a, e_instance.d_member.a_member.b.b);
72+
printf("E_s d_member.c_member.val: %d, d_member.c_member.a_ptr->a: %d\n",
73+
e_instance.d_member.c_member.val, e_instance.d_member.c_member.a_ptr->a);
74+
75+
76+
E_p e_ptr = &e_instance;
77+
printf("Access via pointer - E_s a_member.a: %d, a_member.b.b: %d\n",
78+
e_ptr->a_member.a, e_ptr->a_member.b.b);
79+
printf("Access via pointer - E_s d_member.x: %d, d_member.a_member.a: %d, d_member.a_member.b.b: %d\n",
80+
e_ptr->d_member.x, e_ptr->d_member.a_member.a, e_ptr->d_member.a_member.b.b);
81+
printf("Access via pointer - E_s d_member.c_member.val: %d, d_member.c_member.a_ptr->a: %d\n",
82+
e_ptr->d_member.c_member.val, e_ptr->d_member.c_member.a_ptr->a);
83+
84+
85+
86+
return 0;
87+
}

0 commit comments

Comments
 (0)