tests/testthat/test-database.R

test_that("a numeric data frame creates a Biogeme database", {
  data <- data.frame(
    CHOICE = c(1, 2, 1),
    TIME = c(10, 20, 30),
    COST = c(1.5, 2.5, 3.5),
    row.names = c("a", "b", "c")
  )

  database <- biogeme_database("test_data", data)

  expect_s3_class(database, "biogeme_database")
  expect_equal(database$name, "test_data")
  expect_equal(nrow(database$data), 3L)
  expect_equal(rownames(database$data), as.character(seq_len(3)))
  expect_equal(biogeme_database_columns(database), c("CHOICE", "TIME", "COST"))
  expect_true(biogeme_database_has_column(database, "TIME"))
  expect_false(biogeme_database_has_column(database, "MISSING"))
})

test_that("the database copies its input data", {
  data <- data.frame(x = c(1, 2))
  database <- biogeme_database("copy_test", data)
  data$x[[1]] <- 99

  expect_equal(database$data$x, c(1, 2))
})

test_that("database validation catches malformed data", {
  expect_error(biogeme_database("x", 1:3), "data.frame")
  expect_error(biogeme_database("x", data.frame()), "at least one row")
  expect_error(biogeme_database("x", data.frame(x = numeric())), "at least one row")
  expect_error(
    biogeme_database("x", data.frame(x = 1:2, label = c("a", "b"))),
    "numeric"
  )
  expect_error(
    biogeme_database("x", setNames(data.frame(a = 1:2, b = 2:3), c("a", "a"))),
    "unique"
  )
  expect_error(biogeme_database("", data.frame(x = 1:2)), "name")
})

test_that("database printing is informative", {
  database <- biogeme_database("print_test", data.frame(x = 1:2))
  expect_match(format(database), "print_test")
  expect_match(format(database), "2 rows")
})

Try the rbiogeme package in your browser

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

rbiogeme documentation built on Sept. 29, 2026, 5:09 p.m.