tests/testthat/test-assign_constraints.R

test_that("assign_constraints_num returns expected values", {
  
  conf_data <- mtcars[1:3, c("cyl", "disp", "mpg", "wt")]
  start_data <- mtcars[1:3, "cyl", drop = FALSE]
  
  roadmap <- roadmap(conf_data = conf_data, start_data = start_data) |>
    add_sequence_manual(disp, mpg, wt)
  
  schema <- schema(conf_data = conf_data, start_data = start_data)
  
  constraints_by_hand_num <- 
    dplyr::bind_cols(
      mtcars[1:3, ],
      .assigned_min = c(0, 0, 0),
      .assigned_max = c(15, 12, Inf)
    )
  
  # constraints by function
  constraints_df_num <- tibble::tribble(
    ~var, ~min, ~max, ~conditions,
    "mpg", 0, Inf, "TRUE",
    "mpg", -Inf, 15, "cyl == 6",
    "mpg", -Inf, 12, "wt >= 2.8"
  ) 
  
  constraints_by_function_num <- assign_constraints_num(
    synth_data = mtcars[1:3, ], 
    constraints = constraints(
      schema = schema,
      constraints_df_num = constraints_df_num
    )$constraints_num[["mpg"]]
  )
  
  expect_equal(constraints_by_function_num, constraints_by_hand_num)
  
})


test_that("assign_constraints_cat returns expected values", {
  
  schema <- schema(
    conf_data = dplyr::select(mtcars, mpg, cyl, disp, carb, vs, am, gear) |>
      dplyr::mutate(vs = factor(vs), 
                    am = factor(am),
                    gear = factor(gear)),
    start_data = dplyr::select(mtcars, cyl)
  )
  
  constraints_df_cat <-  tibble::tribble(
    ~var, ~allowed, ~forbidden, ~conditions,
    "vs", "1", NA, "TRUE",
    "gear", NA, "5", "TRUE",
    "gear", "3", NA, "cyl == 8"
  )
  
  constraints_by_function_cat <- assign_constraints_cat(
    synth_data = dplyr::select(mtcars, cyl, vs, gear),
    constraints = constraints(
      schema = schema,
      constraints_df_cat = constraints_df_cat
    )$constraints_cat[["gear"]]
  )
  
  expect_true(
    all(
      # directly applying the constraint condition IDs...
      dplyr::mutate(
        mtcars, 
        .condition_id = dplyr::if_else(
          cyl == 8, 2, 1
        ), 
        .keep = "none"
      ) == (
        # ...should be the same as using assign_constraints_cat
        constraints_by_function_cat$synth_data$.condition_id
      )
    )
  )
  
  expect_true(
    all(
      # directly applying the constraint modes...
      dplyr::mutate(
        mtcars, 
        .constraint_mode = dplyr::if_else(
          cyl == 8, "inclusion", "exclusion"
        ), 
        .keep = "none"
      ) == (
        # ...should be the same as using assign_constraints_cat
        constraints_by_function_cat$synth_data |>
          dplyr::inner_join(constraints_by_function_cat$condition_defs,
                            by = ".condition_id") |>
          dplyr::pull(".condition_mode")
      )
    )
  )
  
})

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.