40 lines
888 B
Racket
40 lines
888 B
Racket
#lang racket
|
|
|
|
(require "test-util.rkt")
|
|
(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)
|
|
|
|
(test-eq
|
|
(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 '- `(,(Int 3)))))
|
|
-3)
|
|
|
|
(test-eq
|
|
(let ([env `((a . 1) (b . 2))])
|
|
(interp-exp env (Prim '+ (list (Var 'a) (Prim `- (list (Var 'b)))))))
|
|
-1)
|
|
|
|
(test-eq
|
|
(interp-exp `() (Let 'a
|
|
(Prim '+ (list (Int 1) (Int 2)))
|
|
(Prim '+ (list (Var 'a) (Int 3)))))
|
|
6)
|
|
|
|
(test-eq
|
|
(interp-RVar (Program `() (Let 'a
|
|
(Prim '+ (list (Int 1) (Int 2)))
|
|
(Prim '+ (list (Var 'a) (Int 3))))))
|
|
6)
|