tests/testthat/test-math.R

test_that("math operations", {

  # The first 2 will not trigger multi-threaded calculations
  make_test_data1 <- function(){
    with_local_seed({
    assign("x", na_insert(rnorm(10^3), 50),
           envir = parent.frame())
    }, 3742)
  }
  make_test_data2 <- function(){
    with_local_seed({
    assign("x", na_insert(sample.int(100, 10^3, TRUE), 50),
           envir = parent.frame())
    }, 3742)
  }
  make_test_data3 <- function(){
    with_local_seed({
    assign("x", na_insert(rnorm(10^5), 10^3),
           envir = parent.frame())
    }, 3742)
  }
  make_test_data4 <- function(){
    with_local_seed({
    assign("x", val_insert(val_insert(na_insert(sample.int(100, 10^5, TRUE), 10^3),
                                      NaN, n = 10^3),
                           Inf, n = 10^3),
           envir = parent.frame())
    }, 3742)
  }

  expect_error(abs_(iris))
  expect_error(floor_(iris))
  expect_error(ceiling_(iris))
  expect_error(trunc_(iris))
  expect_error(log_(iris))
  expect_error(exp_(iris))
  expect_error(sqrt_(iris))
  expect_error(round_(iris))

  make_test_data1()
  expect_equal(
    base::round(x, 2),
    round_(x, 2)
  )
  expect_equal(
    base::round(x),
    round_(x)
  )
  expect_equal(base::round(x, 1), round_(x, 1))

  expect_equal(abs(x), abs_(x))

  expect_identical(floor(x), floor_(x))

  expect_identical(ceiling(x), ceiling_(x))

  expect_identical(base::trunc(x), trunc_(x))

  expect_equal(exp(x), exp_(x))

  expect_equal(log(abs(x)), log_(abs_(x)))

  expect_equal(log10(abs(x)), log_(abs_(x), base = 10))

  expect_equal(sqrt(abs(x)), sqrt_(abs_(x)))

  expect_equal(-x, negate_(x))


  make_test_data2()
  expect_equal(base::round(x, 1), round_(x, 1))

  expect_equal(abs(x), abs_(x))

  expect_equal(floor(x), floor_(x))

  expect_equal(ceiling(x), ceiling_(x))

  expect_equal(base::trunc(x), trunc_(x))

  expect_equal(exp(x), exp_(x))

  expect_equal(log(abs(x)), log_(abs_(x)))

  expect_equal(log10(abs(x)), log_(abs_(x), base = 10))

  expect_equal(sqrt(abs(x)), sqrt_(abs_(x)))

  expect_equal(-x, negate_(x))

  make_test_data3()
  expect_equal(base::round(x, 1), round_(x, 1))

  expect_equal(abs(x), abs_(x))

  expect_equal(floor(x), floor_(x))

  expect_equal(ceiling(x), ceiling_(x))

  expect_equal(base::trunc(x), trunc_(x))

  expect_equal(exp(x), exp_(x))

  expect_equal(log(abs(x)), log_(abs_(x)))

  expect_equal(log10(abs(x)), log_(abs_(x), base = 10))

  expect_equal(sqrt(abs(x)), sqrt_(abs_(x)))

  expect_equal(-x, negate_(x))

  make_test_data4()
  expect_equal(base::round(x, 1),round_(x, 1))

  expect_equal(abs(x), abs_(x))

  expect_equal(floor(x), floor_(x))

  expect_equal(ceiling(x), ceiling_(x))

  expect_equal(base::trunc(x), trunc_(x))

  expect_equal(exp(x), exp_(x))

  expect_equal(log(abs(x)), log_(abs_(x)))

  expect_equal(log10(abs(x)), log_(abs_(x), base = 10))

  expect_equal(sqrt(abs(x)), sqrt_(abs_(x)))

  expect_equal(-x, negate_(x))
})

test_that("more math operations", {

  make_test_data1 <- function(){
    with_local_seed({
    assign("x", na_insert(rnorm(10^3), 50),
           envir = parent.frame())
    assign("y", c(0L, NA_integer_, 3:10), envir = parent.frame())
    assign("z", sample(c(Inf, -Inf, NA_real_, sequence_(100 - 3, 0, 0.1))),
           envir = parent.frame())
    }, 3742)
  }
  make_test_data2 <- function(){
    with_local_seed({
    assign("x", na_insert(sample.int(100, 10^3, TRUE), 50),
           envir = parent.frame())
    assign("y", c(0L, NA_integer_, 3:10), envir = parent.frame())
    assign("z", sample(c(Inf, -Inf, NA_real_, sequence_(100 - 3, 0, 0.1))),
           envir = parent.frame())
    }, 3742)
  }
  make_test_data3 <- function(){
    with_local_seed({
    assign("x", na_insert(rnorm(10^5), 10^3),
           envir = parent.frame())
    assign("y", c(0L, NA_integer_, 3:10), envir = parent.frame())
    assign("z", sample(c(Inf, -Inf, NA_real_, sequence_(1000 - 3, 0, 0.1))),
           envir = parent.frame())
    }, 3742)
  }
  make_test_data4 <- function(){
    with_local_seed({
    assign("x", na_insert(sample.int(100, 10^5, TRUE), 10^3),
           envir = parent.frame())
    assign("y", c(0L, NA_integer_, 3:10), envir = parent.frame())
    assign("z", sample(c(Inf, -Inf, NA_real_, NaN, sequence_(1000 - 4, 0, 0.1))),
           envir = parent.frame())
    }, 3742)
  }

  expect_error(add_(iris))
  expect_error(subtract_(iris))
  expect_error(multiply_(iris))
  expect_error(divide_(iris))

  make_test_data1()
  expect_equal(
    x + y,
    add_(x, y)
  )
  expect_equal(
    x + z,
    add_(x, z)
  )
  expect_equal(
    x - y,
    subtract_(x, y)
  )
  expect_equal(
    x - z,
    subtract_(x, z)
  )
  expect_equal(
    x * y,
    multiply_(x, y)
  )
  expect_equal(
    x * z,
    multiply_(x, z)
  )
  expect_equal(
    x / y,
    divide_(x, y)
  )
  expect_equal(
    x / z,
    divide_(x, z)
  )
  expect_equal(
    x^y,
    pow_(x, y)
  )
  expect_equal(
    base::round(x, y),
    round_(x, y)
  )
  expect_equal(
    suppressWarnings(log(x, base = y)),
    log_(x, y)
  )
  expect_equal(
    suppressWarnings(log(x, base = z)),
    log_(x, z)
  )

  make_test_data2()
  expect_equal(
    x + y,
    add_(x, y)
  )
  expect_equal(
    x + z,
    add_(x, z)
  )
  expect_equal(
    x - y,
    subtract_(x, y)
  )
  expect_equal(
    x - z,
    subtract_(x, z)
  )
  expect_equal(
    x * y,
    multiply_(x, y)
  )
  expect_equal(
    x * z,
    multiply_(x, z)
  )
  expect_equal(
    x / y,
    divide_(x, y)
  )
  expect_equal(
    x / z,
    divide_(x, z)
  )
  expect_equal(
    x^y,
    pow_(x, y)
  )
  expect_equal(
    x,
    # base::round(x, y),
    round_(x, y)
  )
  expect_equal(
    suppressWarnings(log(x, base = y)),
    log_(x, y)
  )

  make_test_data3()
  expect_equal(
    x + y,
    add_(x, y)
  )
  expect_equal(
    x + z,
    add_(x, z)
  )
  expect_equal(
    x - y,
    subtract_(x, y)
  )
  expect_equal(
    x - z,
    subtract_(x, z)
  )
  expect_equal(
    x * y,
    multiply_(x, y)
  )
  expect_equal(
    x * z,
    multiply_(x, z)
  )
  expect_equal(
    x / y,
    divide_(x, y)
  )
  expect_equal(
    x^y,
    pow_(x, y)
  )
  expect_equal(
    base::round(x, y),
    round_(x, y)
  )
  expect_equal(
    suppressWarnings(log(x, base = y)),
    suppressWarnings(log_(x, y))
  )

  make_test_data4()
  expect_equal(
    x + y,
    add_(x, y)
  )
  expect_equal(
    x + z,
    add_(x, z)
  )
  expect_equal(
    x - y,
    subtract_(x, y)
  )
  expect_equal(
    x - z,
    subtract_(x, z)
  )
  expect_equal(
    x * y,
    multiply_(x, y)
  )
  expect_equal(
    x * z,
    multiply_(x, z)
  )
  expect_equal(
    x / y,
    divide_(x, y)
  )
  expect_equal(
    x / z,
    divide_(x, z)
  )
  expect_equal(
    x^y,
    pow_(x, y)
  )
  expect_equal(
    # base::round(x, y),
    x,
    round_(x, y)
  )
  expect_equal(
    suppressWarnings(log(x, base = y)),
    log_(x, y)
  )
})

test_that("zero-length vectors", {
  x <- 1
  y <- numeric()

  expect_identical(add_(x, y), numeric())
  expect_identical(subtract_(x, y), numeric())
  expect_identical(divide_(x, y), numeric())
  expect_identical(multiply_(x, y), numeric())
  expect_identical(log_(x, y), numeric())
  expect_identical(pow_(x, y), numeric())
  expect_identical(round_(x, y), numeric())

  expect_identical(add_(y, x), numeric())
  expect_identical(subtract_(y, x), numeric())
  expect_identical(divide_(y, x), numeric())
  expect_identical(multiply_(y, x), numeric())
  expect_identical(log_(y, x), numeric())
  expect_identical(pow_(y, x), numeric())
  expect_identical(round_(y, x), numeric())

  x <- 1L
  y <- integer()

  expect_identical(add_(x, y), integer())
  expect_identical(subtract_(x, y), integer())
  expect_identical(divide_(as.double(x), y), numeric())
  expect_identical(multiply_(x, y), integer())
  expect_identical(log_(as.double(x), y), numeric())
  expect_identical(pow_(as.double(x), y), numeric())
  expect_identical(round_(x, y), integer())

  expect_identical(add_(y, x), integer())
  expect_identical(subtract_(y, x), integer())
  expect_identical(divide_(as.double(y), x), numeric())
  expect_identical(multiply_(y, x), integer())
  expect_identical(log_(as.double(y), x), numeric())
  expect_identical(pow_(as.double(y), x), numeric())
  expect_identical(round_(y, x), integer())
})

Try the cheapr package in your browser

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

cheapr documentation built on Jan. 8, 2026, 5:09 p.m.