Fix rvar subtraction, convert tests to rackunit
This commit is contained in:
parent
14d6b476bd
commit
e4d469ea95
1
rvar.rkt
1
rvar.rkt
|
|
@ -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)])
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
(let ([env `((a . 1) (b . 2))])
|
(test-suite
|
||||||
(interp-exp env (Var 'a)))
|
"RVar interpretation testsuite"
|
||||||
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 (Var 'a)))
|
||||||
4)
|
1)
|
||||||
|
|
||||||
(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 '+ (list (Var 'a) (Int 3)))))
|
||||||
-3)
|
4)
|
||||||
|
|
||||||
(test-eq
|
(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 '- `(,(Int 3)))))
|
||||||
-1)
|
-3)
|
||||||
|
|
||||||
(test-eq
|
(check-equal?
|
||||||
(interp-exp `() (Let 'a
|
(let ([env `((a . 1))])
|
||||||
(Prim '+ (list (Int 1) (Int 2)))
|
(interp-exp env (Prim '- (list (Int 3) (Var 'a)))))
|
||||||
(Prim '+ (list (Var 'a) (Int 3)))))
|
2)
|
||||||
6)
|
|
||||||
|
|
||||||
(test-eq
|
(check-equal?
|
||||||
(interp-RVar (Program `() (Let 'a
|
(let ([env `((a . 1) (b . 2))])
|
||||||
(Prim '+ (list (Int 1) (Int 2)))
|
(interp-exp env (Prim '+ (list (Var 'a) (Prim `- (list (Var 'b)))))))
|
||||||
(Prim '+ (list (Var 'a) (Int 3))))))
|
-1)
|
||||||
6)
|
|
||||||
|
(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)))
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue