Nothing
# Traversals through nodes and edges in a graph object
test_that("simple traversals are possible", {
# Create a graph
graph <-
create_graph() %>%
add_node() %>%
add_node() %>%
add_node() %>%
add_node() %>%
add_edge(
from = 1,
to = 2) %>%
add_edge(
from = 2,
to = 3) %>%
add_edge(
from = 3,
to = 4)
# Starting at node `1`, traverse to node `4`, storing
# the traversed location as a selection in the graph
# object
graph <-
graph %>%
select_nodes(nodes = 1) %>%
trav_out() %>%
trav_out() %>%
trav_out()
# Expect that node `4` is the current selection
expect_equal(
get_selection(graph), 4)
# Traverse back to node `1` from node `4`
graph <-
graph %>%
trav_in() %>%
trav_in() %>%
trav_in()
# Expect that node `1` is the current selection
expect_equal(
get_selection(graph), 1)
# Traverse from node `1` to `2`, then,
# traverse to nodes in both directions
graph <-
graph %>%
trav_out() %>%
trav_both()
# Expect that nodes `1` and `3` are in the
# current selection
expect_in(get_selection(graph), c(1, 3))
# Traverse by moving from nodes onto edges, then,
# onto nodes; from `1` to `4`
graph <-
graph %>%
clear_selection() %>%
select_nodes(nodes = 1) %>%
trav_out_edge() %>%
trav_in_node() %>%
trav_out_edge() %>%
trav_in_node() %>%
trav_out_edge() %>%
trav_in_node()
# Expect that node `4` is the current selection
expect_equal(
get_selection(graph), 4)
# Traverse back to node `1` from node `4`,
# using the same types of traversals
graph <-
graph %>%
trav_in_edge() %>%
trav_out_node() %>%
trav_in_edge() %>%
trav_out_node() %>%
trav_in_edge() %>%
trav_out_node()
# Expect that node `1` is the current selection
expect_equal(
get_selection(graph), 1)
# Modify the graph so that it contains a branch
graph <-
graph %>%
clear_selection() %>%
select_nodes(nodes = 3) %>%
add_n_nodes_ws(
n = 1,
direction = "from") %>%
clear_selection() %>%
select_nodes(nodes = 2) %>%
add_n_nodes_ws(
n = 2,
direction = "from") %>%
clear_selection()
# Traverse nodes from `1` until
# traversal can no longer occur
graph <-
graph %>%
select_nodes(nodes = 1) %>%
trav_out()
# Expect that node `2` is the current selection
expect_equal(
get_selection(graph), 2)
# Continue traversal outward by node
graph <-
graph %>%
trav_out()
# Expect that nodes `3`, `6`, and `7` are
# in the current selection
expect_equal(
get_selection(graph), c(3, 6, 7))
# Continue traversal outward by node
graph <-
graph %>%
trav_out()
# Expect that nodes `4` and `5` are in the
# current selection
expect_equal(
get_selection(graph), c(4, 5))
# Continue traversal outward, even though at end
graph <-
graph %>%
trav_out()
# Expect that nodes `4` and `5` are still in the
# current selection
expect_equal(
get_selection(graph), c(4, 5))
expect_snapshot(error = TRUE, {
# Expect an error if attempting to perform a node
# traversal without any selection of nodes
graph <-
graph %>%
clear_selection()
trav_in(graph)
trav_out(graph)
trav_both(graph)
trav_in_node(graph)
trav_out_node(graph)
trav_in_edge(graph)
trav_out_edge(graph)
})
})
test_that("selective traversals with `trav_out()` are possible", {
# Create a graph
graph <-
create_graph() %>%
add_node() %>%
add_node() %>%
add_node() %>%
add_node() %>%
add_edge(
from = 1,
to = 2) %>%
add_edge(
from = 2,
to = 3) %>%
add_edge(
from = 3,
to = 4) %>%
select_nodes() %>%
set_node_attrs_ws(
node_attr = type,
value = "circle") %>%
clear_selection() %>%
select_nodes_by_id(nodes = c(2, 3)) %>%
set_node_attrs_ws(
node_attr = data_value,
value = 10) %>%
clear_selection() %>%
select_nodes_by_id(nodes = 4) %>%
set_node_attrs_ws(
node_attr = shape,
value = "square") %>%
set_node_attrs_ws(
node_attr = data_value,
value = 5) %>%
clear_selection() %>%
select_nodes_by_id(nodes = 1) %>%
set_node_attrs_ws(
node_attr = shape,
value = "triangle") %>%
set_node_attrs_ws(
node_attr = data_value,
value = 5) %>%
clear_selection() %>%
select_edges() %>%
set_edge_attrs_ws(
edge_attr = data_value,
value = 5) %>%
set_edge_attrs_ws(
edge_attr = rel,
value = "related_to") %>%
clear_selection()
# Starting at node `1`, traverse to
# node `2` with a match expression (==)
graph <-
graph %>%
clear_selection() %>%
select_nodes_by_id(nodes = 1) %>%
trav_out(
conditions = data_value == 10)
# Expect that node `2` is the
# current selection
expect_equal(
get_selection(graph), 2)
# Starting at node `1`, traverse to
# node `2`, using a different match
# expression (<)
graph <-
graph %>%
clear_selection() %>%
select_nodes_by_id(nodes = 1) %>%
trav_out(
conditions = data_value < 15)
# Expect that node `2` is the
# current selection
expect_equal(
get_selection(graph), 2)
# Starting at node `1`, traverse to
# node `2`, using a different match expression (>)
graph <-
graph %>%
clear_selection() %>%
select_nodes_by_id(nodes = 1) %>%
trav_out(
conditions = data_value > 5)
# Expect that node `2` is the
# current selection
expect_equal(
get_selection(graph), 2)
# Starting at node `1`, traverse to
# node `2`, using a different match expression (!=)
graph <-
graph %>%
clear_selection() %>%
select_nodes_by_id(nodes = 1) %>%
trav_out(
conditions = data_value != 5)
# Expect that node `2` is the
# current selection
expect_equal(
get_selection(graph), 2)
# Starting at node `1`, attempt to
# traverse to node `2` using a match
# expression that won't yield a match
graph <-
graph %>%
clear_selection() %>%
select_nodes_by_id(nodes = 1) %>%
trav_out(
conditions = data_value != 10)
# Expect that node `1` is the
# current selection (since no traversal
# had occurred)
expect_equal(
get_selection(graph), 1)
# Starting at node `3`, traverse to
# node `4` using a match on a character field
graph <-
graph %>%
clear_selection() %>%
select_nodes_by_id(nodes = 3) %>%
trav_out(
conditions = shape == "square")
# Expect that node `4` is the
# current selection
expect_equal(
get_selection(graph), 4)
# Starting at node `3`, attempt to
# traverse to node `4` using a match
# expression that won't yield a match
graph <-
graph %>%
clear_selection() %>%
select_nodes_by_id(nodes = 3) %>%
trav_out(
conditions = shape == "triangle")
# Expect that node `3` is the current selection
expect_equal(
get_selection(graph), 3)
})
test_that("selective traversals with `trav_in()` are possible", {
# Create a graph
graph <-
create_graph() %>%
add_node() %>%
add_node() %>%
add_node() %>%
add_node() %>%
add_edge(
from = 1,
to = 2) %>%
add_edge(
from = 2,
to = 3) %>%
add_edge(
from = 3,
to = 4) %>%
select_nodes() %>%
set_node_attrs_ws(
node_attr = type,
value = "circle") %>%
clear_selection() %>%
select_nodes_by_id(nodes = c(2, 3)) %>%
set_node_attrs_ws(
node_attr = data_value,
value = 10) %>%
clear_selection() %>%
select_nodes_by_id(nodes = 4) %>%
set_node_attrs_ws(
node_attr = shape,
value = "square") %>%
set_node_attrs_ws(
node_attr = data_value,
value = 5) %>%
clear_selection() %>%
select_nodes_by_id(nodes = 1) %>%
set_node_attrs_ws(
node_attr = shape,
value = "triangle") %>%
set_node_attrs_ws(
node_attr = data_value,
value = 5) %>%
clear_selection() %>%
select_edges() %>%
set_edge_attrs_ws(
edge_attr = data_value,
value = 5) %>%
set_edge_attrs_ws(
edge_attr = rel,
value = "related_to") %>%
clear_selection()
# Starting at node `4`, traverse to node `3` with a
# match expression (==)
graph <-
graph %>%
clear_selection() %>%
select_nodes_by_id(nodes = 4) %>%
trav_in(
conditions = data_value == 10)
# Expect that node `3` is the current selection
expect_equal(
get_selection(graph), 3)
# Starting at node `4`, traverse to node `3`, using a
# different match expression (<)
graph <-
graph %>%
clear_selection() %>%
select_nodes_by_id(nodes = 4) %>%
trav_in(
conditions = data_value < 15)
# Expect that node `3` is the
# current selection
expect_equal(
get_selection(graph), 3)
# Starting at node `4`, traverse
# to node `3`, using a different
# match expression (>)
graph <-
graph %>%
clear_selection() %>%
select_nodes_by_id(nodes = 4) %>%
trav_in(
conditions = data_value > 5)
# Expect that node `3` is the
# current selection
expect_equal(
get_selection(graph), 3)
# Starting at node `4`, traverse
# to node `3`, using a
# different match expression (!=)
graph <-
graph %>%
clear_selection() %>%
select_nodes_by_id(nodes = 4) %>%
trav_in(
conditions = data_value != 5)
# Expect that node `3` is the
# current selection
expect_equal(
get_selection(graph), 3)
# Starting at node `4`, attempt
# to traverse to node `3` using a
# match expression that won't
# yield a match
graph <-
graph %>%
clear_selection() %>%
select_nodes_by_id(nodes = 4) %>%
trav_in(
conditions = data_value != 10)
# Expect that node `4` is the
# current selection (since no
# traversal had occurred)
expect_equal(
get_selection(graph), 4)
# Starting at node `2`, traverse
# to node `1` using a match on a
# character field
graph <-
graph %>%
clear_selection() %>%
select_nodes_by_id(nodes = 2) %>%
trav_in(
conditions = shape == "triangle")
# Expect that node `1` is the
# current selection
expect_equal(
get_selection(graph), 1)
# Starting at node `2`, attempt
# to traverse to node `1` using a
# match expression that won't
# yield a match
graph <-
graph %>%
clear_selection() %>%
select_nodes_by_id(nodes = 2) %>%
trav_in(
conditions = shape == "square")
# Expect that node `2` is the
# current selection (since no
# traversal had occurred)
expect_equal(
get_selection(graph), 2)
})
test_that("selective traversals with `trav_out_edge()` are possible", {
# Create a graph
graph <-
create_graph() %>%
add_node() %>%
add_node() %>%
add_node() %>%
add_node() %>%
add_edge(
from = 1,
to = 2) %>%
add_edge(
from = 2,
to = 3) %>%
add_edge(
from = 3,
to = 4) %>%
select_nodes() %>%
set_node_attrs_ws(
node_attr = type,
value = "circle") %>%
clear_selection() %>%
select_nodes_by_id(nodes = c(2, 3)) %>%
set_node_attrs_ws(
node_attr = data_value,
value = 10) %>%
clear_selection() %>%
select_nodes_by_id(nodes = 4) %>%
set_node_attrs_ws(
node_attr = shape,
value = "square") %>%
set_node_attrs_ws(
node_attr = data_value,
value = 5) %>%
clear_selection() %>%
select_nodes_by_id(nodes = 1) %>%
set_node_attrs_ws(
node_attr = shape,
value = "triangle") %>%
set_node_attrs_ws(
node_attr = data_value,
value = 5) %>%
clear_selection() %>%
select_edges() %>%
set_edge_attrs_ws(
edge_attr = data_value,
value = 5) %>%
set_edge_attrs_ws(
edge_attr = rel,
value = "related_to") %>%
clear_selection()
# Starting at node `1`, traverse to edge between
# nodes `1` and `2` with a match expression (==)
graph <-
graph %>%
clear_selection() %>%
select_nodes_by_id(nodes = 1) %>%
trav_out_edge(
conditions = data_value == 5)
# Expect that the edge `1` -> `2`
# is the current selection
expect_equal(
get_selection(graph), 1)
# Starting at node `1`, traverse to
# the edge between nodes `1` and `2`
# with a match expression (<)
graph <-
graph %>%
clear_selection() %>%
select_nodes_by_id(nodes = 1) %>%
trav_out_edge(
conditions = data_value < 10)
# Expect that the edge `1` -> `2` is
# the current selection
expect_equal(
get_selection(graph), 1)
# Starting at node `1`, traverse to
# the edge between nodes `1` and `2`
# with a match expression (>)
graph <-
graph %>%
clear_selection() %>%
select_nodes_by_id(nodes = 1) %>%
trav_out_edge(
conditions = data_value > 2)
# Expect that the edge `1` -> `2`
# is the current selection
expect_equal(
get_selection(graph), 1)
# Starting at node `1`, traverse to
# the edge between nodes `1` and `2`
# with a match expression (!=)
graph <-
graph %>%
clear_selection() %>%
select_nodes_by_id(nodes = 1) %>%
trav_out_edge(
conditions = data_value != 1)
# Expect that the edge `1` -> `2`
# is the current selection
expect_equal(
get_selection(graph), 1)
# Starting at node `1`, attempt to
# traverse to edge between nodes `1`
# and `2` using a match expression
# that won't yield a match
graph <-
graph %>%
clear_selection() %>%
select_nodes_by_id(nodes = 1) %>%
trav_out_edge(
conditions = data_value != 5)
# Expect that node `1` is the
# current selection (since no traversal
# had occurred)
expect_equal(
get_selection(graph), 1)
# Starting at node `1`, traverse to
# the edge between nodes `1` and `2`
# using a match on a character field
graph <-
graph %>%
clear_selection() %>%
select_nodes_by_id(nodes = 1) %>%
trav_out_edge(
conditions = rel == "related_to")
# Expect that the edge `1` -> `2`
# is the current selection
expect_equal(
get_selection(graph), 1)
# Starting at node `1`, attempt to
# traverse to the edge between nodes
# `1` and `2` using a match expression
# that won't yield a match
graph <-
graph %>%
clear_selection() %>%
select_nodes_by_id(nodes = 1) %>%
trav_out_edge(
conditions = rel == "belongs_with")
# Expect that node `1` is the
# current selection (since no
# traversal had occurred)
expect_equal(
get_selection(graph), 1)
})
test_that("selective traversals with `trav_in_edge()` are possible", {
# Create a graph
graph <-
create_graph() %>%
add_node() %>%
add_node() %>%
add_node() %>%
add_node() %>%
add_edge(
from = 1,
to = 2) %>%
add_edge(
from = 2,
to = 3) %>%
add_edge(
from = 3,
to = 4) %>%
select_nodes() %>%
set_node_attrs_ws(
node_attr = type,
value = "circle") %>%
clear_selection() %>%
select_nodes_by_id(nodes = c(2, 3)) %>%
set_node_attrs_ws(
node_attr = data_value,
value = 10) %>%
clear_selection() %>%
select_nodes_by_id(nodes = 4) %>%
set_node_attrs_ws(
node_attr = shape,
value = "square") %>%
set_node_attrs_ws(
node_attr = data_value,
value = 5) %>%
clear_selection() %>%
select_nodes_by_id(nodes = 1) %>%
set_node_attrs_ws(
node_attr = shape,
value = "triangle") %>%
set_node_attrs_ws(
node_attr = data_value,
value = 5) %>%
clear_selection() %>%
select_edges() %>%
set_edge_attrs_ws(
edge_attr = data_value,
value = 5) %>%
set_edge_attrs_ws(
edge_attr = rel,
value = "related_to") %>%
clear_selection()
# Starting at node `4`, traverse to
# the edge between nodes `3` and `4`
# with a match expression (==)
graph <-
graph %>%
clear_selection() %>%
select_nodes_by_id(nodes = 4) %>%
trav_in_edge(
conditions = data_value == 5)
# Expect that the edge `3` -> `4`
# is the current selection
expect_equal(
get_selection(graph), 3)
# Starting at node `4`, traverse to
# the edge between nodes `3` and `4`
# with a match expression (<)
graph <-
graph %>%
clear_selection() %>%
select_nodes_by_id(nodes = 4) %>%
trav_in_edge(
conditions = data_value < 10)
# Expect that the edge `3` -> `4`
# is the current selection
expect_equal(
get_selection(graph), 3)
# Starting at node `4`, traverse to
# the edge between nodes `3` and `4`
# with a match expression (>)
graph <-
graph %>%
clear_selection() %>%
select_nodes_by_id(nodes = 4) %>%
trav_in_edge(
conditions = data_value > 2)
# Expect that the edge `3` -> `4`
# is the current selection
expect_equal(
get_selection(graph), 3)
# Starting at node `4`, traverse to
# the edge between nodes `3` and `4`
# with a match expression (!=)
graph <-
graph %>%
clear_selection() %>%
select_nodes_by_id(nodes = 4) %>%
trav_in_edge(
conditions = data_value != 1)
# Expect that the edge `3` -> `4`
# is the current selection
expect_equal(
get_selection(graph), 3)
# Starting at node `4`, attempt to
# traverse to the edge between nodes
# `3` and `4` using a match expression
# that won't yield a match
graph <-
graph %>%
clear_selection() %>%
select_nodes_by_id(nodes = 4) %>%
trav_in_edge(
conditions = data_value != 5)
# Expect that node `4` is the
# current selection (since no traversal
# had occurred)
expect_equal(
get_selection(graph), 4)
# Starting at node `4`, traverse to
# the edge between nodes `3` and `4`
# using a match on a character field
graph <-
graph %>%
clear_selection() %>%
select_nodes_by_id(nodes = 4) %>%
trav_in_edge(
conditions = rel == "related_to")
# Expect that the edge `3` -> `4`
# is the current selection
expect_equal(
get_selection(graph), 3)
# Starting at node `4`, attempt to
# traverse to edge between nodes `3`
# and `4` using a match expression
# that won't yield a match
graph <-
graph %>%
clear_selection() %>%
select_nodes_by_id(nodes = 4) %>%
trav_in_edge(
conditions = rel == "belongs_with")
# Expect that node `4` is the
# current selection (since no traversal
# had occurred)
expect_equal(
get_selection(graph), 4)
})
test_that("selective traversals with `trav_in_node()` are possible", {
# Create a graph
graph <-
create_graph() %>%
add_node() %>%
add_node() %>%
add_node() %>%
add_node() %>%
add_edge(
from = 1,
to = 2) %>%
add_edge(
from = 2,
to = 3) %>%
add_edge(
from = 3,
to = 4) %>%
select_nodes() %>%
set_node_attrs_ws(
node_attr = type,
value = "circle") %>%
clear_selection() %>%
select_nodes_by_id(nodes = c(2, 3)) %>%
set_node_attrs_ws(
node_attr = data_value,
value = 10) %>%
clear_selection() %>%
select_nodes_by_id(nodes = 4) %>%
set_node_attrs_ws(
node_attr = shape,
value = "square") %>%
set_node_attrs_ws(
node_attr = data_value,
value = 5) %>%
clear_selection() %>%
select_nodes_by_id(nodes = 1) %>%
set_node_attrs_ws(
node_attr = shape,
value = "triangle") %>%
set_node_attrs_ws(
node_attr = data_value,
value = 5) %>%
clear_selection() %>%
select_edges() %>%
set_edge_attrs_ws(
edge_attr = data_value,
value = 5) %>%
set_edge_attrs_ws(
edge_attr = rel,
value = "related_to") %>%
clear_selection()
# Starting at edge `3` -> `4`,
# traverse to node `4` with a
# match expression (==)
graph <-
graph %>%
clear_selection() %>%
select_edges(
from = 3,
to = 4) %>%
trav_in_node(
conditions = data_value == 5)
# Expect that the node `4` is
# the current selection
expect_equal(
get_selection(graph), 4)
# Starting at edge `3` -> `4`,
# traverse to node `4` with a match
# expression (<)
graph <-
graph %>%
clear_selection() %>%
select_edges(
from = 3,
to = 4) %>%
trav_in_node(
conditions = data_value < 10)
# Expect that the node `4` is
# the current selection
expect_equal(
get_selection(graph), 4)
# Starting at edge `3` -> `4`,
# traverse to node `4` with a
# match expression (>)
graph <-
graph %>%
clear_selection() %>%
select_edges(
from = 3,
to = 4) %>%
trav_in_node(
conditions = data_value > 1)
# Expect that the node `4` is
# the current selection
expect_equal(
get_selection(graph), 4)
# Starting at edge `3` -> `4`,
# traverse to node `4` with a
# match expression (!=)
graph <-
graph %>%
clear_selection() %>%
select_edges(
from = 3,
to = 4) %>%
trav_in_node(
conditions = data_value != 1)
# Expect that the node `4`
# is the current selection
expect_equal(
get_selection(graph), 4)
# Starting at edge `3` -> `4`,
# attempt to traverse to node `4`
# using a match expression that won't
# yield a match
graph <-
graph %>%
clear_selection() %>%
select_edges(
from = 3,
to = 4) %>%
trav_in_node(
conditions = data_value != 5)
# Expect that the edge `3` -> `4`
# is the current selection (since
# no traversal had occurred)
expect_equal(
get_selection(graph), 3)
# Starting at node `4`, traverse to
# edge between nodes `3` and `4` using
# a match on a character field
graph <-
graph %>%
clear_selection() %>%
select_edges(
from = 3,
to = 4) %>%
trav_in_node(
conditions = shape == "square")
# Expect that the node `4` is
# the current selection
expect_equal(
get_selection(graph), 4)
# Starting at edge `3` -> `4`,
# attempt to traverse to node `4`
# using a match on a character field
# that won't yield a match
graph <-
graph %>%
clear_selection() %>%
select_edges(
from = 3,
to = 4) %>%
trav_in_node(
conditions = shape == "triangle")
# Expect that the edge `3` -> `4`
# is the current selection (since
# no traversal had occurred)
expect_equal(
get_selection(graph), 3)
})
test_that("selective traversals with `trav_out_node()` are possible", {
# Create a graph
graph <-
create_graph() %>%
add_node() %>%
add_node() %>%
add_node() %>%
add_node() %>%
add_edge(
from = 1,
to = 2) %>%
add_edge(
from = 2,
to = 3) %>%
add_edge(
from = 3,
to = 4) %>%
select_nodes() %>%
set_node_attrs_ws(
node_attr = type,
value = "circle") %>%
clear_selection() %>%
select_nodes_by_id(nodes = c(2, 3)) %>%
set_node_attrs_ws(
node_attr = data_value,
value = 10) %>%
clear_selection() %>%
select_nodes_by_id(nodes = 4) %>%
set_node_attrs_ws(
node_attr = shape,
value = "square") %>%
set_node_attrs_ws(
node_attr = data_value,
value = 5) %>%
clear_selection() %>%
select_nodes_by_id(nodes = 1) %>%
set_node_attrs_ws(
node_attr = shape,
value = "triangle") %>%
set_node_attrs_ws(
node_attr = data_value,
value = 5) %>%
clear_selection() %>%
select_edges() %>%
set_edge_attrs_ws(
edge_attr = data_value,
value = 5) %>%
set_edge_attrs_ws(
edge_attr = rel,
value = "related_to") %>%
clear_selection()
# Starting at edge `1` -> `2`,
# traverse to node `1` with a
# match expression (==)
graph <-
graph %>%
select_edges(
from = 1,
to = 2) %>%
trav_out_node(
conditions = data_value == 5)
# Expect that the node `1` is
# the current selection
expect_equal(
get_selection(graph), 1)
# Starting at edge `1` -> `2`,
# traverse to node `1` with a
# match expression (<)
graph <-
graph %>%
clear_selection() %>%
select_edges(
from = 1,
to = 2) %>%
trav_out_node(
conditions = data_value < 10)
# Expect that the node `1` is
# the current selection
expect_equal(
get_selection(graph), 1)
# Starting at edge `1` -> `2`,
# traverse to node `1` with a
# match expression (>)
graph <-
graph %>%
clear_selection() %>%
select_edges(
from = 1,
to = 2) %>%
trav_out_node(
conditions = data_value > 1)
# Expect that the node `1` is
# the current selection
expect_equal(
get_selection(graph), 1)
# Starting at edge `1` -> `2`,
# traverse to node `1` with a
# match expression (!=)
graph <-
graph %>%
clear_selection() %>%
select_edges(
from = 1,
to = 2) %>%
trav_out_node(
conditions = data_value != 1)
# Expect that the node `1` is
# the current selection
expect_equal(
get_selection(graph), 1)
# Starting at edge `1` -> `2`,
# attempt to traverse to node `1`
# using a match expression that
# won't yield a match
graph <-
graph %>%
clear_selection() %>%
select_edges(
from = 1,
to = 2) %>%
trav_out_node(
conditions = data_value != 5)
# Expect that the node `1`
# is the current selection (since
# no traversal had occurred)
expect_equal(
get_selection(graph), 1)
# Starting at edge `1` -> `2`,
# traverse to node `1` using a
# match on a character field
graph <-
graph %>%
clear_selection() %>%
select_edges(
from = 1,
to = 2) %>%
trav_out_node(
conditions = shape == "triangle")
# Expect that the node `1`
# is the current selection
expect_equal(
get_selection(graph), 1)
# Starting at edge `1` -> `2`,
# attempt to traverse to node `1`
# using a match on a character field
# that won't yield a match
graph <-
graph %>%
clear_selection() %>%
select_edges(
from = 1,
to = 2) %>%
trav_out_node(
conditions = shape == "circle")
# Expect that the edge `1` -> `2`
# is the current selection (since no
# traversal had occurred)
expect_equal(
get_selection(graph), 1)
})
test_that("selective traversals with `trav_both()` are possible", {
# Create a graph
graph <-
create_graph() %>%
add_node() %>%
add_node() %>%
add_node() %>%
add_node() %>%
add_edge(
from = 1,
to = 2) %>%
add_edge(
from = 2,
to = 3) %>%
add_edge(
from = 3,
to = 4) %>%
select_nodes() %>%
set_node_attrs_ws(
node_attr = type,
value = "circle") %>%
clear_selection() %>%
select_nodes_by_id(nodes = c(2, 3)) %>%
set_node_attrs_ws(
node_attr = data_value,
value = 10) %>%
clear_selection() %>%
select_nodes_by_id(nodes = 4) %>%
set_node_attrs_ws(
node_attr = shape,
value = "square") %>%
set_node_attrs_ws(
node_attr = data_value,
value = 5) %>%
clear_selection() %>%
select_nodes_by_id(nodes = 1) %>%
set_node_attrs_ws(
node_attr = shape,
value = "triangle") %>%
set_node_attrs_ws(
node_attr = data_value,
value = 5) %>%
clear_selection() %>%
select_edges() %>%
set_edge_attrs_ws(
edge_attr = data_value,
value = 5) %>%
set_edge_attrs_ws(
edge_attr = rel,
value = "related_to") %>%
clear_selection()
# Starting at node `3`, traverse
# to nodes `2` and `4` with a
# match expression (==)
graph <-
graph %>%
clear_selection() %>%
select_nodes_by_id(nodes = 3) %>%
trav_both(
conditions = data_value == 10)
# Expect that node `2` is in
#@ the current selection
expect_equal(
get_selection(graph), 2)
# Starting at node `3`, traverse
# to nodes `2` and `4` with a
# match expression (<)
graph <-
graph %>%
clear_selection() %>%
select_nodes_by_id(nodes = 3) %>%
trav_both(
conditions = data_value < 15)
# Expect that nodes `2` and `4`
# are in the current selection
expect_equal(
get_selection(graph), c(2, 4))
# Starting at node `3`, traverse
# to nodes `2` and `4` with a
# match expression (>)
graph <-
graph %>%
clear_selection() %>%
select_nodes_by_id(nodes = 3) %>%
trav_both(
conditions = data_value > 5)
# Expect that node `2` is in
# the current selection
expect_equal(
get_selection(graph), 2)
# Starting at node `3`, traverse
# to nodes `2` and `4` with a
# match expression (!=)
graph <-
graph %>%
clear_selection() %>%
select_nodes_by_id(nodes = 3) %>%
trav_both(
conditions = data_value != 5)
# Expect that node `2` is in
# the current selection
expect_equal(
get_selection(graph), 2)
# Starting at node `3`, attempt
# to traverse to nodes `2` and `4`
# with a match expression that won't
# yield a match in one direction
graph <-
graph %>%
clear_selection() %>%
select_nodes_by_id(nodes = 3) %>%
trav_both(
conditions = data_value != 10)
# Expect that the node `4` is
# the current selection
expect_equal(
get_selection(graph), 4)
# Starting at node `3`, traverse to
# nodes `2` and `4` with a character
# match expression
graph <-
graph %>%
clear_selection() %>%
select_nodes_by_id(nodes = 3) %>%
trav_both(
conditions = type == "circle")
# Expect that nodes `2` and `4`
# are in the current selection
expect_equal(
get_selection(graph), c(2, 4))
# Starting at node `3`, attempt to
# traverse to nodes `2` and `4` with
# a character match expression that
# won't yield a match in one direction
graph <-
graph %>%
clear_selection() %>%
select_nodes_by_id(nodes = 3) %>%
trav_both(
conditions = shape == "square")
# Expect that the node `4` is
# the current selection
expect_equal(
get_selection(graph), 4)
# Starting at node `2`, traverse
# to nodes `1` and `3` with a
# character match expression
graph <-
graph %>%
clear_selection() %>%
select_nodes_by_id(nodes = 2) %>%
trav_both(
conditions = shape == "triangle")
# Expect that the node `1` is
# the current selection
expect_equal(
get_selection(graph), 1)
# Starting at node `2`, traverse to
# node `2` with a character match expression
graph <-
graph %>%
clear_selection() %>%
select_nodes_by_id(nodes = 2) %>%
trav_both(
conditions = shape == "circle")
# Expect that the node `2` is
# the current selection
expect_equal(
get_selection(graph), 2)
})
test_that("selective traversals with `trav_both_edge()` are possible", {
# Create a graph
graph <-
create_graph() %>%
add_node() %>%
add_node() %>%
add_node() %>%
add_node() %>%
add_edge(
from = 1,
to = 2) %>%
add_edge(
from = 2,
to = 3) %>%
add_edge(
from = 3,
to = 4) %>%
select_nodes() %>%
set_node_attrs_ws(
node_attr = type,
value = "circle") %>%
clear_selection() %>%
select_nodes_by_id(nodes = c(2, 3)) %>%
set_node_attrs_ws(
node_attr = data_value,
value = 10) %>%
clear_selection() %>%
select_nodes_by_id(nodes = 4) %>%
set_node_attrs_ws(
node_attr = shape,
value = "square") %>%
set_node_attrs_ws(
node_attr = data_value,
value = 5) %>%
clear_selection() %>%
select_nodes_by_id(nodes = 1) %>%
set_node_attrs_ws(
node_attr = shape,
value = "triangle") %>%
set_node_attrs_ws(
node_attr = data_value,
value = 5) %>%
clear_selection() %>%
select_edges() %>%
set_edge_attrs_ws(
edge_attr = data_value,
value = c(1, 2, 3)) %>%
set_edge_attrs_ws(
edge_attr = rel,
value = "related_to") %>%
clear_selection()
# Starting at node `3`, traverse
# to edges `3` -> `4` and `2` -> `3`
# with a match expression (==)
graph <-
graph %>%
clear_selection() %>%
select_nodes_by_id(nodes = 3) %>%
trav_both_edge(
conditions = data_value == 2)
# Expect that edge `2` is in
# the current selection
expect_equal(
get_selection(graph), 2)
# Expect an error if the graph
# has no selection of nodes
expect_error(
graph %>%
clear_selection() %>%
trav_both_edge(
conditions = data_value == 2))
# Return the same graph if a
# traversal with conditions does
# not result in a traversal
expect_equal(
graph %>%
clear_selection() %>%
select_nodes_by_id(nodes = 3) %>%
trav_both_edge(
conditions = data_value == 6) %>%
get_selection(),
3)
})
test_that("traversing to reverse edges with an edge selection is possible", {
# Create a node data frame (ndf)
ndf <-
create_node_df(
n = 4,
type = "basic",
label = TRUE)
# Create an edge data frame (edf)
edf <-
create_edge_df(
from = c(1, 4, 2, 3, 3),
to = c(4, 1, 3, 2, 1))
# Create a graph with the ndf and edf
graph <-
create_graph(
nodes_df = ndf,
edges_df = edf)
# Explicitly select the edges `1`->`4`
# and `2`->`3`
graph <-
graph %>%
select_edges(
from = 1,
to = 4) %>%
select_edges(
from = 2,
to = 3)
# Add to the selection the reverse edges
graph_add_selection <-
graph %>%
trav_reverse_edge(
add_to_selection = TRUE)
# Expect certain edges to be available
# in the selection
expect_equal(
get_selection(graph_add_selection),
c(1, 2, 3, 4))
# Flip the selection to the reverse edge
graph_flip_selection <-
graph %>%
trav_reverse_edge(
add_to_selection = FALSE)
# Expect certain edges to be available
# in the selection
expect_equal(
get_selection(graph_flip_selection),
c(2, 4))
# Expect an error if there is no active edge
# selection in the graph
expect_error(
graph %>%
clear_selection() %>%
trav_reverse_edge(
add_to_selection = TRUE))
})
test_that("selective traversals with `trav_out_until()` are possible", {
# Create a path graph and add
# values of 1 to 10 across the
# nodes from beginning to end;
# select the first path node
graph <-
create_graph() %>%
add_path(
n = 10,
node_data = node_data(
value = 1:10)) %>%
select_nodes_by_id(
nodes = 1)
# Traverse outward, node-by-node
# until stopping at a node where
# the `value` attribute is 8
graph <-
graph %>%
trav_out_until(
conditions =
value == 8)
# Expect that the graph's node
# selection is node `8` (which
# has a node attr `value` of 8)
expect_equal(
graph %>%
get_selection(), 8)
# Create two cycles in a new graph
# and add values of 1 to 6 to the
# first cycle, and values 7 to
# 12 in the second; select nodes
# `1` and `7`
graph <-
create_graph() %>%
add_cycle(
n = 6,
node_data = node_data(
value = 1:6)) %>%
add_cycle(
n = 6,
node_data = node_data(
value = 7:12)) %>%
select_nodes_by_id(
nodes = c(1, 7))
# Traverse outward, node-by-node
# from `1` and `7` until stopping
# at the first nodes where the
# `value` attribute is 5, 6, or 15;
# specify that we should only
# keep the finally traversed to
# nodes that satisfy the conditions
graph <-
graph %>%
trav_out_until(
conditions =
value %in% c(5, 6, 9),
exclude_unmatched = TRUE)
# Expect that the graph's node
# selection contains nodes
# `5` and `9`
expect_equal(
graph %>%
get_selection(), c(5, 9))
# Expect an error if there isn't
# an active node selection
expect_error(
create_graph() %>%
add_path(
n = 10,
node_data = node_data(
value = 1:10)) %>%
trav_out_until(
conditions =
value == 8))
})
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.