Compare commits

...

2 Commits

Author SHA1 Message Date
ff1c32bb33 add test for wm_treenode_all_keyroots 2023-12-29 15:15:49 +01:00
8629efe06f implement wm_treenode_all_keyroots 2023-12-29 15:14:44 +01:00
3 changed files with 37 additions and 0 deletions

View File

@ -196,6 +196,24 @@ static void test_wm_treenode_all_lmds(void **state)
wm_ptrarray_free(&ret);
}
static void test_wm_treenode_all_keyroots(void **state)
{
TreeNode *node1 = (TreeNode*)*state;
PtrArray keyroots = wm_treenode_all_keyroots(node1);
TreeNode **keyroot_nodes = (TreeNode**)keyroots.ptrs;
assert_int_equal(keyroots.size, 5);
assert_int_equal(keyroot_nodes[0]->id, 5);
assert_int_equal(keyroot_nodes[1]->id, 6);
assert_int_equal(keyroot_nodes[2]->id, 8);
assert_int_equal(keyroot_nodes[3]->id, 3);
assert_int_equal(keyroot_nodes[4]->id, 1);
wm_ptrarray_free(&keyroots);
}
static int test2_setup(void **state)
{
TreeNode *node1 = wm_treenode_new(NODE_VERTICAL, NULL);
@ -299,6 +317,7 @@ int main(void)
cmocka_unit_test(test_wm_treenode_lmd),
cmocka_unit_test(test_wm_is_treenode_keyroot),
cmocka_unit_test(test_wm_treenode_all_lmds),
cmocka_unit_test(test_wm_treenode_all_keyroots),
};
cmocka_run_group_tests(test_group1, NULL, NULL);

View File

@ -313,6 +313,23 @@ bool wm_is_treenode_keyroot(TreeNode *node)
return wm_treenode_lmd(node) != wm_treenode_lmd(node->parent);
}
PtrArray wm_treenode_all_keyroots(TreeNode *node)
{
assert(node);
PtrArray ret = wm_ptrarray_new();
PtrArray postorder = wm_postorder_traversal(node);
for (size_t i = 0; i < postorder.size; i++) {
TreeNode *node = ((TreeNode**)postorder.ptrs)[i];
if (wm_is_treenode_keyroot(node))
wm_ptrarray_push(&ret, node);
}
wm_ptrarray_free(&postorder);
return ret;
}
void wm_treenode_print(TreeNode *node)
{
char *str = wm_treenode_to_str(node);

View File

@ -106,6 +106,7 @@ TreeNode* wm_treenode_lmd(TreeNode *node);
PtrArray wm_treenode_all_lmds(TreeNode *node);
PtrArray wm_postorder_traversal(TreeNode *tree);
bool wm_is_treenode_keyroot(TreeNode *node);
PtrArray wm_treenode_all_keyroots(TreeNode *node);
ClientArray wm_clientarray_new();
void wm_clientarray_push(ClientArray *arr, Client node);