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