1 /* -*- mode: C -*- */
2 /* vim:set ts=4 sw=4 sts=4 et: */
3 /*
4 IGraph library.
5 Copyright (C) 2007-2012 Gabor Csardi <csardi.gabor@gmail.com>
6 334 Harvard street, Cambridge, MA 02139 USA
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21 02110-1301 USA
22
23 */
24
25 #include <igraph.h>
26
27 #include "test_utilities.inc"
28
main()29 int main() {
30 igraph_t g;
31 igraph_vector_t membership, weights, initial;
32 igraph_vector_bool_t fixed;
33 long int i;
34
35 /* label propagation is a stochastic method */
36 igraph_rng_seed(igraph_rng_default(), 765);
37
38 /* Zachary Karate club -- this is just a quick smoke test */
39 igraph_small(&g, 0, IGRAPH_UNDIRECTED,
40 0, 1, 0, 2, 0, 3, 0, 4, 0, 5,
41 0, 6, 0, 7, 0, 8, 0, 10, 0, 11,
42 0, 12, 0, 13, 0, 17, 0, 19, 0, 21,
43 0, 31, 1, 2, 1, 3, 1, 7, 1, 13,
44 1, 17, 1, 19, 1, 21, 1, 30, 2, 3,
45 2, 7, 2, 8, 2, 9, 2, 13, 2, 27,
46 2, 28, 2, 32, 3, 7, 3, 12, 3, 13,
47 4, 6, 4, 10, 5, 6, 5, 10, 5, 16,
48 6, 16, 8, 30, 8, 32, 8, 33, 9, 33,
49 13, 33, 14, 32, 14, 33, 15, 32, 15, 33,
50 18, 32, 18, 33, 19, 33, 20, 32, 20, 33,
51 22, 32, 22, 33, 23, 25, 23, 27, 23, 29,
52 23, 32, 23, 33, 24, 25, 24, 27, 24, 31,
53 25, 31, 26, 29, 26, 33, 27, 33, 28, 31,
54 28, 33, 29, 32, 29, 33, 30, 32, 30, 33,
55 31, 32, 31, 33, 32, 33,
56 -1);
57
58 igraph_vector_init(&membership, 0);
59 igraph_community_label_propagation(&g, &membership, 0, 0, 0,
60 /*modularity=*/ 0);
61
62 igraph_destroy(&g);
63
64 /* Simple star graph to test weights */
65 igraph_small(&g, 0, IGRAPH_UNDIRECTED,
66 0, 1, 0, 2, 0, 3, 0, 4, 0, 5,
67 2, 3, 2, 4, 3, 4, 3, 5, 4, 5, -1);
68 igraph_vector_init_int_end(&weights, -1, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1);
69 igraph_vector_init_int_end(&initial, -1, 0, 0, 1, 1, 1, 1, -1);
70 igraph_vector_bool_init(&fixed, 6);
71 VECTOR(fixed)[3] = 1;
72 VECTOR(fixed)[4] = 1;
73 VECTOR(fixed)[5] = 1;
74 igraph_community_label_propagation(&g, &membership, &weights,
75 &initial, &fixed, /*modularity=*/ 0);
76 for (i = 0; i < igraph_vcount(&g); i++)
77 if (VECTOR(membership)[i] != (i < 2 ? 0 : 1)) {
78 return 3;
79 }
80 igraph_community_label_propagation(&g, &membership, 0,
81 &initial, &fixed, /*modularity=*/ 0);
82 for (i = 0; i < igraph_vcount(&g); i++)
83 if (VECTOR(membership)[i] != 0) {
84 return 4;
85 }
86
87 /* Check whether it works with no fixed vertices at all
88 * while an initial configuration is given -- see bug
89 * #570902 in Launchpad. This is a simple smoke test only. */
90 igraph_community_label_propagation(&g, &membership, &weights,
91 &initial, 0, /*modularity=*/ 0);
92
93 igraph_vector_bool_destroy(&fixed);
94 igraph_vector_destroy(&weights);
95 igraph_vector_destroy(&initial);
96 igraph_destroy(&g);
97
98 igraph_vector_destroy(&membership);
99
100 VERIFY_FINALLY_STACK();
101
102 return 0;
103 }
104