repos / gbc

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

gbc / tests
xplshn  ·  2025-09-10

arrays.c

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