Update definition of returned iterator of _it_from of RB tree
from the greatest element of 'rbtree' lower of equal than 'data' to the lowest element of the tree 'rbtree' greater or equal than 'data' It is more logical and natural: if you have a tree of elements between [2, 4], and you want to iterate all elements from 0 to 10, the old definition doesn't allow you to iterate easily over this subset.
This commit is contained in:
1 parent
7dc1a9dc0e
commit
85a363d325
3 files changed
+33
-21
No files matched your search
+24
-16
@@ -351,11 +351,6 @@ static void test_from(void)
|
||||
assert(!rbtree_uint_it_while_p(it, 2));
|
||||
|
||||
rbtree_uint_it_from(it, tree, 2);
|
||||
assert(rbtree_uint_end_p(it));
|
||||
assert(rbtree_uint_it_until_p(it, 3));
|
||||
assert(!rbtree_uint_it_while_p(it, 3));
|
||||
|
||||
rbtree_uint_it_from(it, tree, 4);
|
||||
assert(!rbtree_uint_end_p(it));
|
||||
assert(rbtree_uint_it_until_p(it, 3));
|
||||
assert(rbtree_uint_it_while_p(it, 3));
|
||||
@@ -364,6 +359,11 @@ static void test_from(void)
|
||||
assert(rbtree_uint_it_until_p(it, 2));
|
||||
assert(!rbtree_uint_it_while_p(it, 2));
|
||||
|
||||
rbtree_uint_it_from(it, tree, 4);
|
||||
assert(rbtree_uint_end_p(it));
|
||||
assert(rbtree_uint_it_until_p(it, 3));
|
||||
assert(!rbtree_uint_it_while_p(it, 3));
|
||||
|
||||
// More elements
|
||||
rbtree_uint_push(tree, 10);
|
||||
rbtree_uint_push(tree, 5);
|
||||
@@ -410,24 +410,32 @@ static void test_from(void)
|
||||
}
|
||||
assert(k == 2);
|
||||
|
||||
// No element is lower or equal than 0 ==> The set is empty
|
||||
k = 0;
|
||||
const unsigned int tab1[] = { 1, 3, 5};
|
||||
for( rbtree_uint_it_from(it, tree, 0); rbtree_uint_it_while_p(it, 6); rbtree_uint_next(it)) {
|
||||
assert (k < 3);
|
||||
assert(tab0[k] == *rbtree_uint_cref(it));
|
||||
k++;
|
||||
}
|
||||
assert(k == 0);
|
||||
|
||||
// The iteration starts from 3 which is lower or equal than 4.
|
||||
k = 0;
|
||||
for( rbtree_uint_it_from(it, tree, 4); rbtree_uint_it_while_p(it, 7); rbtree_uint_next(it)) {
|
||||
assert (k < 3);
|
||||
assert(tab0[k] == *rbtree_uint_cref(it));
|
||||
assert(tab1[k] == *rbtree_uint_cref(it));
|
||||
k++;
|
||||
}
|
||||
assert(k == 3);
|
||||
|
||||
k = 0;
|
||||
const unsigned int tab2[] = { 5, 7};
|
||||
for( rbtree_uint_it_from(it, tree, 4); rbtree_uint_it_while_p(it, 7); rbtree_uint_next(it)) {
|
||||
assert (k < 2);
|
||||
assert(tab2[k] == *rbtree_uint_cref(it));
|
||||
k++;
|
||||
}
|
||||
assert(k == 2);
|
||||
|
||||
// From higher than all elements in the tree ==> no iterator.
|
||||
k = 0;
|
||||
for( rbtree_uint_it_from(it, tree, 11); rbtree_uint_it_while_p(it, 17); rbtree_uint_next(it)) {
|
||||
assert (k < 2);
|
||||
k++;
|
||||
}
|
||||
assert(k == 0);
|
||||
|
||||
rbtree_uint_clear(tree);
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user