1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 #include "cx/test.h"
30
31 #include "cx/iterator.h"
32
33 CX_TEST(test_iterator_create) {
34 unsigned array[
20];
35 size_t size = cx_nmemb(array);
36 for (
unsigned i =
0 ; i < size ; i++) array[i] = i;
37
38 CxIterator iter = cxIterator(array,
sizeof(
unsigned), size);
39 CX_TEST_DO {
40 CX_TEST_ASSERT(iter.index ==
0);
41 CX_TEST_ASSERT(iter.elem_size ==
sizeof(
unsigned));
42 CX_TEST_ASSERT(iter.elem_count == size);
43 CX_TEST_ASSERT(iter.src_handle == array);
44 CX_TEST_ASSERT(iter.elem_handle == &array[
0]);
45 CX_TEST_ASSERT(cxIteratorValid(iter));
46 }
47 }
48
49 CX_TEST(test_iterator_create_null) {
50 CxIterator iter = cxIterator(
NULL,
sizeof(
unsigned),
47);
51 CX_TEST_DO {
52 CX_TEST_ASSERT(iter.index ==
0);
53 CX_TEST_ASSERT(iter.elem_size ==
sizeof(
unsigned));
54 CX_TEST_ASSERT(iter.elem_count ==
0);
55 CX_TEST_ASSERT(iter.src_handle ==
NULL);
56 CX_TEST_ASSERT(iter.elem_handle ==
NULL);
57 CX_TEST_ASSERT(!cxIteratorValid(iter));
58 }
59 }
60
61 CX_TEST(test_iterator_iterate) {
62 unsigned array[
20];
63 size_t size = cx_nmemb(array);
64 for (
unsigned i =
0 ; i < size ; i++) array[i] = i;
65
66 CxIterator iter = cxIterator(array,
sizeof(
unsigned), size);
67 CX_TEST_DO {
68 CX_TEST_ASSERT(iter.elem_size ==
sizeof(
unsigned));
69 CX_TEST_ASSERT(iter.elem_count == size);
70 CX_TEST_ASSERT(iter.src_handle == array);
71 unsigned expected =
0;
72 cx_foreach(
unsigned *, e, iter) {
73 CX_TEST_ASSERT(iter.index == expected);
74 CX_TEST_ASSERT(*e == expected);
75 CX_TEST_ASSERT(iter.elem_handle == &array[expected]);
76 expected++;
77 }
78 CX_TEST_ASSERT(expected == size);
79 }
80 }
81
82 CX_TEST(test_iterator_iterate_pointers) {
83 unsigned array[
20];
84 unsigned* ptr_array[
20];
85 size_t size = cx_nmemb(array);
86 for (
unsigned i =
0 ; i < size ; i++) {
87 array[i] =
3*i;
88 ptr_array[i] = &array[i];
89 }
90
91 CxIterator iter = cxIteratorPtr(ptr_array, size);
92 CX_TEST_DO {
93 CX_TEST_ASSERT(iter.elem_size ==
sizeof(
void*));
94 CX_TEST_ASSERT(iter.elem_count == size);
95 CX_TEST_ASSERT(iter.src_handle == ptr_array);
96 unsigned idx =
0;
97 cx_foreach(
unsigned *, e, iter) {
98 CX_TEST_ASSERT(iter.index == idx);
99 CX_TEST_ASSERT(*e == array[idx]);
100 CX_TEST_ASSERT(iter.elem_handle == &ptr_array[idx]);
101 idx++;
102 }
103 CX_TEST_ASSERT(idx == size);
104 }
105 }
106
107 CxTestSuite *cx_test_suite_iterator(
void) {
108 CxTestSuite *suite = cx_test_suite_new(
"iterator");
109
110 cx_test_register(suite, test_iterator_create);
111 cx_test_register(suite, test_iterator_iterate);
112 cx_test_register(suite, test_iterator_iterate_pointers);
113
114 return suite;
115 }
116
117