blob: cfa8cbd6e132d1d503c979e6b2e01521bdc8ee41 [file] [log] [blame]
library(compiler)
##
## Test code for constant folding
##
makeCenv <- compiler:::makeCenv
checkConst <- compiler:::checkConst
constantFoldSym <- compiler:::constantFoldSym
constantFold <- compiler:::constantFold
## using a global environment
ce <- makeCenv(.GlobalEnv)
stopifnot(identical(constantFoldSym(quote(pi), list(env = ce, optimize = 3)),
checkConst(base::pi)))
stopifnot(identical(constantFoldSym(quote(pi), list(env = ce, optimize = 2)),
NULL))
stopifnot(identical(constantFoldSym(quote(pi), list(env = ce, optimize = 1)),
NULL))
stopifnot(identical(constantFoldSym(quote(pi), list(env = ce, optimize = 0)),
NULL))
stopifnot(identical(constantFold(quote(1 + 2), list(optimize = 3, env = ce)),
checkConst(1 + 2)))
stopifnot(identical(constantFold(quote(1 + 2), list(optimize = 2, env = ce)),
checkConst(1 + 2)))
stopifnot(identical(constantFold(quote(1 + 2), list(optimize = 1, env = ce)),
NULL))
stopifnot(identical(constantFold(quote(1 + 2), list(optimize = 0, env = ce)),
NULL))
stopifnot(identical(constantFold(quote(sqrt(2)), list(optimize = 3, env = ce)),
checkConst(sqrt(2))))
stopifnot(identical(constantFold(quote(sqrt(2)), list(optimize = 2, env = ce)),
NULL))
stopifnot(identical(constantFold(quote(sqrt(2)), list(optimize = 1, env = ce)),
NULL))
stopifnot(identical(constantFold(quote(sqrt(2)), list(optimize = 0, env = ce)),
NULL))
## using a namespace environment
ce <- makeCenv(getNamespace("stats"))
stopifnot(identical(constantFoldSym(quote(pi), list(env = ce, optimize = 3)),
list(value = base::pi)))
stopifnot(identical(constantFoldSym(quote(pi), list(env = ce, optimize = 2)),
list(value = base::pi)))
stopifnot(identical(constantFoldSym(quote(pi), list(env = ce, optimize = 1)),
checkConst(base::pi)))
stopifnot(identical(constantFoldSym(quote(pi), list(env = ce, optimize = 0)),
NULL))
stopifnot(identical(constantFold(quote(1 + 2), list(optimize = 3, env = ce)),
checkConst(1 + 2)))
stopifnot(identical(constantFold(quote(1 + 2), list(optimize = 2, env = ce)),
checkConst(1 + 2)))
stopifnot(identical(constantFold(quote(1 + 2), list(optimize = 1, env = ce)),
checkConst(1 + 2)))
stopifnot(identical(constantFold(quote(1 + 2), list(optimize = 0, env = ce)),
NULL))
stopifnot(identical(constantFold(quote(sqrt(2)), list(optimize = 3, env = ce)),
checkConst(sqrt(2))))
stopifnot(identical(constantFold(quote(sqrt(2)), list(optimize = 2, env = ce)),
checkConst(sqrt(2))))
stopifnot(identical(constantFold(quote(sqrt(2)), list(optimize = 1, env = ce)),
checkConst(sqrt(2))))
stopifnot(identical(constantFold(quote(sqrt(2)), list(optimize = 0, env = ce)),
NULL))