test_that("vr_mat functions work correctly", {
  ### test vr_mat_U
  U1 <- rbind(
    c(0, 0, 0, 0),
    c(0.5, 0.2, 0.1, 0),
    c(0, 0.3, 0.3, 0.1),
    c(0, 0, 0.5, 0.6)
  )

  x1 <- vr_mat_U(U1)
  expect_true(inherits(U1, "matrix"))
  expect_true(all(is.na(x1[, 1])))

  x2 <- vr_mat_U(U1, surv_only_na = FALSE)
  expect_false(all(is.na(x2[, 1])))

  # all transitions possible
  x3 <- vr_mat_U(U1, posU = matrix(TRUE, nrow = 4, ncol = 4))
  expect_false(anyNA(x3))


  ### test vr_mat_R
  R1 <- rbind(
    c(0, 0, 1.1, 1.6),
    c(0, 0, 0.8, 0.4),
    c(0, 0, 0, 0),
    c(0, 0, 0, 0)
  )

  x4 <- vr_mat_R(U1, R1)
  expect_true(inherits(x4, "matrix"))
  expect_true(all(is.na(x4[, 1:2])))

  # all transitions possible
  x5 <- vr_mat_R(U1, R1, posR = matrix(TRUE, nrow = 4, ncol = 4))
  expect_false(anyNA(x5))
})


test_that("vr_mat functions warn and fail gracefully", {
  expect_error(vr_mat_U(mat_u_na))
  expect_error(vr_mat_R(mat_u, mat_f_na))
})
