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))