Nothing
test_that("graph_from_edges", {
### A->B, A->C, B->C, B->D
edges <- list(c('A', 'B'), c('A', 'C'), c('B', 'D'), c('B', 'C'))
mat <- graph_from_edges(edges)
expect_identical(mat, graph_from_deps(list(A = c('B', 'C'), B = c('D', 'C'))))
})
test_that("graph_from_deps", {
### single node, no edge
mat <- graph_from_deps(list(A = NULL))
expect_identical(mat, matrix(0L, 1, 1, dimnames = list('A', 'A')))
### A->A
mat <- graph_from_deps(list(A = 'A'))
expect_identical(mat, matrix(1L, 1, 1, dimnames = list('A', 'A')))
### A->B
mat <- graph_from_deps(list(A = 'B'))
expect_equal(dim(mat), c(2, 2))
expect_equal(mat['A', 'B'], 1)
expect_equal(sum(mat), 1)
### A->B, A->C, B->C, B->D
mat <- graph_from_deps(list(A = c('B', 'C'), B = c('D', 'C')))
nodes <- LETTERS[1:4]
expect_identical(mat,
matrix(
as.integer(c(0, 1, 1, 0,
0, 0, 1, 1,
0, 0, 0, 0,
0, 0, 0, 0)),
4, 4, byrow = TRUE, dimnames = list(nodes, nodes)))
})
test_that("graph_from_strings", {
###
mat <- graph_from_strings('A->B', 'B->C', 'D->C')
expect_identical(mat, graph_from_edges(list(c('A', 'B'), c('B', 'C'), c('D', 'C'))))
### combined
mat <- graph_from_strings('A->B->C', 'B->C->D')
expect_identical(mat, graph_from_edges(list(c('A', 'B'), c('B', 'C'), c('B', 'C'), c('C', 'D'))))
### isolated nodes
mat <- graph_from_strings('A->B->C', 'D')
expect_identical(mat, graph_from_deps(list(A = 'B', B = 'C', D = NULL)))
})
test_that("graph_topo_sort", {
mat <- matrix(0, 1, 1, dimnames = list('A', 'A'))
expect_identical(graph_topo_sort(mat), 'A')
## A->B
mat <- graph_from_strings('A->B')
expect_identical(graph_topo_sort(mat), c('A', 'B'))
## A->B->C
mat <- graph_from_strings('A->B->C')
expect_identical(graph_topo_sort(mat), c('A', 'B', 'C'))
# A->B->C, B->D->C
mat <- graph_from_strings('A->B->C', 'B->D->C')
expect_identical(graph_topo_sort(mat), c('A', 'B', 'D', 'C'))
## cycle
mat <- graph_from_strings('A->B', 'B->A')
expect_error(graph_topo_sort(mat), 'not a DAG')
})
test_that("graph_get_all_dep*", {
## A->B, C->D
mat <- graph_from_strings('A->B', 'C->D')
expect_identical(graph_get_all_dependencies(mat, 'A'), 'B')
expect_identical(graph_get_all_dependencies(mat, 'B'), character())
expect_identical(graph_get_all_dependencies(mat, 'C'), 'D')
expect_identical(graph_get_all_dependencies(mat, 'D'), character())
expect_identical(graph_get_all_dependents(mat, 'B'), 'A')
expect_identical(graph_get_all_dependents(mat, 'D'), 'C')
expect_identical(graph_get_all_dependents(mat, 'A'), character())
expect_identical(graph_get_all_dependents(mat, 'C'), character())
# edge cases: not in graph
expect_identical(graph_get_all_dependencies(mat, 'Z'), character())
expect_identical(graph_get_all_dependents(mat, 'Z'), 'Z')
### A->B, C
mat <- graph_from_strings('A->B', 'C->C')
mat['C', 'C'] <- 0L
expect_identical(graph_get_all_dependencies(mat, 'A'), 'B')
expect_identical(graph_get_all_dependencies(mat, 'B'), character())
expect_identical(graph_get_all_dependencies(mat, 'C'), character())
expect_identical(graph_get_all_dependents(mat, 'B'), 'A')
expect_identical(graph_get_all_dependents(mat, 'A'), character())
expect_identical(graph_get_all_dependents(mat, 'C'), character())
### A->B->C
mat <- graph_from_strings('A->B->C')
expect_identical(graph_get_all_dependencies(mat, 'A'), c('B', 'C'))
expect_identical(graph_get_all_dependencies(mat, 'B'), 'C')
expect_identical(graph_get_all_dependencies(mat, 'C'), character())
expect_identical(graph_get_all_dependents(mat, 'A'), character())
expect_identical(graph_get_all_dependents(mat, 'B'), 'A')
expect_identical(graph_get_all_dependents(mat, 'C'), c('A', 'B'))
### A->B->C, A->C
mat <- graph_from_strings('A->B', 'C->B', 'A->C')
expect_identical(graph_get_all_dependencies(mat, 'A'), c('C', 'B'))
expect_identical(graph_get_all_dependencies(mat, 'B'), character())
expect_identical(graph_get_all_dependencies(mat, 'C'), 'B')
expect_identical(graph_get_all_dependents(mat, 'A'), character())
expect_identical(graph_get_all_dependents(mat, 'B'), c('A', 'C'))
expect_identical(graph_get_all_dependents(mat, 'C'), 'A')
# let's rotate it B->C, B->A, C->A
new_names <- c('B', 'A', 'C')
dimnames(mat) <- list(new_names, new_names)
expect_identical(graph_get_all_dependencies(mat, 'B'), c('C', 'A'))
expect_identical(graph_get_all_dependents(mat, 'A'), c('B', 'C'))
### more complex example
mat <- graph_from_strings('A->B->C', 'A->D->B', 'D->C')
expect_identical(graph_get_all_dependencies(mat, 'A'), c('D', 'B', 'C'))
expect_identical(graph_get_all_dependencies(mat, 'D'), c('B', 'C'))
expect_identical(graph_get_all_dependents(mat, 'C'), c('A', 'D', 'B'))
expect_identical(graph_get_all_dependents(mat, 'B'), c('A', 'D'))
expect_identical(graph_get_all_dependents(mat, 'D'), 'A')
### not a DAG
mat <- graph_from_strings('A->B->A')
expect_identical(graph_get_all_dependencies(mat, 'A'), 'B')
expect_identical(graph_get_all_dependents(mat, 'A'), 'B')
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.