eoc/test-explicate-control.scm

65 lines
1.5 KiB
Scheme

#lang racket
(require "test-util.scm")
(require "remove-complex-oper.scm")
(require "explicate-control.scm")
(require "c2.scm")
(define programs
(list
`(program () (+ 2 3))
`(program () (+ (- 2) 3))
`(program ()
(let ([y (let ([x 20])
(+ x (let ([x 22]) x)))]) y))
`(program ()
(let ([a 42])
(let ([b a])
b)))
`(program () (+ (let ([x (+ (- 1) 2)]) (+ x 2)) (+ 4 5)))))
(define (pass program) (explicate-control (remove-complex-opera* program)))
(test-eq
(pass (list-ref programs 0))
`(program ()
((start .
(return (+ 2 3))))))
(test-eq
(pass (list-ref programs 1))
`(program ()
((start .
(seq (assign tmp.1 (- 2))
(return (+ tmp.1 3)))))))
(test-eq
(pass (list-ref programs 2))
`(program ()
((start .
(seq (assign x.1 20)
(seq (assign x.2 22)
(seq (assign y.1 (+ x.1 x.2))
(return y.1))))))))
(test-eq
(pass (list-ref programs 3))
`(program ()
((start .
(seq (assign a.1 42)
(seq (assign b.1 a.1)
(return b.1)))))))
(test-eq
(pass (list-ref programs 4))
`(program ()
((start .
(seq (assign tmp.1 (- 1))
(seq (assign x.1 (+ tmp.1 2))
(seq (assign tmp.2 (+ x.1 2))
(seq (assign tmp.3 (+ 4 5))
(return (+ tmp.2 tmp.3))))))))))