collection/gru_tree_test.c

GRU tree example

#include <inttypes.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>

#include "collection/gru_list.h"
#include "collection/gru_node.h"
#include "collection/gru_tree.h"

static gru_tree_node_t *build_paths() {
    gru_tree_node_t *root = gru_tree_new("/");

    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 *dev gru_attr_unused = gru_tree_add_child(root, "dev");

    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;
    }

    const gru_tree_node_t *c gru_attr_unused =
        gru_tree_search(root, compare_file_name, "c");

    gru_tree_for_each(root, print_path, NULL);

    printf("Printing childs of var\n");
    gru_tree_for_each_child(root, print_path, NULL);
    printf("Done");

    gru_tree_remove_child(root, compare_file_name, "var");
    count = gru_tree_count(root);
    if (count != 6) {
        fprintf(stderr, "Expected 7 nodes after removing var but got %d\n", count);
        return EXIT_FAILURE;
    }

    gru_tree_for_each(root, print_path, NULL);

    gru_tree_search(root, compare_file_name, "c");

    gru_tree_for_each(root, print_path, NULL);

    gru_tree_destroy(&root);

    return EXIT_SUCCESS;
}
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines

Generated on 7 Jan 2019 for GRU - Generic Reusable Utilities by  doxygen 1.6.1