66 lines
3.0 KiB
R
66 lines
3.0 KiB
R
|
|
||
|
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))
|