tests/testthat/test-typrr.R

context("typrr.R")

test_that("print.equation", {
  E <- equation(type("double"), type("double"))
  expect_output(print(E), "double = double")
})

test_that("variable_name_generator", {
  gen <- variable_name_generator()
  tv <- c(gen(), gen(), gen())
  expect_equal(tv, c("'a", "'b", "'c"))
})

test_that("extract1", {
  expect_is(extract1(type_env(), quote(1))[[2]], "double")

  te <- type_env()
  te[["a"]] <- type("integer")
  expect_is(extract1(te, quote(a))[[2]], "integer")

  te <- type_env()
  extract1(te, quote(a <- 1))
  expect_is(te$a, "double")
})

test_that("substitute_type1", {
  expect_equal(substitute_type1(type_variable("'a"), type("double"), type_variable("'a")), type("double"))
  expect_equal(substitute_type1(type_variable("'a"), type("double"), type_variable("'b")), type_variable("'b"))
  expect_equal(substitute_type1(type_variable("'a"), type("double"), function_type(type_variable("'a"), type("logical"))),
               function_type(type("double"), type("logical")))
})

test_that("unify", {
  E <- equation(function_type(type_variable("'a"), type("double")),
                function_type(type("double"), type("double")))
  expect_equal(unify(list(E)), list(equation(type_variable("'a"), type("double"))))

  expect_error(unify(list(with_index(equation(type("double"), type("character")), 12))), "type error:12")
})

test_that("PT", {
  expect_is(PT(parse(text = "1.2")), "double")
  expect_is(PT(parse(text = "a <- function(x) x + 2; a(1)")), "double")
  expect_is(PT(parse(text = "a <- function(x) 'abc'; a(1)")), "character")
  expect_is(PT(parse(text = "a <- function(x) x; a(1); a(1)")), "double")
})
igjit/typrr documentation built on May 28, 2019, 1:20 p.m.