Пример #1
0
END_TEST

START_TEST(test_network_nodes)
{
    Edge *e1 = NULL, *e2 = NULL, *e3 = NULL;
    SList *nodes = NULL;
    Node ntmp = 0;

    e1 = edge_create(1, 2, 1, 0);
    e2 = edge_create(3, 4, 1, 0);
    e3 = edge_create(5, 6, 1, 0);

    net = network_create();
    network_add_edge(net, e1);
    network_add_edge(net, e2);
    network_add_edge(net, e3);

    nodes = network_nodes(net);
    fail_unless(nodes != NULL);
    fail_unless(slist_length(nodes) == 6);
    
    while(nodes != NULL){
        ntmp = *((Node *) slist_head_data(nodes));
        fail_unless((1 <= ntmp) && (ntmp <= 6));
        nodes = slist_next(nodes);
    }

    network_destroy(net);
}
Пример #2
0
END_TEST

/* Testeo de funcionalidad */
START_TEST(test_network_get_edges)
{
    Edge *e1 = NULL, *e2 = NULL, *e3 = NULL, *etmp = NULL;
    SList *el = NULL, *tmp = NULL;
    Node ntmp = 0;

    e1 = edge_create(0, 1, 1, 0);
    e2 = edge_create(0, 2, 1, 0);
    e3 = edge_create(2, 3, 1, 0);

    net = network_create();
    network_add_edge(net, e1);
    network_add_edge(net, e2);
    network_add_edge(net, e3);

    el = network_get_edges(net, 0);
    fail_unless(!slist_is_empty(el));

    tmp = el;
    while(tmp != NULL){
        etmp = (Edge *) slist_nth_data(tmp, 0);
        ntmp = *edge_get_second(etmp);
        fail_unless(ntmp == 1 || ntmp == 2);

        tmp = slist_next(tmp);
    }

    network_destroy(net);
}
Пример #3
0
END_TEST

START_TEST(test_network_get_neightbours)
{
    Edge *e1 = NULL, *e2 = NULL, *e3 = NULL;
    Node *ntmp = NULL;
    SList *el = NULL, *tmp = NULL;

    e1 = edge_create(2, 3, 1, 0);
    e2 = edge_create(1, 4, 1, 0);
    e3 = edge_create(2, 1, 1, 0);

    net = network_create();
    network_add_edge(net, e1);
    network_add_edge(net, e2);
    network_add_edge(net, e3);

    el = network_neighbours(net, 2);
    fail_unless(!slist_is_empty(el));

    tmp = el;
    while(tmp != NULL){
        ntmp = (Node *) slist_nth_data(tmp, 0);

        fail_unless(*ntmp == 3 || *ntmp == 1);

        tmp = slist_next(tmp);
    }

    slist_free(el);
    network_destroy(net);
}
Пример #4
0
END_TEST

START_TEST(test_network_add_edge_null)
{
    Edge *edge = NULL;
    edge = edge_create(0, 0, 1, 0);
    network_add_edge(NULL, edge);
    edge_destroy(edge);
}
Пример #5
0
/* Para testing de memoria */
void network_memory_test(void){
    /* Codigo que deberia correr sin memory leaks */

    Edge *e1 = NULL, *e2 = NULL, *e3 = NULL, *e4 = NULL, *etmp = NULL;
    Node *ntmp = NULL;
    SList *el = NULL, *nl = NULL, *tmp = NULL;

    e1 = edge_create(0, 1, 1, 0);
    e2 = edge_create(0, 2, 4, 0);
    e3 = edge_create(2, 3, 6, 0);
    e4 = edge_create(2, 0, 0, 0);

    net = network_create();
    network_add_edge(net, e1);
    network_add_edge(net, e2);
    network_add_edge(net, e3);
    network_add_edge(net, e4);

    el = network_get_edges(net, 0);

    tmp = el;
    while(tmp != NULL){
        etmp = (Edge *) slist_nth_data(tmp, 0);
        edge_pprint(etmp);
        tmp = slist_next(tmp);
    }

    nl = network_neighbours(net, 2);
    printf("Vecinos del nodo: 2\n");

    tmp = nl;
    while(tmp != NULL){
        ntmp = (Node *) slist_nth_data(tmp, 0);
        tmp = slist_next(tmp);

        printf("  %d\n", *ntmp);
    }

    slist_free(nl);
    network_destroy(net);
}
Пример #6
0
edge *graph_add_edge(graph *g, node *n1, node *n2, double edge_score) {
    edge *e = edge_create();

    if (!e || NULL == edge_array_add(g->edges, e))
	return NULL;

    e->n1 = n1;
    e->n2 = n2;
    e->edge_score = edge_score;
    e->linkage_score = UNDEF_SCORE;

    edge_array_add(n1->edges, e);
    edge_array_add(n2->edges, e);

    return e;
}
Пример #7
0
int graph_edge_add(Graph *g, Edge *e)
{
    unsigned long index;
    Vertex *v;

    assert(g != NULL);
    assert(e != NULL);

    for(index = 0; index < darray_size(g->vertices); index++) {
        v = (Vertex *)darray_index(g->vertices, index);

        if(v == e->source) {
            v->out_degree++;
            darray_append(v->edges, e);
            g->edge_count++;
        }

        if((v == e->target)) {
            /* For undirected graphs, insert an extra edge to allow
             * traversal from the target vertex back to the source
             * vertex, except in the case where an edge is a loop.
             */
            if(graph_is_undirected(g)) {
                v->out_degree++;

                if(e->target != e->source) {
                    darray_append(v->edges,
                        edge_create(e->target, e->source, e->weight));
                } else {
                    /* Loops are counted twice */
                    v->out_degree++;
                }
            } else {
                /* Keep track of the number of edges directed
                 * toward this vertex, but not which edges
                 *
                 * TODO Keep a separate in-edge list for each
                 * node?
                 */
                v->in_degree++;
            }
        }
    }

    return 0;
}