eoc/test-remove-complex-opera.scm

63 lines
1.7 KiB
Scheme

#lang racket
(require "test-util.scm")
(require "remove-complex-oper.scm")
(require "c2.scm")
(define programs
(list
`(program ()
(- 20))
`(program () (+ 3 (- 20)))
`(program () (+ (+ 3 2) (+ 4 5)))
`(program () (let ([x (+ (- 2) 3)]) (+ x (+ 2 3))))
`(program () (+ (let ([x (+ (- 1) 2)]) (+ x 2)) (+ 4 5)))
`(program ()
(let ([a 42])
(let ([b a])
b)))
`(program () (let ([tmp (- 1)]) tmp))))
(test-eq
(remove-complex-opera* (list-ref programs 0))
`(program () (- 20)))
(test-eq
(remove-complex-opera* (list-ref programs 1))
`(program () (let ((tmp.1 (- 20))) (+ 3 tmp.1))))
(test-eq
(remove-complex-opera* (list-ref programs 2))
`(program () (let ((tmp.1 (+ 3 2))) (let ((tmp.2 (+ 4 5))) (+ tmp.1 tmp.2)))))
(test-eq
(remove-complex-opera* (list-ref programs 3))
`(program ()
(let ((tmp.1 (+ (- 2) 3)))
(let ((x.1 tmp.1))
(let ((tmp.2 (+ 2 3)))
(+ x.1 tmp.2))))))
(test-eq
(remove-complex-opera* (list-ref programs 4))
`(program ()
(let ((tmp.2
(let ((x.1
(let ((tmp.1 (- 1)))
(+ tmp.1 2))))
(+ x.1 2))))
(let ((tmp.3 (+ 4 5)))
(+ tmp.2 tmp.3)))))
(test-eq
(remove-complex-opera* (list-ref programs 5))
`(program () (let([a.1 42]) (let ([b.1 a.1]) b.1))))
(test-eq
(remove-complex-opera* (list-ref programs 6))
`(program () (let ((tmp.2 (- 1))) (let ((tmp.1 tmp.2)) tmp.1))))
(for/list ([program programs] [env (build-list (length programs) (lambda (_) '()))])
(test-eq ((interp-R1 env) program)
((interp-R1 env) (remove-complex-opera* program))))