tests/testthat/test-add_noise_disc_gaussian.R

# specify default arguments for add_noise_disc_gaussian
# note that NULL values may be supplied to the function and left unused
model <- NULL
new_data <- NULL
conf_model_data <- NULL
outcome_var <- NULL
col_schema <- NULL
pred <- 1:100

test_that("add_noise_disc_gaussian reproduces noise", {
  
  set.seed(1)
  noisy_preds1 <- add_noise_disc_gaussian(
    model = model,
    new_data = new_data,
    conf_model_data,
    outcome_var = outcome_var,
    col_schema = col_schema,
    pred = pred,
    variance = 3
  )
  
  set.seed(1)
  noisy_preds2 <- add_noise_disc_gaussian(
    model = model,
    new_data = new_data,
    conf_model_data,
    outcome_var = outcome_var,
    col_schema = col_schema,
    pred = pred,
    variance = 3
  )
  
  expect_equal(noisy_preds1, noisy_preds2)
  
})

test_that("add_noise_disc_gaussian reproduces with either direct var or zCDP", {
  
  set.seed(1)
  noisy_preds1 <- add_noise_disc_gaussian(
    model = model,
    new_data = new_data,
    conf_model_data,
    outcome_var = outcome_var,
    col_schema = col_schema,
    pred = pred,
    variance = 2
  )
  
  set.seed(1)
  noisy_preds2 <- add_noise_disc_gaussian(
    model = model,
    new_data = new_data,
    conf_model_data,
    outcome_var = outcome_var,
    col_schema = col_schema,
    pred = pred,
    rho = 1,
    sensitivity = 2
  )
  
  expect_equal(noisy_preds1, noisy_preds2)
  
})

test_that("add_noise_disc_gaussian increment rescaling", {
  
  set.seed(1)
  noisy_preds1 <- add_noise_disc_gaussian(
    model = model,
    new_data = new_data,
    conf_model_data,
    outcome_var = outcome_var,
    col_schema = col_schema,
    pred = pred,
    variance = 10,
    increment = 5
  )
  
  # all noise increments should be 0 modulo 5 (the increment)
  expect_true(all((noisy_preds1 - pred) %% 5 == 0))
  
})

test_that("add_noise_disc_gaussian error handling", {
  
  # no variance parameters specified
  expect_error(
    add_noise_disc_gaussian(
      model = model,
      new_data = new_data,
      conf_model_data,
      outcome_var = outcome_var,
      col_schema = col_schema,
      pred = pred
    ),
    regexp = "Must specify either `variance` or both `rho` and `sensitivity`",
    fixed = TRUE
  )
  
  # too many variance parameters specified
  expect_error(
    add_noise_disc_gaussian(
      model = model,
      new_data = new_data,
      conf_model_data,
      outcome_var = outcome_var,
      col_schema = col_schema,
      pred = pred,
      variance = 1,
      rho = 2
    ),
    regexp = "If using variance, rho and sensitivity cannot be specified.",
    fixed = TRUE
  )
  
  # not enough variance parameters specified
  expect_error(
    add_noise_disc_gaussian(
      model = model,
      new_data = new_data,
      conf_model_data,
      outcome_var = outcome_var,
      col_schema = col_schema,
      pred = pred,
      rho = 2
    ),
    regexp = "Must specify either `variance` or both `rho` and `sensitivity`",
    fixed = TRUE
  )
  
  # incorrect increment 
  expect_error(
    add_noise_disc_gaussian(
      model = model,
      new_data = new_data,
      conf_model_data,
      outcome_var = outcome_var,
      col_schema = col_schema,
      pred = pred,
      variance = 1,
      increment = 0
    )
  )
  
})

Try the tidysynthesis package in your browser

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

tidysynthesis documentation built on March 17, 2026, 1:06 a.m.