tests/test_array.c
 1#include "alba.h"
 2
 3#include "check.h"
 4
 5START_TEST(test_create_array)
 6{
 7    const AlbaArray array = alba_create_array(sizeof(float), 0);
 8    ck_assert_int_eq(array.element_size, sizeof(float));
 9    ck_assert_int_eq(array.capacity, 0);
10    ck_assert_int_eq(array.length, 0);
11}
12
13END_TEST
14
15START_TEST(test_array_extend)
16{
17    AlbaArray array = alba_create_array(sizeof(float), 0);
18    alba_array_extend(&array, 2, &(float[]){1.0, 2.0});
19
20    ck_assert_int_eq(array.element_size, sizeof(float));
21    ck_assert_int_eq(array.capacity, 16);
22    ck_assert_int_eq(array.length, 2);
23    ck_assert_float_eq(((float*)array.data)[0], 1.0);
24    ck_assert_float_eq(((float*)array.data)[1], 2.0);
25
26    alba_array_extend(&array, 2, &(float[]){3.0, 4.0});
27    ck_assert_int_eq(array.capacity, 16);
28    ck_assert_int_eq(array.length, 4);
29    ck_assert_float_eq(((float*)array.data)[0], 1.0);
30    ck_assert_float_eq(((float*)array.data)[1], 2.0);
31    ck_assert_float_eq(((float*)array.data)[2], 3.0);
32    ck_assert_float_eq(((float*)array.data)[3], 4.0);
33}
34
35END_TEST
36
37uint32_t compare_floats(void* vpivot, void* velem)
38{
39    const float pivot = *(float*)vpivot;
40    const float elem = *(float*)velem;
41    return elem < pivot;
42}
43
44START_TEST(test_array_sort)
45{
46    AlbaArray array = alba_create_array(sizeof(float), 0);
47    const float values[] = {7, 2.3, 5, 6, 2, 3, 4, 9, 1, 4};
48    alba_array_extend(&array, 10, values);
49
50    ck_assert_int_eq(array.element_size, sizeof(float));
51    ck_assert_int_eq(array.length, 10);
52    ck_assert_int_eq(array.capacity, 16);
53
54    alba_array_sort(&array, compare_floats);
55
56    ck_assert_float_eq(((float*)array.data) [0], 1);
57    ck_assert_float_eq(((float*)array.data) [1], 2);
58    ck_assert_float_eq(((float*)array.data) [2], 2.3);
59    ck_assert_float_eq(((float*)array.data) [3], 3);
60    ck_assert_float_eq(((float*)array.data) [4], 4);
61    ck_assert_float_eq(((float*)array.data) [5], 4);
62    ck_assert_float_eq(((float*)array.data) [6], 5);
63    ck_assert_float_eq(((float*)array.data) [7], 6);
64    ck_assert_float_eq(((float*)array.data) [8], 7);
65    ck_assert_float_eq(((float*)array.data) [9], 9);
66}
67
68END_TEST
69
70int main(void)
71{
72    Suite* suite = suite_create("test_array");
73
74    {
75        TCase* test = tcase_create("test_create_array");
76        tcase_add_test(test, test_create_array);
77        suite_add_tcase(suite, test);
78    }
79    {
80        TCase* test = tcase_create("test_array_extend");
81        tcase_add_test(test, test_array_extend);
82        suite_add_tcase(suite, test);
83    }
84    {
85        TCase* test = tcase_create("test_array_sort");
86        tcase_add_test(test, test_array_sort);
87        suite_add_tcase(suite, test);
88    }
89
90    SRunner* runner = srunner_create(suite);
91
92    srunner_run_all(runner, CK_NORMAL);
93    const int number_failed = srunner_ntests_failed(runner);
94    srunner_free(runner);
95    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
96}