aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/dynarray.c11
-rw-r--r--tests/dynarray_struct.c40
2 files changed, 45 insertions, 6 deletions
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 <stdio.h>
#include <stdlib.h>
@@ -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 <stdio.h>
+
+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;
+}