1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
|
#include <igraph.h>
#include "test_utilities.h"
int test_graph(const char* name, const igraph_t* graph, const igraph_real_t* weights_array) {
igraph_real_t eff;
igraph_vector_t eff_vec;
igraph_vector_t weights;
printf("###### Testing graph: %s ######\n\n", name);
igraph_vector_init(&eff_vec, 0);
if (weights_array) {
printf("UNWEIGHTED CASE:\n\n");
}
igraph_global_efficiency(graph, &eff, NULL, 0);
printf("Global efficiency, undirected: %f\n", eff);
igraph_global_efficiency(graph, &eff, NULL, 1);
printf("Global efficiency, directed: %f\n", eff);
igraph_average_local_efficiency(graph, &eff, NULL, 0, IGRAPH_ALL);
printf("Average local efficiency, undirected: %f\n", eff);
igraph_average_local_efficiency(graph, &eff, NULL, 1, IGRAPH_ALL);
printf("Average local efficiency, directed, all neighbors: %f\n", eff);
igraph_average_local_efficiency(graph, &eff, NULL, 1, IGRAPH_IN);
printf("Average local efficiency, directed, in-neighbors: %f\n", eff);
igraph_average_local_efficiency(graph, &eff, NULL, 1, IGRAPH_OUT);
printf("Average local efficiency, directed, out-neighbors: %f\n", eff);
printf("\nLocal efficiency, undirected:\n");
igraph_local_efficiency(graph, &eff_vec, igraph_vss_all(), NULL, 0, IGRAPH_ALL);
print_vector(&eff_vec);
printf("\nLocal efficiency, directed, all neighbors:\n");
igraph_local_efficiency(graph, &eff_vec, igraph_vss_all(), NULL, 1, IGRAPH_ALL);
print_vector(&eff_vec);
printf("\nLocal efficiency, directed, in-neighbors:\n");
igraph_local_efficiency(graph, &eff_vec, igraph_vss_all(), NULL, 1, IGRAPH_IN);
print_vector(&eff_vec);
printf("\nLocal efficiency, directed, out-neighbors:\n");
igraph_local_efficiency(graph, &eff_vec, igraph_vss_all(), NULL, 1, IGRAPH_OUT);
print_vector(&eff_vec);
if (weights_array) {
igraph_vector_view(&weights, weights_array, igraph_ecount(graph));
printf("\nWEIGHTED CASE:\n\n");
igraph_global_efficiency(graph, &eff, &weights, 0);
printf("Global efficiency, undirected: %f\n", eff);
igraph_global_efficiency(graph, &eff, &weights, 1);
printf("Global efficiency, directed: %f\n", eff);
igraph_average_local_efficiency(graph, &eff, &weights, 0, IGRAPH_ALL);
printf("Average local efficiency, undirected: %f\n", eff);
igraph_average_local_efficiency(graph, &eff, &weights, 1, IGRAPH_ALL);
printf("Average local efficiency, directed, all neighbors: %f\n", eff);
igraph_average_local_efficiency(graph, &eff, &weights, 1, IGRAPH_IN);
printf("Average local efficiency, directed, in-neighbors: %f\n", eff);
igraph_average_local_efficiency(graph, &eff, &weights, 1, IGRAPH_OUT);
printf("Average local efficiency, directed, out-neighbors: %f\n", eff);
printf("\nLocal efficiency, undirected:\n");
igraph_local_efficiency(graph, &eff_vec, igraph_vss_all(), &weights, 0, IGRAPH_ALL);
print_vector(&eff_vec);
printf("\nLocal efficiency, directed, all neighbors:\n");
igraph_local_efficiency(graph, &eff_vec, igraph_vss_all(), &weights, 1, IGRAPH_ALL);
print_vector(&eff_vec);
printf("\nLocal efficiency, directed, in-neighbors:\n");
igraph_local_efficiency(graph, &eff_vec, igraph_vss_all(), &weights, 1, IGRAPH_IN);
print_vector(&eff_vec);
printf("\nLocal efficiency, directed, out-neighbors:\n");
igraph_local_efficiency(graph, &eff_vec, igraph_vss_all(), &weights, 1, IGRAPH_OUT);
print_vector(&eff_vec);
}
printf("\n\n");
igraph_vector_destroy(&eff_vec);
return 0;
}
int test_ring(void) {
int result;
igraph_t graph;
const igraph_real_t weights_array[] = {1, 1, 1, 1};
igraph_ring(&graph, 4, IGRAPH_DIRECTED, /* mutual = */ 0, /* circular = */ 1);
result = test_graph("Ring graph", &graph, weights_array);
igraph_destroy(&graph);
VERIFY_FINALLY_STACK();
return result;
}
int test_small_graph(void) {
int result;
igraph_t graph;
const igraph_real_t weights_array[] = {4, 4, 4, 3, 1, 5, 1, 2, 4, 5, 3, 5, 5, 4, 1, 1, 5, 4, 1, 1, 2, 1, 3, 5};
igraph_small(&graph, 13, /* directed= */ 1,
0,8, 1,3, 1,4, 1,5, 1,8, 1,10, 2,0, 2,1, 2,4, 3,5, 4,2, 4,7,
4,9, 5,3, 5,10, 6,7, 8,2, 8,3, 8,4, 8,9, 9,3, 9,4, 11,9, 11,3,
-1);
result = test_graph("Small test graph", &graph, weights_array);
igraph_destroy(&graph);
VERIFY_FINALLY_STACK();
return result;
}
int main(void) {
RUN_TEST(test_ring);
RUN_TEST(test_small_graph);
return 0;
}
|