-
Notifications
You must be signed in to change notification settings - Fork 4
/
gen.scala
36 lines (29 loc) · 881 Bytes
/
gen.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package scala.lms.black
import eval._
import repl._
import org.scalatest.BeforeAndAfter
class TestGen extends TestSuite with BeforeAndAfter {
val under = ""
before {
clean()
}
def genfib(fn: String) = {
ev("(define fib (lambda (n) (if (< n 2) n (+ (fib (- n 1)) (fib (- n 2))))))")
checkOut(fn,
ev("(set! fib (clambda (n) (if (< n 2) n (+ (fib (- n 1)) (fib (- n 2))))))"))
checkOut(fn,
println(printer.summarize(ev("fib").asInstanceOf[Evalfun])),
suffix = "txt")
}
test("code generation for fib") {
genfib("fib")
}
test("code generation for fib under var counter") {
ev("(EM (define counter 0))")
ev("(EM (define old-eval-var eval-var))")
ev("""(EM (set! eval-var (clambda (e r k)
(if (eq? e 'n) (set! counter (+ counter 1)) 0)
(old-eval-var e r k))))""")
genfib("fib_em_var_counter")
}
}