test_that("betweenness works for kite graph", {
kite <- graph_from_literal(
Andre - Beverly:Carol:Diane:Fernando,
Beverly - Andre:Diane:Ed:Garth,
Carol - Andre:Diane:Fernando,
Diane - Andre:Beverly:Carol:Ed:Fernando:Garth,
Ed - Beverly:Diane:Garth,
Fernando - Andre:Carol:Diane:Garth:Heather,
Garth - Beverly:Diane:Ed:Fernando:Heather,
Heather - Fernando:Garth:Ike,
Ike - Heather:Jane,
Jane - Ike
)
nf <- (vcount(kite) - 1) * (vcount(kite) - 2) / 2
bet <- structure(betweenness(kite) / nf, names = V(kite)$name)
bet <- round(sort(bet, decreasing = TRUE), 3)
expect_equal(bet, structure(c(0.389, 0.231, 0.231, 0.222, 0.102, 0.023, 0.023, 0.000, 0.000, 0.000), names = c("Heather", "Fernando", "Garth", "Ike", "Diane", "Andre", "Beverly", "Carol", "Ed", "Jane")))
bet2 <- structure(betweenness(kite, normalized = TRUE), names = V(kite)$name)
bet2 <- round(sort(bet2, decreasing = TRUE), 3)
expect_equal(bet2, bet)
})
test_that("weighted betweenness works", {
nontriv <- make_graph(c(
0, 19, 0, 16, 0, 20, 1, 19, 2, 5, 3, 7, 3, 8,
4, 15, 4, 11, 5, 8, 5, 19, 6, 7, 6, 10, 6, 8,
6, 9, 7, 20, 9, 10, 9, 20, 10, 19,
11, 12, 11, 20, 12, 15, 13, 15,
14, 18, 14, 16, 14, 17, 15, 16, 17, 18
) + 1, dir = FALSE)
E(nontriv)$weight <- c(
0.5249, 1, 0.1934, 0.6274, 0.5249,
0.0029, 0.3831, 0.05, 0.6274, 0.3831,
0.5249, 0.0587, 0.0579, 0.0562, 0.0562,
0.1934, 0.6274, 0.6274, 0.6274, 0.0418,
0.6274, 0.3511, 0.3511, 0.1486, 1, 1,
0.0711, 0.2409
)
nontrivRes <- c(
20, 0, 0, 0, 0, 19, 80, 85, 32, 0, 10,
75, 70, 0, 36, 81, 60, 0, 19, 19, 86
)
bet <- betweenness(nontriv)
expect_equal(bet, nontrivRes)
})
test_that("normalization works well", {
g1 <- graph_from_literal(0 + -+1 + -+2)
b11 <- betweenness(g1, normalized = TRUE, directed = FALSE)
expect_equal(b11, c("0" = 0, "1" = 1, "2" = 0))
b12 <- betweenness(g1, normalized = TRUE, directed = TRUE)
expect_equal(b12, c("0" = 0, "1" = 1, "2" = 0))
g2 <- graph_from_literal(0 - --1 - --2)
b2 <- betweenness(g2, normalized = TRUE)
expect_equal(b2, c("0" = 0, "1" = 1, "2" = 0))
})
test_that("shortest paths are compared with tolerance when calculating betweenness", {
# The test case below is designed in a way that the paths 3-6 and 3-4-6 have the
# same total weight when compared with a tolerance, but they appear different
# if the comparison is made without an epsilon tolerance due to numeric
# inaccuracies.
#
# See https://github.com/igraph/rigraph/issues/314
from <- c(1, 2, 3, 3, 3, 4, 6, 7, 2, 9, 5, 7, 9, 9, 5, 8)
to <- c(4, 3, 6, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)
edges <- cbind(from, to)
edges.dists <- c(
1.9617537, 0.9060834, 2.2165446, 1.6251956,
2.4473929, 0.5913490, 8.7093236, 2.8387330,
6.1225042, 20.7217776, 6.8027218, 16.3147479,
5.2605598, 6.6816853, 4.9482123, 1.8989790
)
g <- graph_from_data_frame(edges, directed = FALSE)
result <- betweenness(g, weights = edges.dists)
expect_equal(result[1:5], c("1" = 0, "2" = 44, "3" = 71, "4" = 36.5, "6" = 44))
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.