repos / gbc

GBC - Go B Compiler
git clone https://github.com/xplshn/gbc.git

gbc / tests
xplshn  ·  2025-09-14

arrays.bx

Bx
  1extrn printf, malloc;
  2
  3type struct Point {
  4    x int;
  5    y int;
  6    name *byte;
  7};
  8
  9type enum Color {
 10    RED,
 11    GREEN,
 12    BLUE,
 13    YELLOW
 14};
 15
 16void demo_integer_arrays() {
 17    printf("\nInteger arrays:\n");
 18
 19    int int_array[3];
 20    int8 int8_array[3];
 21    int16 int16_array[3];
 22    int32 int32_array[3];
 23    int64 int64_array[3];
 24    uint uint_array[3];
 25    uint8 uint8_array[3];
 26    uint16 uint16_array[3];
 27    uint32 uint32_array[3];
 28    uint64 uint64_array[3];
 29    byte byte_array[3];
 30
 31    int_array[0] = -100;
 32    int_array[1] = 0;
 33    int_array[2] = 100;
 34    printf("int: [%d, %d, %d]\n", int_array[0], int_array[1], int_array[2]);
 35
 36    int8_array[0] = -50;
 37    int8_array[1] = 0;
 38    int8_array[2] = 50;
 39    printf("int8: [%d, %d, %d]\n", int8_array[0], int8_array[1], int8_array[2]);
 40
 41    int16_array[0] = -1000;
 42    int16_array[1] = 0;
 43    int16_array[2] = 1000;
 44    printf("int16: [%d, %d, %d]\n", int16_array[0], int16_array[1], int16_array[2]);
 45
 46    int32_array[0] = -100000;
 47    int32_array[1] = 0;
 48    int32_array[2] = 100000;
 49    printf("int32: [%d, %d, %d]\n", int32_array[0], int32_array[1], int32_array[2]);
 50
 51    int64_array[0] = -1000000;
 52    int64_array[1] = 0;
 53    int64_array[2] = 1000000;
 54    printf("int64: [%ld, %ld, %ld]\n", int64_array[0], int64_array[1], int64_array[2]);
 55
 56    uint_array[0] = 10;
 57    uint_array[1] = 20;
 58    uint_array[2] = 30;
 59    printf("uint: [%u, %u, %u]\n", uint_array[0], uint_array[1], uint_array[2]);
 60
 61    uint8_array[0] = 100;
 62    uint8_array[1] = 150;
 63    uint8_array[2] = 200;
 64    printf("uint8: [%u, %u, %u]\n", uint8_array[0], uint8_array[1], uint8_array[2]);
 65
 66    uint16_array[0] = 1000;
 67    uint16_array[1] = 2000;
 68    uint16_array[2] = 3000;
 69    printf("uint16: [%u, %u, %u]\n", uint16_array[0], uint16_array[1], uint16_array[2]);
 70
 71    uint32_array[0] = 100000;
 72    uint32_array[1] = 200000;
 73    uint32_array[2] = 300000;
 74    printf("uint32: [%u, %u, %u]\n", uint32_array[0], uint32_array[1], uint32_array[2]);
 75
 76    uint64_array[0] = 1000000;
 77    uint64_array[1] = 2000000;
 78    uint64_array[2] = 3000000;
 79    printf("uint64: [%lu, %lu, %lu]\n", uint64_array[0], uint64_array[1], uint64_array[2]);
 80
 81    byte_array[0] = 'A';
 82    byte_array[1] = 'B';
 83    byte_array[2] = 'C';
 84    printf("byte: [%c, %c, %c]\n", byte_array[0], byte_array[1], byte_array[2]);
 85}
 86
 87void demo_float_arrays() {
 88    printf("\nFloat arrays:\n");
 89
 90    float float_array[3];
 91    float32 float32_array[3];
 92    float64 float64_array[3];
 93
 94    float_array[0] = 1.1;
 95    float_array[1] = 2.2;
 96    float_array[2] = 3.3;
 97    printf("float: [%.2f, %.2f, %.2f]\n", float_array[0], float_array[1], float_array[2]);
 98
 99    float32_array[0] = 1.25;
100    float32_array[1] = 2.75;
101    float32_array[2] = 3.125;
102    printf("float32: [%.3f, %.3f, %.3f]\n", float32_array[0], float32_array[1], float32_array[2]);
103
104    float64_array[0] = 1.123456;
105    float64_array[1] = 2.789012;
106    float64_array[2] = 3.456789;
107    printf("float64: [%.6f, %.6f, %.6f]\n", float64_array[0], float64_array[1], float64_array[2]);
108}
109
110void demo_bool_arrays() {
111    printf("\nBool arrays:\n");
112
113    bool bool_array[4];
114
115    bool_array[0] = 1;
116    bool_array[1] = 0;
117    bool_array[2] = 1;
118    bool_array[3] = 0;
119
120    printf("bool: [%s, %s, %s, %s]\n",
121           bool_array[0] ? "true" : "false",
122           bool_array[1] ? "true" : "false",
123           bool_array[2] ? "true" : "false",
124           bool_array[3] ? "true" : "false");
125}
126
127void demo_pointer_arrays() {
128    printf("\nPointer arrays:\n");
129
130    int values[3];
131    *int int_ptr_array[3];
132    *byte string_array[3];
133    *void void_ptr_array[3];
134
135    values[0] = 42;
136    values[1] = 84;
137    values[2] = 126;
138
139    int_ptr_array[0] = &values[0];
140    int_ptr_array[1] = &values[1];
141    int_ptr_array[2] = &values[2];
142
143    printf("int*: [%d, %d, %d]\n",
144           *int_ptr_array[0], *int_ptr_array[1], *int_ptr_array[2]);
145
146    string_array[0] = "Hello";
147    string_array[1] = "World";
148    string_array[2] = "GBC";
149
150    printf("string: [\"%s\", \"%s\", \"%s\"]\n",
151           string_array[0], string_array[1], string_array[2]);
152
153    void_ptr_array[0] = &values[0];
154    void_ptr_array[1] = string_array[0];
155    void_ptr_array[2] = int_ptr_array;
156}
157
158void demo_struct_arrays() {
159    printf("\nStruct arrays:\n");
160
161    Point point_array[3];
162
163    point_array[0].x = 10;
164    point_array[0].y = 20;
165    point_array[0].name = "Origin";
166
167    point_array[1].x = 100;
168    point_array[1].y = 200;
169    point_array[1].name = "Point A";
170
171    point_array[2].x = -50;
172    point_array[2].y = 75;
173    point_array[2].name = "Point B";
174
175    printf("Points:\n");
176    i := 0;
177    while (i < 3) {
178        printf("  [%d]: (%d, %d) \"%s\"\n", i,
179               point_array[i].x, point_array[i].y, point_array[i].name);
180        i = i + 1;
181    }
182}
183
184void demo_enum_arrays() {
185    printf("\nEnum arrays:\n");
186
187    Color color_array[4];
188
189    color_array[0] = RED;
190    color_array[1] = GREEN;
191    color_array[2] = BLUE;
192    color_array[3] = YELLOW;
193
194    printf("Colors:\n");
195    i := 0;
196    while (i < 4) {
197        color_name := "";
198        switch (color_array[i]) {
199            case RED: color_name = "RED"; break;
200            case GREEN: color_name = "GREEN"; break;
201            case BLUE: color_name = "BLUE"; break;
202            case YELLOW: color_name = "YELLOW"; break;
203            default: color_name = "UNKNOWN";
204        }
205        printf("  [%d]: %s (%d)\n", i, color_name, color_array[i]);
206        i = i + 1;
207    }
208}
209
210void demo_struct_pointer_arrays() {
211    printf("\nStruct pointer arrays:\n");
212
213    *Point point_ptr_array[2];
214
215    point_ptr_array[0] = malloc(sizeof(Point));
216    point_ptr_array[1] = malloc(sizeof(Point));
217
218    point_ptr_array[0].x = 300;
219    point_ptr_array[0].y = 400;
220    point_ptr_array[0].name = "Dynamic A";
221
222    point_ptr_array[1].x = -150;
223    point_ptr_array[1].y = 250;
224    point_ptr_array[1].name = "Dynamic B";
225
226    printf("Dynamic points:\n");
227    i := 0;
228    while (i < 2) {
229        printf("  [%d]: (%d, %d) \"%s\"\n", i,
230               point_ptr_array[i].x, point_ptr_array[i].y, point_ptr_array[i].name);
231        i = i + 1;
232    }
233}
234
235int main() {
236    printf("Array types test\n");
237
238    demo_integer_arrays();
239    demo_float_arrays();
240    demo_bool_arrays();
241    demo_pointer_arrays();
242    demo_struct_arrays();
243    demo_enum_arrays();
244    demo_struct_pointer_arrays();
245
246    printf("\nDone.\n");
247    return (0);
248}