tests/testthat/test-define_states.R

test_that("define_multistate creates valid structure", {
  ms <- define_multistate(
    state_names = c("A", "B", "C"),
    absorbing = "C",
    transitions = list(A = c("B", "C"), B = c("C"))
  )

  expect_s3_class(ms, "mstate_structure")
  expect_equal(ms$n_states, 3)
  expect_equal(ms$n_transitions, 3)
  expect_equal(ms$absorbing, "C")
  expect_equal(ms$transient, c("A", "B"))

  # Transition matrix
  expect_equal(ms$trans_matrix["A", "B"], 1L)
  expect_equal(ms$trans_matrix["A", "C"], 2L)
  expect_equal(ms$trans_matrix["B", "C"], 3L)
  expect_true(is.na(ms$trans_matrix["C", "A"]))
  expect_true(is.na(ms$trans_matrix["A", "A"]))
})

test_that("clinical_states creates standard structure", {
  ms <- clinical_states()
  expect_s3_class(ms, "mstate_structure")
  expect_equal(ms$n_states, 6)
  expect_equal(ms$absorbing, "Death")
  expect_equal(length(ms$transient), 5)
  expect_true(ms$n_transitions >= 10)
})

test_that("define_multistate validates inputs", {
  expect_error(
    define_multistate(c("A"), "A", list()),
    "at least 2 states"
  )
  expect_error(
    define_multistate(c("A", "B"), "X", list(A = "B")),
    "absorbing states must be in"
  )
  expect_error(
    define_multistate(c("A", "B"), "B", list(A = c("B", "X"))),
    "Unknown destination"
  )
  expect_error(
    define_multistate(c("A", "B", "C"), "C", list(A = c("B", "C"))),
    "missing from 'transitions'"
  )
})

test_that("print.mstate_structure works", {
  ms <- clinical_states()
  expect_output(print(ms), "Multistate Structure")
  expect_output(print(ms), "Transitions:")
})

Try the RFmstate package in your browser

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

RFmstate documentation built on Sept. 10, 2026, 1:09 a.m.