1 2library(compiler) 3 4## 5## Test code for constant folding 6## 7 8makeCenv <- compiler:::makeCenv 9checkConst <- compiler:::checkConst 10constantFoldSym <- compiler:::constantFoldSym 11constantFold <- compiler:::constantFold 12 13## using a global environment 14ce <- makeCenv(.GlobalEnv) 15stopifnot(identical(constantFoldSym(quote(pi), list(env = ce, optimize = 3)), 16 checkConst(base::pi))) 17stopifnot(identical(constantFoldSym(quote(pi), list(env = ce, optimize = 2)), 18 NULL)) 19stopifnot(identical(constantFoldSym(quote(pi), list(env = ce, optimize = 1)), 20 NULL)) 21stopifnot(identical(constantFoldSym(quote(pi), list(env = ce, optimize = 0)), 22 NULL)) 23stopifnot(identical(constantFold(quote(1 + 2), list(optimize = 3, env = ce)), 24 checkConst(1 + 2))) 25stopifnot(identical(constantFold(quote(1 + 2), list(optimize = 2, env = ce)), 26 checkConst(1 + 2))) 27stopifnot(identical(constantFold(quote(1 + 2), list(optimize = 1, env = ce)), 28 NULL)) 29stopifnot(identical(constantFold(quote(1 + 2), list(optimize = 0, env = ce)), 30 NULL)) 31stopifnot(identical(constantFold(quote(sqrt(2)), list(optimize = 3, env = ce)), 32 checkConst(sqrt(2)))) 33stopifnot(identical(constantFold(quote(sqrt(2)), list(optimize = 2, env = ce)), 34 NULL)) 35stopifnot(identical(constantFold(quote(sqrt(2)), list(optimize = 1, env = ce)), 36 NULL)) 37stopifnot(identical(constantFold(quote(sqrt(2)), list(optimize = 0, env = ce)), 38 NULL)) 39 40## using a namespace environment 41ce <- makeCenv(getNamespace("stats")) 42stopifnot(identical(constantFoldSym(quote(pi), list(env = ce, optimize = 3)), 43 list(value = base::pi))) 44stopifnot(identical(constantFoldSym(quote(pi), list(env = ce, optimize = 2)), 45 list(value = base::pi))) 46stopifnot(identical(constantFoldSym(quote(pi), list(env = ce, optimize = 1)), 47 checkConst(base::pi))) 48stopifnot(identical(constantFoldSym(quote(pi), list(env = ce, optimize = 0)), 49 NULL)) 50stopifnot(identical(constantFold(quote(1 + 2), list(optimize = 3, env = ce)), 51 checkConst(1 + 2))) 52stopifnot(identical(constantFold(quote(1 + 2), list(optimize = 2, env = ce)), 53 checkConst(1 + 2))) 54stopifnot(identical(constantFold(quote(1 + 2), list(optimize = 1, env = ce)), 55 checkConst(1 + 2))) 56stopifnot(identical(constantFold(quote(1 + 2), list(optimize = 0, env = ce)), 57 NULL)) 58stopifnot(identical(constantFold(quote(sqrt(2)), list(optimize = 3, env = ce)), 59 checkConst(sqrt(2)))) 60stopifnot(identical(constantFold(quote(sqrt(2)), list(optimize = 2, env = ce)), 61 checkConst(sqrt(2)))) 62stopifnot(identical(constantFold(quote(sqrt(2)), list(optimize = 1, env = ce)), 63 checkConst(sqrt(2)))) 64stopifnot(identical(constantFold(quote(sqrt(2)), list(optimize = 0, env = ce)), 65 NULL)) 66