GRU - Generic Reusable Utilities
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros
collection/gru_tree_test.c

GRU tree example

#include <inttypes.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
static gru_tree_node_t *build_paths() {
gru_tree_node_t *usr = gru_tree_add_child(root, "usr");
gru_tree_node_t *opt = gru_tree_add_child(root, "opt");
gru_tree_node_t *var = gru_tree_add_child(root, "var");
gru_tree_node_t *usr_bin gru_attr_unused = gru_tree_add_child(usr, "bin");
gru_tree_node_t *opt_other gru_attr_unused = gru_tree_add_child(opt, "other");
gru_tree_node_t *var_log = gru_tree_add_child(var, "log");
gru_tree_node_t *var_log_a = gru_tree_add_child(var_log, "a");
gru_tree_node_t *var_log_a_b = gru_tree_add_child(var_log_a, "b");
gru_tree_node_t *var_log_a_c gru_attr_unused = gru_tree_add_child(var_log_a_b, "c");
return root;
}
bool compare_file_name(const void *current, const void *data, void *result) {
printf("Comparing %s with %s\n", (const char *) current, (const char *) data);
if (strcmp((const char *) current, (const char *) data) == 0) {
return true;
}
return false;
}
void print_path(const void *nodedata, void *data) {
printf("\t%s\n", (const char *) nodedata);
}
void print_path2(const void *nodedata, void *data) {
printf("\t%s\n", (char *) ((gru_tree_node_t *) nodedata)->data);
}
int main(int argc, char **argv) {
gru_tree_node_t *root = build_paths();
uint32_t count = gru_tree_count(root);
if (count != 11) {
fprintf(stderr, "Expected 11 nodes but got %d\n", count);
return EXIT_FAILURE;
}
uint32_t children = gru_tree_count_children(root);
if (children != 4) {
fprintf(stderr, "Expected 4 children nodes but got %d\n", children);
return EXIT_FAILURE;
}
printf("Printing childs of var\n");
printf("Done");
count = gru_tree_count(root);
if (count != 6) {
fprintf(stderr, "Expected 7 nodes after removing var but got %d\n", count);
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}