tests/testthat/test-add-longnostic.R

library(dplyr)

# function to use inside testthat
add_new_names <- function(.data, x){
  c(tsibble::key_vars(.data), 
    tsibble::index_var(.data),
    x,
    tsibble::measured_vars(.data))
}

wages_test <- sample_frac_keys(wages, 0.05)

df_add_l_mean_1 <- wages_test %>%
                    features(ln_wages, 
                             list(mean = mean)) %>% 
                     left_join(wages_test, 
                               by = "id",
                               multiple = "all")
df_add_n_obs <- add_n_obs(wages_test)
df_add_key_slope <- add_key_slope(wages_test, ln_wages ~ xp)
df_add_key_slope_multi <- add_key_slope(wages_test, ln_wages ~ xp + ged)

updated_dim <- c(nrow(wages_test), ncol(wages_test) + 1)

test_that("add_* funs return a tsibble", {
  expect_s3_class(df_add_n_obs, class = c("tbl_ts"))
  expect_s3_class(df_add_key_slope, class = c("tbl_ts"))
  expect_s3_class(df_add_key_slope_multi, class = c("tbl_ts"))
})


test_that("longnostics returns the right dimensions", {
  expect_equal(dim(df_add_l_mean_1), updated_dim)
  expect_equal(dim(df_add_n_obs), updated_dim)
  expect_equal(dim(df_add_key_slope), c(nrow(wages_test), 
                                        ncol(wages_test) + 2))
  expect_equal(dim(df_add_key_slope_multi), c(nrow(wages_test), 
                                              ncol(wages_test) + 3))
})

test_that("longnostic returns the right names", {
  expect_equal(names(df_add_l_mean_1), 
               c(names(wages_test)[1],
                 "mean",
                 names(wages_test)[2:length(names(wages_test))])
  )
  expect_equal(names(df_add_n_obs), 
               add_new_names(wages_test, "n_obs"))
  expect_equal(names(df_add_key_slope), 
               add_new_names(wages_test,
                                  c(".intercept",
                                    ".slope_xp")))
  expect_equal(names(df_add_key_slope_multi), 
               add_new_names(wages_test,
                             c(".intercept", 
                               ".slope_xp", 
                               ".slope_ged")))
})

test_that("longnostic returns a tibble", {
  expect_s3_class(df_add_l_mean_1, class = c("tbl"))
  expect_s3_class(df_add_n_obs, class = c("tbl"))
  expect_s3_class(df_add_key_slope, class = c("tbl"))
  expect_s3_class(df_add_key_slope_multi, class = c("tbl"))
})

classes <- function(x) purrr::map_chr(x, class)

test_that("longnostic returns correct classes", {
  expect_equal(classes(df_add_l_mean_1)[["mean"]], "numeric")
  expect_equal(classes(df_add_n_obs)[["n_obs"]], "integer")
  expect_equal(classes(df_add_key_slope)[[".intercept"]], "numeric")
  expect_equal(classes(df_add_key_slope)[[".slope_xp"]], "numeric")
  expect_equal(classes(df_add_key_slope_multi)[[".intercept"]], "numeric")
  expect_equal(classes(df_add_key_slope_multi)[[".slope_xp"]], 
               "numeric")
  expect_equal(classes(df_add_key_slope_multi)[[".slope_ged"]], "numeric")
})

library(dplyr)
test_that("add-key-slope returns different slopes and intercepts",{
  expect_gte(n_distinct(df_add_key_slope$.intercept), 2)
  expect_gte(n_distinct(df_add_key_slope$.slope_xp), 2)
          })
njtierney/brolgar documentation built on Feb. 12, 2023, 12:14 a.m.