context("opt")
test_that("static_eval completely evaluates numeric expressions", {
expect_equal(static_eval(quote(1 + 2)), 3)
expect_equal(static_eval(quote(1 + 2 + 3)), 6)
expect_equal(static_eval(quote(1 + 2 * 3)), 7)
expect_equal(static_eval(quote(1 + (2) + 3)), 6)
expect_equal(static_eval(quote((1 + 2) * 3)), 9)
})
test_that("static_eval collects numbers up associatively", {
expect_equal(static_eval(quote(a + 3 + 2)), quote(a + 5))
expect_equal(static_eval(quote(3 + a + 2)), quote(a + 5))
expect_equal(static_eval(quote(3 + 2 + a)), quote(a + 5))
expect_equal(static_eval(quote(a * 3 * 2)), quote(a * 6))
expect_equal(static_eval(quote(3 * a * 2)), quote(a * 6))
expect_equal(static_eval(quote(3 * 2 * a)), quote(a * 6))
expect_equal(static_eval(quote(a + 1 + b + 2 + c + 3)),
quote(a + b + c + 6))
})
test_that("static_eval removes superfluous parens", {
expect_equal(static_eval(quote(1 + (a + 2))), quote(a + 3))
expect_equal(static_eval(quote(1 + (a + 2) + 3)), quote(a + 6))
})
test_that("More complex examples", {
expect_equal(static_eval(quote((a + 2 * 3) + 4 * 5)),
quote(a + 26))
expect_equal(static_eval(quote((a + 2 * 3) + 4 * b)),
quote(b * 4 + a + 6))
expect_equal(static_eval(quote((1 + 4) * (b + 3))),
quote((b + 3) * 5))
})
test_that("sort expressions", {
expect_equal(
static_eval(quote(a + 1 + b + 2)),
quote(a + b + 3))
expect_equal(
static_eval(quote(1 + b + a + 2)),
quote(a + b + 3))
expect_equal(
static_eval(quote(1 + b + a + 2 + x * y)),
quote(x * y + a + b + 3))
})
test_that("Addition of zero is a noop", {
expect_equal(static_eval(quote(a + 0)), quote(a))
expect_equal(static_eval(quote(a + 0 + b)), quote(a + b))
})
test_that("Multiplication by one is a noop", {
expect_equal(static_eval(quote(a * 1)), quote(a))
expect_equal(static_eval(quote(a * 1 * b)), quote(a * b))
})
test_that("Multiplication by zero is catatrophic", {
expect_equal(static_eval(quote(a * 0)), 0)
expect_equal(static_eval(quote(a * 0 * b)), 0)
})
test_that("Can evaluate very long expressions", {
v <- sprintf("x%d", seq_len(200))
e <- parse(text = paste(v, collapse = " + "))[[1]]
expect_equal(
static_eval(e),
r_fold_call("+", lapply(sort(v), as.name)))
})
test_that("Can collect linear combinations", {
expect_equal(
static_eval(quote(a + b + a + b + a + 4)),
quote(a * 3 + b * 2 + 4))
## This is something to pick up later
expect_equal(
static_eval(quote(a + 1 * (a + a))),
quote(a * 2 + a))
})
test_that("cope with adding zeros", {
expect_equal(
static_eval(quote(0 + 0)),
0)
expect_equal(
static_eval(quote(0 * x + 1 * 0)),
0)
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.