Fix rvar subtraction, convert tests to rackunit

This commit is contained in:
Enrico Lumetti 2022-08-10 23:33:20 +02:00
parent 14d6b476bd
commit e4d469ea95
2 changed files with 39 additions and 27 deletions

View File

@ -23,6 +23,7 @@
[(Var name) (eval-symbol env name)] [(Var name) (eval-symbol env name)]
[(Prim 'read '()) (read-fixnum)] [(Prim 'read '()) (read-fixnum)]
[(Prim '- (list e)) (fx- 0 ((interp-exp env) e))] [(Prim '- (list e)) (fx- 0 ((interp-exp env) e))]
[(Prim '- `(,e1 ,e2)) (fx- ((interp-exp env) e1) ((interp-exp env) e2))]
[(Prim '+ `(,e1 ,e2)) (fx+ ((interp-exp env) e1) ((interp-exp env) e2))] [(Prim '+ `(,e1 ,e2)) (fx+ ((interp-exp env) e1) ((interp-exp env) e2))]
[(Let var rexp body) [(Let var rexp body)
(let ([value ((interp-exp env) rexp)]) (let ([value ((interp-exp env) rexp)])

View File

@ -1,39 +1,50 @@
#lang racket #lang racket
(require "test-util.rkt") (provide test-rvar-tests)
(require rackunit)
(require "rvar.rkt") (require "rvar.rkt")
(define (interp-exp env e) (define (interp-exp env e)
((send (new interp-RVar-class) interp-exp env) e)) ((send (new interp-RVar-class) interp-exp env) e))
(test-eq (define test-rvar-tests
(test-suite
"RVar interpretation testsuite"
(check-equal?
(let ([env `((a . 1) (b . 2))]) (let ([env `((a . 1) (b . 2))])
(interp-exp env (Var 'a))) (interp-exp env (Var 'a)))
1) 1)
(test-eq (check-equal?
(let ([env `((a . 1) (b . 2))]) (let ([env `((a . 1) (b . 2))])
(interp-exp env (Prim '+ (list (Var 'a) (Int 3))))) (interp-exp env (Prim '+ (list (Var 'a) (Int 3)))))
4) 4)
(test-eq (check-equal?
(let ([env `((a . 1) (b . 2))]) (let ([env `((a . 1) (b . 2))])
(interp-exp env (Prim '- `(,(Int 3))))) (interp-exp env (Prim '- `(,(Int 3)))))
-3) -3)
(test-eq (check-equal?
(let ([env `((a . 1))])
(interp-exp env (Prim '- (list (Int 3) (Var 'a)))))
2)
(check-equal?
(let ([env `((a . 1) (b . 2))]) (let ([env `((a . 1) (b . 2))])
(interp-exp env (Prim '+ (list (Var 'a) (Prim `- (list (Var 'b))))))) (interp-exp env (Prim '+ (list (Var 'a) (Prim `- (list (Var 'b)))))))
-1) -1)
(test-eq (check-equal?
(interp-exp `() (Let 'a (interp-exp `() (Let 'a
(Prim '+ (list (Int 1) (Int 2))) (Prim '+ (list (Int 1) (Int 2)))
(Prim '+ (list (Var 'a) (Int 3))))) (Prim '+ (list (Var 'a) (Int 3)))))
6) 6)
(test-eq (check-equal?
(interp-RVar (Program `() (Let 'a (interp-RVar (Program `() (Let 'a
(Prim '+ (list (Int 1) (Int 2))) (Prim '+ (list (Int 1) (Int 2)))
(Prim '+ (list (Var 'a) (Int 3)))))) (Prim '+ (list (Var 'a) (Int 3))))))
6) 6)))