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); }
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); }
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); }
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); }
/* 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); }
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; }
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; }