From b2df541c5d0dc00368754fd35e0af2341d1458eb Mon Sep 17 00:00:00 2001 From: justanothercatgirl Date: Wed, 19 Jun 2024 14:17:30 +0300 Subject: moved all containers to a single header "container.h" TODO: add linked list, hash map and other shit like this to the header --- tests/dynarray.c | 11 +++++------ tests/dynarray_struct.c | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 6 deletions(-) create mode 100644 tests/dynarray_struct.c (limited to 'tests') diff --git a/tests/dynarray.c b/tests/dynarray.c index d7a79d7..2d9ea61 100644 --- a/tests/dynarray.c +++ b/tests/dynarray.c @@ -1,8 +1,6 @@ -#define DYNARRAY_IMPLEMENTATION -#define UTILITY_IMPLEMENTATION +#define CONTAINER_IMPLEMENTATION #define UTILTY_EXPOSE_HELPERS -#include "../include/dynarray.h" -#include "../include/utility.h" +#include "../include/container.h" #include #include @@ -56,7 +54,8 @@ int main(void) array_qsort_integral(arr); // size: 5, cap: 5 /* qsort(arr, array_size(arr), array_element_size(arr), __default_int_cmp); */ print_arr(arr, __LINE__, "qsort"); - array_insert(arr, 20, 1); // size: 6, cap: 8 + TEST_TYPE __inserted = 20; + array_insert(arr, __inserted, 1); // size: 6, cap: 8 print_arr(arr, __LINE__, "1 insert"); for (size_t i = 0; i <= array_size(arr); i += 2) { @@ -74,7 +73,7 @@ int main(void) puts("\x1b[32mTest for \"" stringify(TEST_TYPE)"\" passed\x1b[0m"); } TEST_TYPE* elem; - if ((elem = array_at(arr, 2)) != NULL) { + if ((elem = array_at(arr, 1)) != NULL) { if (*elem == 42) { puts("array_at(1) = 42"); } diff --git a/tests/dynarray_struct.c b/tests/dynarray_struct.c new file mode 100644 index 0000000..6cce97c --- /dev/null +++ b/tests/dynarray_struct.c @@ -0,0 +1,40 @@ + +#define CONTAINER_IMPLEMENTATION +#include "../include/container.h" + +#include + +struct point { + float x, y, z, w; +}; + +void print_point(struct point* p) { + printf("{ .x=%.2f, .y=%.2f, .z=%.2f, .w=%.2f };\n", p->x, p->y, p->z, p->w); +} + +void print_array(struct point* p) { + for (size_t i = 0; i < array_size(p); ++i) { + printf("%zu: ", i); + print_point(p+i); + } +} + +int point_abs(const void* a, const void* b) { + struct point* c = (struct point*) a; + struct point* d = (struct point*) b; + float absa = c->x * c->x + c->y * c->y + c->z * c->z + c->w * c->w; + float absb = d->x * d->x + d->y * d->y + d->z * d->z + d->w * d->w; + return absa-absb; +} + +int main() +{ + struct point *points = array_new(struct point, 4); + for (size_t i = 0; i < array_size(points); ++i) points[i] = (struct point){.x = i, .y = 2 * i, .z = 4 * i, .w = 8 * i}; + array_push(points, ((struct point){.0f, 2.5f, 3.0, 4.0}) ); + array_insert(points, ((struct point){0}), 3); + array_qsort(points, point_abs); + print_array(points); + array_free(points); + return 0; +} -- cgit v1.2.3-70-g09d2