tests/testthat/test-position.R

test_that("position translation works", {
  net <- bnlearn::model2network("[A_t_2][B_t_2][C_t_2][A_t_1][B_t_1][C_t_1][A_t_0|A_t_1:B_t_2:C_t_1][B_t_0|A_t_1:B_t_1][C_t_0|B_t_2:C_t_2]")
  class(net) <- c("dbn", class(net))
  size <- 3

  ps <- Position$new(net, size)
  res <- list(
    list(
      list(c("A_t_1", "B_t_1", "C_t_1"),
           c(1,0,1)),
      list(c("A_t_1", "B_t_1", "C_t_1"),
           c(1,1,0)),
      list(c("A_t_1", "B_t_1", "C_t_1"),
           c(0,0,0))),
    list(
      list(c("A_t_2", "B_t_2", "C_t_2"),
           c(0,1,0)),
      list(c("A_t_2", "B_t_2", "C_t_2"),
           c(0,0,0)),
      list(c("A_t_2", "B_t_2", "C_t_2"),
           c(0,1,1)))
  )
  expect_equal(ps$get_cl(), res)
})

test_that("random network generation works", {
  ordering <- c("A", "B", "C")
  size <- 3

  set.seed(51)
  ps <- Position$new(NULL, size, ordering)

  res <- list(
    list(
      list(c("A_t_1", "B_t_1", "C_t_1"),
           c(1,0,0)),
      list(c("A_t_1", "B_t_1", "C_t_1"),
           c(0,1,0)),
      list(c("A_t_1", "B_t_1", "C_t_1"),
           c(0,0,0))),
    list(
      list(c("A_t_2", "B_t_2", "C_t_2"),
           c(0,1,0)),
      list(c("A_t_2", "B_t_2", "C_t_2"),
           c(0,0,1)),
      list(c("A_t_2", "B_t_2", "C_t_2"),
           c(0,1,1)))
  )
  expect_equal(ps$get_cl(), res)
})

test_that("translation from Position to bn works", {
  net <- bnlearn::model2network("[A_t_2][B_t_2][C_t_2][A_t_1][B_t_1][C_t_1][A_t_0|A_t_1:B_t_2:C_t_1][B_t_0|A_t_1:B_t_1][C_t_0|B_t_2:C_t_2]")
  class(net) <- c("dbn", class(net))
  size <- 3

  ps <- Position$new(net, size)
  res_net <- ps$bn_translate()

  res <- apply(net$arcs, 1, function(x){paste0(x[1], x[2])})
  res_net <- apply(res_net$arcs, 1, function(x){paste0(x[1], x[2])})


  expect_setequal(res_net, res)
})

test_that("position plus velocity works", {
  net <- bnlearn::model2network("[A_t_2][B_t_2][C_t_2][A_t_1][B_t_1][C_t_1][A_t_0|A_t_1:B_t_2:C_t_1][B_t_0|A_t_1:B_t_1][C_t_0|B_t_2:C_t_2]")
  class(net) <- c("dbn", class(net))
  ordering <- c("A_t_0", "B_t_0", "C_t_0")
  size <- 3

  ps <- Position$new(net, size)
  vl <- Velocity$new(ordering, size)
  set.seed(42)
  vl$randomize_velocity(c(15,60,25))
  ps$add_velocity(vl)
  
  res <- list(
    list(
      list(c("A_t_1", "B_t_1", "C_t_1"),
           c(0,0,1)),
      list(c("A_t_1", "B_t_1", "C_t_1"),
           c(1,1,0)),
      list(c("A_t_1", "B_t_1", "C_t_1"),
           c(1,0,1))),
    list(
      list(c("A_t_2", "B_t_2", "C_t_2"),
           c(1,1,1)),
      list(c("A_t_2", "B_t_2", "C_t_2"),
           c(0,0,0)),
      list(c("A_t_2", "B_t_2", "C_t_2"),
           c(0,0,1)))
  )
  expect_equal(ps$get_cl(), res)
  expect_equal(ps$get_n_arcs(), 9)
})

test_that("position minus position works", {
  net <- bnlearn::model2network("[A_t_2][B_t_2][C_t_2][A_t_1][B_t_1][C_t_1][A_t_0|A_t_1:B_t_2:C_t_1][B_t_0|A_t_1:B_t_1][C_t_0|B_t_2:C_t_2]")
  class(net) <- c("dbn", class(net))
  ordering <- c("A_t_0", "B_t_0", "C_t_0")
  size <- 3
  ps1 <- Position$new(net, size)
  
  ordering <- c("A", "B", "C")
  set.seed(51)
  ps2 <- Position$new(NULL, size, ordering)
  
  vl <- ps1$subtract_position(ps2)
  
  res <- list(
    list(
      list(c("A_t_1", "B_t_1", "C_t_1"),
           c(0,0,1)),
      list(c("A_t_1", "B_t_1", "C_t_1"),
           c(1,0,0)),
      list(c("A_t_1", "B_t_1", "C_t_1"),
           c(0,0,0))),
    list(
      list(c("A_t_2", "B_t_2", "C_t_2"),
           c(0,0,0)),
      list(c("A_t_2", "B_t_2", "C_t_2"),
           c(0,0,-1)),
      list(c("A_t_2", "B_t_2", "C_t_2"),
           c(0,0,0)))
  )
  
  expect_equal(vl$get_cl(), res)
  expect_equal(vl$get_abs_op(), 3)
})

Try the dbnR package in your browser

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

dbnR documentation built on Oct. 5, 2022, 1:07 a.m.