Add tree search test
Some checks failed
libakstdlib CI Build / cmake_build (push) Failing after 2m41s
Some checks failed
libakstdlib CI Build / cmake_build (push) Failing after 2m41s
This commit is contained in:
71
src/stdlib.c
71
src/stdlib.c
@@ -266,39 +266,46 @@ akerr_ErrorContext AKERR_NOIGNORE *aksl_tree_iterate(
|
||||
if ( lfree == NULL ) {
|
||||
lfree = &aksl_free;
|
||||
}
|
||||
switch ( searchmode ) {
|
||||
case AKSL_TREE_SEARCH_DFS_PREORDER:
|
||||
PASS(e, iter(root, data));
|
||||
if ( root->left != NULL ) {
|
||||
PASS(e, aksl_tree_iterate(root->left, iter, lalloc, lfree, searchmode, data, NULL));
|
||||
ATTEMPT {
|
||||
switch ( searchmode ) {
|
||||
case AKSL_TREE_SEARCH_DFS_PREORDER:
|
||||
CATCH(e, iter(root, data));
|
||||
if ( root->left != NULL ) {
|
||||
PASS(e, aksl_tree_iterate(root->left, iter, lalloc, lfree, searchmode, data, NULL));
|
||||
}
|
||||
if ( root-> right != NULL ) {
|
||||
PASS(e, aksl_tree_iterate(root->right, iter, lalloc, lfree, searchmode, data, NULL));
|
||||
}
|
||||
break;
|
||||
case AKSL_TREE_SEARCH_DFS_POSTORDER:
|
||||
if ( root->left != NULL ) {
|
||||
PASS(e, aksl_tree_iterate(root->left, iter, lalloc, lfree, searchmode, data, NULL));
|
||||
}
|
||||
if ( root-> right != NULL ) {
|
||||
PASS(e, aksl_tree_iterate(root->right, iter, lalloc, lfree, searchmode, data, NULL));
|
||||
}
|
||||
CATCH(e, iter(root, data));
|
||||
break;
|
||||
case AKSL_TREE_SEARCH_DFS_INORDER:
|
||||
if ( root->left != NULL ) {
|
||||
PASS(e, aksl_tree_iterate(root->left, iter, lalloc, lfree, searchmode, data, NULL));
|
||||
}
|
||||
CATCH(e, iter(root, data));
|
||||
if ( root-> right != NULL ) {
|
||||
PASS(e, aksl_tree_iterate(root->right, iter, lalloc, lfree, searchmode, data, NULL));
|
||||
}
|
||||
break;
|
||||
case AKSL_TREE_SEARCH_BFS:
|
||||
case AKSL_TREE_SEARCH_BFS_RIGHT:
|
||||
FAIL_RETURN(e, AKERR_NOT_IMPLEMENTED, "Searchmode %d", searchmode);
|
||||
break;
|
||||
}
|
||||
if ( root-> right != NULL ) {
|
||||
PASS(e, aksl_tree_iterate(root->right, iter, lalloc, lfree, searchmode, data, NULL));
|
||||
}
|
||||
break;
|
||||
case AKSL_TREE_SEARCH_DFS_POSTORDER:
|
||||
if ( root->left != NULL ) {
|
||||
PASS(e, aksl_tree_iterate(root->left, iter, lalloc, lfree, searchmode, data, NULL));
|
||||
}
|
||||
if ( root-> right != NULL ) {
|
||||
PASS(e, aksl_tree_iterate(root->right, iter, lalloc, lfree, searchmode, data, NULL));
|
||||
}
|
||||
PASS(e, iter(root, data));
|
||||
break;
|
||||
case AKSL_TREE_SEARCH_DFS_INORDER:
|
||||
if ( root->left != NULL ) {
|
||||
PASS(e, aksl_tree_iterate(root->left, iter, lalloc, lfree, searchmode, data, NULL));
|
||||
}
|
||||
PASS(e, iter(root, data));
|
||||
if ( root-> right != NULL ) {
|
||||
PASS(e, aksl_tree_iterate(root->right, iter, lalloc, lfree, searchmode, data, NULL));
|
||||
}
|
||||
break;
|
||||
case AKSL_TREE_SEARCH_BFS:
|
||||
case AKSL_TREE_SEARCH_BFS_RIGHT:
|
||||
FAIL_RETURN(e, AKERR_NOT_IMPLEMENTED, "Searchmode %d", searchmode);
|
||||
break;
|
||||
}
|
||||
} CLEANUP {
|
||||
} PROCESS(e) {
|
||||
} HANDLE(e, AKERR_ITERATOR_BREAK) {
|
||||
// This is not an error condition, it's just telling us to stop early
|
||||
SUCCEED_RETURN(e);
|
||||
} FINISH(e, true);
|
||||
SUCCEED_RETURN(e);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user