Merge branch 'master' of https://github.com/P-p-H-d/mlib
This commit is contained in:
commit
76f5085e84
2 files changed
+19
-6
No files matched your search
+14
-5
@@ -204,7 +204,7 @@
|
|||||||
b->root = NULL; \
|
b->root = NULL; \
|
||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
static inline node_t M_C(name, _copy_node)(const node_t o) \
|
static inline node_t M_C(name, _copy_node)(const node_t o, const node_t root) \
|
||||||
{ \
|
{ \
|
||||||
node_t n = M_C(name, _new_node)(); \
|
node_t n = M_C(name, _new_node)(); \
|
||||||
n->num = o->num; \
|
n->num = o->num; \
|
||||||
@@ -221,12 +221,21 @@
|
|||||||
,) \
|
,) \
|
||||||
} else { \
|
} else { \
|
||||||
for(int i = 0; i <= num; i++) { \
|
for(int i = 0; i <= num; i++) { \
|
||||||
n->kind.node[i] = M_C(name, _copy_node)(o->kind.node[i]); \
|
n->kind.node[i] = M_C(name, _copy_node)(o->kind.node[i], root); \
|
||||||
} \
|
} \
|
||||||
for(int i = 0; i < num; i++) { \
|
for(int i = 0; i < num; i++) { \
|
||||||
n->kind.node[i]->next = n->kind.node[i+1]; \
|
node_t current = n->kind.node[i]; \
|
||||||
|
node_t next = n->kind.node[i+1]; \
|
||||||
|
current->next = next; \
|
||||||
|
while (!M_C(name, _is_leaf)(current)) { \
|
||||||
|
assert(!M_C(name, _is_leaf)(next)); \
|
||||||
|
current = current->kind.node[current->num]; \
|
||||||
|
next = next->kind.node[0]; \
|
||||||
|
current->next = next; \
|
||||||
|
} \
|
||||||
} \
|
} \
|
||||||
} \
|
} \
|
||||||
|
BPTREEI_NODE_CONTRACT(N, key_oplist, n, (o==root) ? n : root); \
|
||||||
return n; \
|
return n; \
|
||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
@@ -234,7 +243,7 @@
|
|||||||
{ \
|
{ \
|
||||||
BPTREEI_CONTRACT(N, key_oplist, o); \
|
BPTREEI_CONTRACT(N, key_oplist, o); \
|
||||||
assert (b != NULL); \
|
assert (b != NULL); \
|
||||||
b->root = M_C(name, _copy_node)(o->root); \
|
b->root = M_C(name, _copy_node)(o->root, o->root); \
|
||||||
b->size = o->size; \
|
b->size = o->size; \
|
||||||
BPTREEI_CONTRACT(N, key_oplist, b); \
|
BPTREEI_CONTRACT(N, key_oplist, b); \
|
||||||
} \
|
} \
|
||||||
@@ -837,7 +846,7 @@
|
|||||||
if (!M_GET_EQUAL value_oplist (*ref1->value_ptr, *ref2->value_ptr)) \
|
if (!M_GET_EQUAL value_oplist (*ref1->value_ptr, *ref2->value_ptr)) \
|
||||||
return false; \
|
return false; \
|
||||||
, \
|
, \
|
||||||
if (M_GET_EQUAL key_oplist (*ref1, *ref2) == false) \
|
if (!M_GET_EQUAL key_oplist (*ref1, *ref2)) \
|
||||||
return false; \
|
return false; \
|
||||||
) \
|
) \
|
||||||
M_C(name, _next)(it1); \
|
M_C(name, _next)(it1); \
|
||||||
|
|||||||
@@ -204,10 +204,12 @@ static void test4(void)
|
|||||||
btree_set_at(b1, i, 1000*i);
|
btree_set_at(b1, i, 1000*i);
|
||||||
assert(btree_size(b1) == 1000);
|
assert(btree_size(b1) == 1000);
|
||||||
btree_init_set(b2, b1);
|
btree_init_set(b2, b1);
|
||||||
assert(btree_size(b2) == 1000);
|
assert (btree_size(b2) == 1000);
|
||||||
|
assert (btree_equal_p(b1, b2));
|
||||||
for(int i = 0; i < 1000; i++) {
|
for(int i = 0; i < 1000; i++) {
|
||||||
bool r = btree_remove(b2, i);
|
bool r = btree_remove(b2, i);
|
||||||
assert (r == true);
|
assert (r == true);
|
||||||
|
assert (!btree_equal_p(b1, b2));
|
||||||
}
|
}
|
||||||
assert(btree_size(b2) == 0);
|
assert(btree_size(b2) == 0);
|
||||||
|
|
||||||
@@ -216,6 +218,7 @@ static void test4(void)
|
|||||||
assert(btree_size(b2) == 5000);
|
assert(btree_size(b2) == 5000);
|
||||||
btree_set(b2, b1);
|
btree_set(b2, b1);
|
||||||
assert(btree_size(b2) == 1000);
|
assert(btree_size(b2) == 1000);
|
||||||
|
assert (btree_equal_p(b1, b2));
|
||||||
for(int i = 0; i < 1000; i++) {
|
for(int i = 0; i < 1000; i++) {
|
||||||
bool r = btree_remove(b2, i);
|
bool r = btree_remove(b2, i);
|
||||||
assert (r == true);
|
assert (r == true);
|
||||||
@@ -224,6 +227,7 @@ static void test4(void)
|
|||||||
|
|
||||||
btree_set(b1, b2);
|
btree_set(b1, b2);
|
||||||
assert(btree_size(b1) == 0);
|
assert(btree_size(b1) == 0);
|
||||||
|
assert (btree_equal_p(b1, b2));
|
||||||
|
|
||||||
btree_clear(b1);
|
btree_clear(b1);
|
||||||
btree_clear(b2);
|
btree_clear(b2);
|
||||||
|
|||||||
Reference in new issue
Block a user