tests/testthat/test-categorical.R

library(testthat)
context("categorical rules")

describe("categorical", {
  it("can detect categorical rules", {
    v <- validator( a %in% c("a1", "a2"),
                    if (a %in% 'a1') b == "b1",
                    x > 1,
                    if (x>1) a == "a1"
                  )
    expect_equal(is_categorical(v), c(TRUE, TRUE, FALSE, FALSE))
  })
  
  it("can derive coefficients",{
    v <- validator( a %in% c("a1", "a2"),
                    if (a %in% 'a1') b == "b1"
    )
    coef <- cat_coefficients(v)
    expect_equal( coef$A
               ,  matrix( c(1, 1, 1, 0, 0, -1)
                        , ncol = 3
                        , dimnames = list(
                            rule = c("V1", "V2"),
                            variable = c("a:a1", "a:a2", "b:b1")
                        )))
    expect_that(coef$operator, equals(c("==", "<=")))
    expect_that(coef$b, equals(c(1, 0)))
  })

  it("can handle logical rules", {
    v <- validator( married %in% c(TRUE, FALSE)
                  , adult %in% c(TRUE, FALSE)
                  , if (married==TRUE) adult==TRUE
                  )
    cat_coefficients(v)
  })
})

describe("%vin%", {
  skip_if_not_installed("validate", minimum_version = "0.2.3")
  it("can detect categorical rules with %vin%", {
    v <- validator( a %vin% c("a1", "a2"),
                    if (a %vin% 'a1') b == "b1",
                    x > 1,
                    if (x>1) a == "a1"
    )
    expect_equal(is_categorical(v), c(TRUE, TRUE, FALSE, FALSE))
  })
  
})

Try the validatetools package in your browser

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

validatetools documentation built on Oct. 1, 2023, 1:06 a.m.