tests/testthat/test-ops.R

.onLoad()

test_that("bolean ops throw a warning once", {
  xval <- 1
  x <- set_errors(xval, 1)

  expect_warning(expect_equal(!x, !xval))
  expect_silent(expect_equal(!x, !xval))
  options(errors.warn.bool = TRUE)
  expect_warning(expect_equal(x & x, xval & xval))
  expect_silent(expect_equal(x & x, xval & xval))
  options(errors.warn.bool = TRUE)
  expect_warning(expect_equal(x | x, xval | xval))
  expect_silent(expect_equal(x | x, xval | xval))
  options(errors.warn.bool = TRUE)
  expect_warning(expect_equal(x == x, xval == xval))
  expect_silent(expect_equal(x == x, xval == xval))
  options(errors.warn.bool = TRUE)
  expect_warning(expect_equal(x != x, xval != xval))
  expect_silent(expect_equal(x != x, xval != xval))
  options(errors.warn.bool = TRUE)
  expect_warning(expect_equal(x < x, xval < xval))
  expect_silent(expect_equal(x < x, xval < xval))
  options(errors.warn.bool = TRUE)
  expect_warning(expect_equal(x > x, xval > xval))
  expect_silent(expect_equal(x > x, xval > xval))
  options(errors.warn.bool = TRUE)
  expect_warning(expect_equal(x <= x, xval <= xval))
  expect_silent(expect_equal(x <= x, xval <= xval))
  options(errors.warn.bool = TRUE)
  expect_warning(expect_equal(x >= x, xval >= xval))
  expect_silent(expect_equal(x >= x, xval >= xval))
})

test_that("ops with numerics throw a warning", {
  x <- set_errors(1, 1)

  expect_warning(1 + x)
  expect_silent(1 + x)
  options(errors.warn.coercion = TRUE)
  expect_warning(x + 1)
  expect_silent(x + 1)
})

test_that("ops work properly", {
  xval <- -4.1:5.1
  xerr <- seq(0.005, 0.05, 0.005)
  x <- set_errors(xval, xerr)
  y <- set_errors(xval, xerr)

  expect_equal(+x, x)
  expect_equal(x + set_errors(1), set_errors(xval + 1, xerr))
  expect_equal(x + x, set_errors(2) * x)
  test_expr(x + x)
  test_expr(x + y)
  expect_equal(-x, set_errors(-xval, xerr))
  expect_equal(x - set_errors(1), set_errors(xval - 1, xerr))
  expect_equal(x - x, set_errors(0) * x)
  test_expr(x - x)
  test_expr(x - y)
  expect_equal(set_errors(2) * x, set_errors(2 * xval, 2 * xerr))
  expect_equal(x * x, x^set_errors(2))
  test_expr(x * x)
  test_expr(x * y)
  expect_equal(x / set_errors(2), set_errors(xval / 2, xerr / 2))
  expect_equal(x / x, set_errors(rep(1, length(x))))
  test_expr(x / x)
  test_expr(x / y)
  expect_equal(as.numeric((x+5)^x), (xval+5)^xval)
  test_expr((x+5)^x)
  test_expr((x+5)^y)
  div <- x / set_errors(3)
  err <- abs(drop_errors(div) - round(xval/3)) + errors(div)
  expect_equal(x %/% set_errors(3), set_errors(round(xval/3), err))
  #expect_warning(expect_equal(x %*% x, xval %*% xval))
})
Enchufa2/errors documentation built on Dec. 11, 2023, 2:30 a.m.