tests/testthat/test-indexing2.R

am <- function(x) {
  x <- as.matrix(x)
  dimnames(x) <- NULL
  x
}

test_that("[ can add and delete edges", {
  g <- make_empty_graph(10)
  A <- matrix(0, 10, 10)

  A[1, 2] <- g[1, 2] <- TRUE
  expect_that(am(g[]), equals(A))

  A[2, 1] <- g[2, 1] <- TRUE
  expect_that(am(g[]), equals(A))

  g[2, 1] <- NULL
  A[2, 1] <- 0
  expect_that(am(g[]), equals(A))

  A[1, 2] <- g[1, 2] <- FALSE
  expect_that(am(g[]), equals(A))

  g <- make_empty_graph(10)
  A <- matrix(0, 10, 10)
  A[-1, 1] <- g[-1, 1] <- 1
  expect_that(am(g[]), equals(A))
})

test_that("[ can set weights and delete weighted edges", {
  g <- make_empty_graph(10)
  A <- matrix(0, 10, 10)
  g <- set_edge_attr(g, "weight", c(), 1)
  A[1, 2] <- g[1, 2] <- 1
  expect_that(am(g[]), equals(A))

  A[2, 1] <- g[2, 1] <- 2
  expect_that(am(g[]), equals(A))

  A[1, 2] <- g[1, 2] <- 3
  expect_that(am(g[]), equals(A))

  A[1:2, 2:3] <- g[1:2, 2:3] <- -1
  expect_that(am(g[]), equals(A))

  g[1, 2] <- NULL
  A[1, 2] <- 0
  expect_that(am(g[]), equals(A))
})

test_that("[ can add edges and ste weights via vertex names", {
  g <- make_empty_graph(10)
  A <- matrix(0, 10, 10)
  V(g)$name <- letters[1:vcount(g)]
  rownames(A) <- colnames(A) <- letters[1:vcount(g)]

  A["a", "b"] <- g["a", "b"] <- TRUE
  A["b", "c"] <- g["b", "c"] <- TRUE
  expect_that(am(g[]), equals(am(A)))

  A[c("a", "f"), c("f", "a")] <- g[c("a", "f"), c("f", "a")] <- TRUE
  expect_that(am(g[]), equals(am(A)))

  A[A == 1] <- NA
  A[c("a", "c", "h"), c("a", "b", "c")] <-
    g[c("a", "c", "h"), c("a", "b", "c"), attr = "weight"] <- 3
  expect_that(am(g[]), equals(am(A)))
})

test_that("[ and the from-to notation", {
  g <- make_empty_graph(10)
  A <- matrix(0, 10, 10)
  V(g)$name <- letters[1:vcount(g)]
  rownames(A) <- colnames(A) <- letters[1:vcount(g)]

  g[from = c("a", "c", "h"), to = c("a", "b", "c")] <- 1
  A["a", "a"] <- A["c", "b"] <- A["h", "c"] <- 1
  expect_that(
    g[from = c("a", "c", "h", "d"), to = c("a", "b", "c", "e")],
    equals(c(1, 1, 1, 0))
  )
  expect_that(am(g[]), equals(am(A)))

  g[from = c("a", "c", "h", "a"), to = c("a", "a", "a", "e"), attr = "weight"] <- 3
  A[A != 0] <- NA
  A["a", "a"] <- A["c", "a"] <- A["h", "a"] <- A["a", "e"] <- 3
  expect_that(g[
    from = c("a", "c", "h", "a", "c", "c"),
    to = c("a", "a", "a", "e", "f", "b")
  ], equals(c(3, 3, 3, 3, 0, NA)))
  expect_that(am(g[]), equals(am(A)))
})

test_that("[ and from-to with multiple values", {
  g <- make_empty_graph(10)
  A <- matrix(0, 10, 10)
  V(g)$name <- letters[1:vcount(g)]
  rownames(A) <- colnames(A) <- letters[1:vcount(g)]

  g[from = c("a", "c", "h"), to = c("a", "b", "c")] <- 1
  A["a", "a"] <- A["c", "b"] <- A["h", "c"] <- 1
  g[from = c("a", "c", "h", "a"), to = c("a", "a", "a", "e"), attr = "weight"] <- 5:8
  A[A != 0] <- NA
  A["a", "a"] <- 5
  A["c", "a"] <- 6
  A["h", "a"] <- 7
  A["a", "e"] <- 8
  expect_that(g[
    from = c("a", "c", "h", "a", "c", "c"),
    to = c("a", "a", "a", "e", "f", "b")
  ], equals(c(5:8, 0, NA)))
  expect_that(am(g[]), equals(am(A)))
})

Try the igraph package in your browser

Any scripts or data that you put into this service are public.

igraph documentation built on Aug. 10, 2023, 9:08 a.m.