tests/test_iterator.c

changeset 1429
6e0c3a8a914a
parent 1070
0a5a356a4486
equal deleted inserted replaced
1428:0ac4aa1737fd 1429:6e0c3a8a914a
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 }

mercurial