33 CX_TEST(test_iterator_create) { |
33 CX_TEST(test_iterator_create) { |
34 unsigned array[20]; |
34 unsigned array[20]; |
35 size_t size = cx_nmemb(array); |
35 size_t size = cx_nmemb(array); |
36 for (unsigned i = 0 ; i < size ; i++) array[i] = i; |
36 for (unsigned i = 0 ; i < size ; i++) array[i] = i; |
37 |
37 |
38 CxIterator iter = cxIterator(array, sizeof(unsigned), size); |
38 CxIterator iter = cxIterator(array, sizeof(unsigned), size, true); |
39 CX_TEST_DO { |
39 CX_TEST_DO { |
40 CX_TEST_ASSERT(iter.index == 0); |
40 CX_TEST_ASSERT(iter.index == 0); |
41 CX_TEST_ASSERT(iter.elem_size == sizeof(unsigned)); |
41 CX_TEST_ASSERT(iter.elem_size == sizeof(unsigned)); |
42 CX_TEST_ASSERT(iter.elem_count == size); |
42 CX_TEST_ASSERT(iter.elem_count == size); |
43 CX_TEST_ASSERT(iter.src_handle.c == array); |
43 CX_TEST_ASSERT(iter.src_handle == array); |
44 CX_TEST_ASSERT(iter.elem_handle == &array[0]); |
44 CX_TEST_ASSERT(iter.elem_handle == &array[0]); |
45 CX_TEST_ASSERT(cxIteratorValid(iter)); |
45 CX_TEST_ASSERT(cxIteratorValid(iter)); |
46 } |
46 } |
47 } |
47 } |
48 |
48 |
49 CX_TEST(test_iterator_create_null) { |
49 CX_TEST(test_iterator_create_null) { |
50 CxIterator iter = cxIterator(NULL, sizeof(unsigned), 47); |
50 CxIterator iter = cxIterator(NULL, sizeof(unsigned), 47, true); |
51 CX_TEST_DO { |
51 CX_TEST_DO { |
52 CX_TEST_ASSERT(iter.index == 0); |
52 CX_TEST_ASSERT(iter.index == 0); |
53 CX_TEST_ASSERT(iter.elem_size == sizeof(unsigned)); |
53 CX_TEST_ASSERT(iter.elem_size == sizeof(unsigned)); |
54 CX_TEST_ASSERT(iter.elem_count == 0); |
54 CX_TEST_ASSERT(iter.elem_count == 0); |
55 CX_TEST_ASSERT(iter.src_handle.c == NULL); |
55 CX_TEST_ASSERT(iter.src_handle == NULL); |
56 CX_TEST_ASSERT(iter.elem_handle == NULL); |
56 CX_TEST_ASSERT(iter.elem_handle == NULL); |
57 CX_TEST_ASSERT(!cxIteratorValid(iter)); |
57 CX_TEST_ASSERT(!cxIteratorValid(iter)); |
58 } |
58 } |
59 } |
59 } |
60 |
60 |
61 CX_TEST(test_iterator_iterate) { |
61 CX_TEST(test_iterator_iterate) { |
62 unsigned array[20]; |
62 unsigned array[20]; |
63 size_t size = cx_nmemb(array); |
63 size_t size = cx_nmemb(array); |
64 for (unsigned i = 0 ; i < size ; i++) array[i] = i; |
64 for (unsigned i = 0 ; i < size ; i++) array[i] = i; |
65 |
65 |
66 CxIterator iter = cxIterator(array, sizeof(unsigned), size); |
66 CxIterator iter = cxIterator(array, sizeof(unsigned), size, true); |
67 CX_TEST_DO { |
67 CX_TEST_DO { |
68 CX_TEST_ASSERT(iter.elem_size == sizeof(unsigned)); |
68 CX_TEST_ASSERT(iter.elem_size == sizeof(unsigned)); |
69 CX_TEST_ASSERT(iter.elem_count == size); |
69 CX_TEST_ASSERT(iter.elem_count == size); |
70 CX_TEST_ASSERT(iter.src_handle.c == array); |
70 CX_TEST_ASSERT(iter.src_handle == array); |
71 unsigned expected = 0; |
71 unsigned expected = 0; |
72 cx_foreach(unsigned *, e, iter) { |
72 cx_foreach(unsigned *, e, iter) { |
73 CX_TEST_ASSERT(iter.index == expected); |
73 CX_TEST_ASSERT(iter.index == expected); |
74 CX_TEST_ASSERT(*e == expected); |
74 CX_TEST_ASSERT(*e == expected); |
75 CX_TEST_ASSERT(iter.elem_handle == &array[expected]); |
75 CX_TEST_ASSERT(iter.elem_handle == &array[expected]); |
86 for (unsigned i = 0 ; i < size ; i++) { |
86 for (unsigned i = 0 ; i < size ; i++) { |
87 array[i] = 3*i; |
87 array[i] = 3*i; |
88 ptr_array[i] = &array[i]; |
88 ptr_array[i] = &array[i]; |
89 } |
89 } |
90 |
90 |
91 CxIterator iter = cxIteratorPtr(ptr_array, size); |
91 CxIterator iter = cxIteratorPtr(ptr_array, size, true); |
92 CX_TEST_DO { |
92 CX_TEST_DO { |
93 CX_TEST_ASSERT(iter.elem_size == sizeof(void*)); |
93 CX_TEST_ASSERT(iter.elem_size == sizeof(void*)); |
94 CX_TEST_ASSERT(iter.elem_count == size); |
94 CX_TEST_ASSERT(iter.elem_count == size); |
95 CX_TEST_ASSERT(iter.src_handle.c == ptr_array); |
95 CX_TEST_ASSERT(iter.src_handle == ptr_array); |
96 unsigned idx = 0; |
96 unsigned idx = 0; |
97 cx_foreach(unsigned *, e, iter) { |
97 cx_foreach(unsigned *, e, iter) { |
98 CX_TEST_ASSERT(iter.index == idx); |
98 CX_TEST_ASSERT(iter.index == idx); |
99 CX_TEST_ASSERT(*e == array[idx]); |
99 CX_TEST_ASSERT(*e == array[idx]); |
100 CX_TEST_ASSERT(iter.elem_handle == &ptr_array[idx]); |
100 CX_TEST_ASSERT(iter.elem_handle == &ptr_array[idx]); |
119 }; |
119 }; |
120 unsigned expected_result[] = { |
120 unsigned expected_result[] = { |
121 0, 2, 4, 6, 8, 10, 12, 14, 16, 18 |
121 0, 2, 4, 6, 8, 10, 12, 14, 16, 18 |
122 }; |
122 }; |
123 |
123 |
124 CxIterator iter = cxMutIterator(array, sizeof(unsigned), size, true); |
124 CxIterator iter = cxIterator(array, sizeof(unsigned), size, true); |
125 CX_TEST_DO { |
125 CX_TEST_DO { |
126 unsigned expected = 0; |
126 unsigned expected = 0; |
127 cx_foreach(unsigned *, e, iter) { |
127 cx_foreach(unsigned *, e, iter) { |
128 CX_TEST_ASSERT(*e == expected); |
128 CX_TEST_ASSERT(*e == expected); |
129 CX_TEST_ASSERT(iter.index == indices[expected]); |
129 CX_TEST_ASSERT(iter.index == indices[expected]); |
130 CX_TEST_ASSERT(iter.elem_size == sizeof(unsigned)); |
130 CX_TEST_ASSERT(iter.elem_size == sizeof(unsigned)); |
131 CX_TEST_ASSERT(iter.elem_count == elem_counts[expected]); |
131 CX_TEST_ASSERT(iter.elem_count == elem_counts[expected]); |
132 CX_TEST_ASSERT(iter.src_handle.m == array); |
132 CX_TEST_ASSERT(iter.src_handle == array); |
133 CX_TEST_ASSERT(iter.elem_handle == &array[indices[expected]]); |
133 CX_TEST_ASSERT(iter.elem_handle == &array[indices[expected]]); |
134 expected++; |
134 expected++; |
135 if (expected % 2 == 0) { |
135 if (expected % 2 == 0) { |
136 cxIteratorFlagRemoval(iter); |
136 cxIteratorFlagRemoval(iter); |
137 } |
137 } |
164 unsigned expected_visits[] = { |
164 unsigned expected_visits[] = { |
165 0, 1, 19, 2, 18, 3, 17, 4, 16, 5, |
165 0, 1, 19, 2, 18, 3, 17, 4, 16, 5, |
166 15, 6, 14, 7, 13, 8, 12, 9, 11, 10 |
166 15, 6, 14, 7, 13, 8, 12, 9, 11, 10 |
167 }; |
167 }; |
168 |
168 |
169 CxIterator iter = cxMutIterator(array, sizeof(unsigned), size, false); |
169 CxIterator iter = cxIterator(array, sizeof(unsigned), size, false); |
170 CX_TEST_DO { |
170 CX_TEST_DO { |
171 unsigned expected = 0; |
171 unsigned expected = 0; |
172 cx_foreach(unsigned *, e, iter) { |
172 cx_foreach(unsigned *, e, iter) { |
173 CX_TEST_ASSERT(*e == expected_visits[expected]); |
173 CX_TEST_ASSERT(*e == expected_visits[expected]); |
174 CX_TEST_ASSERT(iter.index == indices[expected]); |
174 CX_TEST_ASSERT(iter.index == indices[expected]); |
175 CX_TEST_ASSERT(iter.elem_size == sizeof(unsigned)); |
175 CX_TEST_ASSERT(iter.elem_size == sizeof(unsigned)); |
176 CX_TEST_ASSERT(iter.elem_count == elem_counts[expected]); |
176 CX_TEST_ASSERT(iter.elem_count == elem_counts[expected]); |
177 CX_TEST_ASSERT(iter.src_handle.m == array); |
177 CX_TEST_ASSERT(iter.src_handle == array); |
178 CX_TEST_ASSERT(iter.elem_handle == &array[indices[expected]]); |
178 CX_TEST_ASSERT(iter.elem_handle == &array[indices[expected]]); |
179 expected++; |
179 expected++; |
180 if (expected % 2 == 0) { |
180 if (expected % 2 == 0) { |
181 cxIteratorFlagRemoval(iter); |
181 cxIteratorFlagRemoval(iter); |
182 } |
182 } |