#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))))