R/utils_tests.R

Defines functions for_all_expect_error for_all_expect_identity for_all_expect_false for_all_expect_true test_assertion test_predicate test_predicate_and_assertion

test_predicate_and_assertion <- function(valid_generator,
                                         invalid_generator,
                                         predicate,
                                         assertion) {
  test_predicate(
    valid_generator = valid_generator,
    invalid_generator = invalid_generator,
    predicate = predicate
  )
  test_assertion(
    valid_generator = valid_generator,
    invalid_generator = invalid_generator,
    assertion = assertion
  )
}

test_predicate <- function(valid_generator,
                           invalid_generator,
                           predicate) {
  testthat::test_that(
    paste0(
      parse_function_name(predicate),
      " returns TRUE for valid input and FALSE otherwise"
    ),
    {
      for_all_expect_true(valid_generator, predicate)
      for_all_expect_false(invalid_generator, predicate)
    }
  )
}

test_assertion <- function(valid_generator,
                           invalid_generator,
                           assertion) {
  testthat::test_that(
    paste0(
      parse_function_name(assertion),
      " returns the input for valid input and throws an
      error otherwise"
    ),
    {
      for_all_expect_identity(valid_generator, assertion)
      for_all_expect_error(invalid_generator, assertion)
    }
  )
}

for_all_expect_true <- function(generator, .f) {
  hedgehog::forall(
    generator,
    function(x) testthat::expect_true(.f(x))
  )
}

for_all_expect_false <- function(generator, .f) {
  hedgehog::forall(
    generator,
    function(x) testthat::expect_false(.f(x))
  )
}

for_all_expect_identity <- function(generator, .f) {
  hedgehog::forall(
    generator,
    function(x) testthat::expect_identical(x, .f(x))
  )
}

for_all_expect_error <- function(generator, .f) {
  hedgehog::forall(
    generator,
    function(x) testthat::expect_error(.f(x))
  )
}
armcn/pure documentation built on Dec. 30, 2021, 12:16 a.m.