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}