From e4d469ea951eba9525f3bd9231429d05b3d6a10d Mon Sep 17 00:00:00 2001 From: Enrico Lumetti Date: Wed, 10 Aug 2022 23:33:20 +0200 Subject: [PATCH] Fix rvar subtraction, convert tests to rackunit --- rvar.rkt | 1 + test-rvar.rkt | 65 ++++++++++++++++++++++++++++++--------------------- 2 files changed, 39 insertions(+), 27 deletions(-) diff --git a/rvar.rkt b/rvar.rkt index 121d85d..f837169 100644 --- a/rvar.rkt +++ b/rvar.rkt @@ -23,6 +23,7 @@ [(Var name) (eval-symbol env name)] [(Prim 'read '()) (read-fixnum)] [(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))] [(Let var rexp body) (let ([value ((interp-exp env) rexp)]) diff --git a/test-rvar.rkt b/test-rvar.rkt index 539ecdd..90a198b 100644 --- a/test-rvar.rkt +++ b/test-rvar.rkt @@ -1,39 +1,50 @@ #lang racket -(require "test-util.rkt") +(provide test-rvar-tests) + +(require rackunit) (require "rvar.rkt") (define (interp-exp env e) ((send (new interp-RVar-class) interp-exp env) e)) -(test-eq - (let ([env `((a . 1) (b . 2))]) - (interp-exp env (Var 'a))) - 1) +(define test-rvar-tests + (test-suite + "RVar interpretation testsuite" -(test-eq - (let ([env `((a . 1) (b . 2))]) - (interp-exp env (Prim '+ (list (Var 'a) (Int 3))))) - 4) + (check-equal? + (let ([env `((a . 1) (b . 2))]) + (interp-exp env (Var 'a))) + 1) -(test-eq - (let ([env `((a . 1) (b . 2))]) - (interp-exp env (Prim '- `(,(Int 3))))) - -3) + (check-equal? + (let ([env `((a . 1) (b . 2))]) + (interp-exp env (Prim '+ (list (Var 'a) (Int 3))))) + 4) -(test-eq - (let ([env `((a . 1) (b . 2))]) - (interp-exp env (Prim '+ (list (Var 'a) (Prim `- (list (Var 'b))))))) - -1) + (check-equal? + (let ([env `((a . 1) (b . 2))]) + (interp-exp env (Prim '- `(,(Int 3))))) + -3) -(test-eq - (interp-exp `() (Let 'a - (Prim '+ (list (Int 1) (Int 2))) - (Prim '+ (list (Var 'a) (Int 3))))) - 6) + (check-equal? + (let ([env `((a . 1))]) + (interp-exp env (Prim '- (list (Int 3) (Var 'a))))) + 2) -(test-eq - (interp-RVar (Program `() (Let 'a - (Prim '+ (list (Int 1) (Int 2))) - (Prim '+ (list (Var 'a) (Int 3)))))) - 6) + (check-equal? + (let ([env `((a . 1) (b . 2))]) + (interp-exp env (Prim '+ (list (Var 'a) (Prim `- (list (Var 'b))))))) + -1) + + (check-equal? + (interp-exp `() (Let 'a + (Prim '+ (list (Int 1) (Int 2))) + (Prim '+ (list (Var 'a) (Int 3))))) + 6) + + (check-equal? + (interp-RVar (Program `() (Let 'a + (Prim '+ (list (Int 1) (Int 2))) + (Prim '+ (list (Var 'a) (Int 3)))))) + 6)))