Ejemplo n.º 1
0
def test_begin():
    vm = schemepy.VM()
    w_global = vm.toscheme(0)
    vm.define("var", w_global)
    w_result = vm.eval(vm.compile("(begin (set! var 11) (+ var 33))"))
    assert vm.fromscheme(w_result) == 44
    assert vm.fromscheme(vm.get("var")) == 11
Ejemplo n.º 2
0
def test_sete():
    vm = schemepy.VM()
    vm.eval(vm.compile("(define x 42)"))
    vm.eval(vm.compile("(set! x 43)"))
    assert vm.fromscheme(vm.get("x")) == 43
    assert_raises(ScmUnboundVariable, lambda x: vm.eval(vm.compile(x)),
                  "(set! y 42)")
Ejemplo n.º 3
0
def test_comparison_homonums():
    vm = schemepy.VM()

    w_bool = vm.eval(vm.compile("(=)"))
    assert vm.fromscheme(w_bool) is True

    w_bool = vm.eval(vm.compile("(= 1)"))
    assert vm.fromscheme(w_bool) is True

    w_bool = vm.eval(vm.compile("(= 1 2)"))
    assert vm.fromscheme(w_bool) is False

    w_bool = vm.eval(vm.compile("(= 2 2)"))
    assert vm.fromscheme(w_bool) is True

    w_bool = vm.eval(vm.compile("(= 2 2 2 2)"))
    assert vm.fromscheme(w_bool) is True

    w_bool = vm.eval(vm.compile("(= 2 2 3 2)"))
    assert vm.fromscheme(w_bool) is False

    w_bool = vm.eval(vm.compile("(= 2.1 1.2)"))
    assert vm.fromscheme(w_bool) is False

    w_bool = vm.eval(vm.compile("(= 2.1 2.1)"))
    assert vm.fromscheme(w_bool) is True

    w_bool = vm.eval(vm.compile("(= 2.1 2.1 2.1 2.1)"))
    assert vm.fromscheme(w_bool) is True

    w_bool = vm.eval(vm.compile("(= 2.1 2.1 2.1 2)"))
    assert vm.fromscheme(w_bool) is False

    assert_raises(ScmWrongArgType, vm.eval, vm.compile("(= 'a 1)"))
Ejemplo n.º 4
0
def test_eq():
    vm = schemepy.VM()

    assert vm.fromscheme(vm.eval(vm.compile("(eq? #t #t)"))) is True
    assert vm.fromscheme(vm.eval(vm.compile("(eq? #f #f)"))) is True
    assert vm.fromscheme(vm.eval(vm.compile("(eq? 'symb 'symb)"))) is True
    assert vm.fromscheme(vm.eval(vm.compile("(eq? 'symb 'SYMB)"))) is False
    assert vm.fromscheme(vm.eval(vm.compile("(eq? '() '())"))) is True
    assert vm.fromscheme(
        vm.eval(
            vm.compile("""(let ((n 42))
                           (eq? n n))"""))) is True
    assert vm.fromscheme(
        vm.eval(
            vm.compile("""(let ((p (cons 1 2)))
                           (eq? p p))"""))) is True
    assert vm.fromscheme(
        vm.eval(
            vm.compile("""(let ((p (lambda (x) x)))
                           (eq? p p))"""))) is True

    assert vm.fromscheme(vm.eval(vm.compile("(eq? #t 'symb)"))) is False
    assert vm.fromscheme(vm.eval(vm.compile("(eq? #f 42)"))) is False
    assert vm.fromscheme(vm.eval(vm.compile("(eq? #t #f)"))) is False
    assert vm.fromscheme(vm.eval(vm.compile("(eq? 'symb1 'symb2)"))) is False
    assert vm.fromscheme(vm.eval(vm.compile("(eq? 42 43)"))) is False
    assert vm.fromscheme(vm.eval(vm.compile("(eq? 42.1 42.2)"))) is False
    assert vm.fromscheme(vm.eval(
        vm.compile("(eq? (cons 1 2) (cons 1 2))"))) is False
    assert vm.fromscheme(
        vm.eval(
            vm.compile("""(eq? (lambda () 1)
                               (lambda () 2))"""))) is False
Ejemplo n.º 5
0
def test_quasiquote_nested():
    sym = schemepy.types.Symbol
    vm = schemepy.VM()

    w_res = vm.eval(
        vm.compile("""
                (quasiquote
                    (a (quasiquote
                           (b (unquote (+ 1 2))
                              (unquote (foo
                                       (unquote (+ 1 3))
                                       d))
                                e))
                            f))"""))
    assert vm.fromscheme(w_res) == \
           [sym("a"), [sym("quasiquote"), [sym("b"), [sym("unquote"), [sym("+"), 1, 2]],
                                           [sym("unquote"), [sym("foo"), 4, sym("d")]],
                                           sym("e")]], sym("f")]

    w_res = vm.eval(
        vm.compile("""
                (let ((name1 'x)
                      (name2 'y))
                    (quasiquote (a
                                (quasiquote (b
                                             (unquote (unquote name1))
                                             (unquote (quote
                                                        (unquote name2)))
                                             d))
                                 e)))"""))
    assert vm.fromscheme(w_res) == \
           [sym("a"), [sym("quasiquote"), [sym("b"), [sym("unquote"), sym("x")],
                                           [sym("unquote"), [sym("quote"), sym("y")]],
                                           sym("d")]], sym("e")]
Ejemplo n.º 6
0
def test_lambda_long_body():
    vm = schemepy.VM()

    vm.eval(
        vm.compile("""(define long_body (lambda () (define x 42) (+ x 1)))"""))
    w_result = vm.eval(vm.compile("(long_body)"))
    assert vm.fromscheme(w_result) == 43
    assert vm.get("x", default="default-x") == "default-x"
Ejemplo n.º 7
0
def test_comparison_heteronums():
    vm = schemepy.VM()

    w_bool = vm.eval(vm.compile("(= 1 1.0 1.1)"))
    assert vm.fromscheme(w_bool) is False

    w_bool = vm.eval(vm.compile("(= 2.0 2 2.0)"))
    assert vm.fromscheme(w_bool) is True
Ejemplo n.º 8
0
def test_setcar():
    vm = schemepy.VM()
    w_pair = vm.eval(vm.compile("(define lst '(1 2 3 4))"))
    vm.eval(vm.compile("(set-car! lst 11)"))
    assert vm.fromscheme(vm.eval(vm.compile("(car lst)"))) == 11

    vm.eval(vm.compile("(set-car! (cdr lst) 12)"))
    assert vm.fromscheme(vm.eval(vm.compile("(car (cdr lst))"))) == 12
Ejemplo n.º 9
0
def test_lambda_dotted_lstarg():
    vm = schemepy.VM()
    w_result = vm.eval(vm.compile("""((lambda (x y . z) z) 3 4)"""))
    assert vm.fromscheme(w_result) == []

    w_result = vm.eval(vm.compile("""((lambda (x y . z) z) 3 4 5 6)"""))
    assert vm.type(w_result) is list
    assert vm.fromscheme(w_result) == [5, 6]
Ejemplo n.º 10
0
def test_lambda_noargs():
    vm = schemepy.VM()

    w_lambda = vm.eval(vm.compile("(lambda () 12)"))
    assert vm.type(w_lambda) is schemepy.types.Lambda

    vm.define("f1", w_lambda)
    w_result = vm.eval(vm.compile("(f1)"))
    assert vm.type(w_result) is int
    assert vm.fromscheme(w_result) == 12
Ejemplo n.º 11
0
def test_exactness():
    vm = schemepy.VM()

    assert vm.fromscheme(vm.eval(vm.compile("(exact? 42)")))
    assert not vm.fromscheme(vm.eval(vm.compile("(exact? 42.0)")))
    assert_raises(ScmWrongArgType, vm.eval, vm.compile("(exact? 'a)"))

    assert not vm.fromscheme(vm.eval(vm.compile("(inexact? 42)")))
    assert vm.fromscheme(vm.eval(vm.compile("(inexact? 42.0)")))
    assert_raises(ScmWrongArgType, vm.eval, vm.compile("(inexact? 'a)"))
Ejemplo n.º 12
0
def test_if_simple():
    vm = schemepy.VM()

    w_t = vm.eval(vm.compile("(if #t #t #f)"))
    assert vm.fromscheme(w_t) is True
    w_f = vm.eval(vm.compile("(if #f #t #f)"))
    assert vm.fromscheme(w_f) is False
    w_f = vm.eval(vm.compile("(if 1 #f #t)"))
    assert vm.fromscheme(w_f) is False
    w_f = vm.eval(vm.compile("(if #t #t)"))
    assert vm.fromscheme(w_f) is True
Ejemplo n.º 13
0
def test_lambda_context():
    vm = schemepy.VM()
    vm.eval(
        vm.compile("""
            (define b (lambda ()
                        (define a 12)
                        (define lam (lambda () (set! a 42)))
                        (lam)
                        a))
                        """))
    w_num = vm.eval(vm.compile("(b)"))
    assert vm.fromscheme(w_num) == 42
Ejemplo n.º 14
0
def test_ctx_simple():
    vm = schemepy.VM()

    vm.define("v1", vm.toscheme(4))
    vm.define("v2", vm.toscheme(5))

    w_num = vm.eval(vm.compile("(+ 1 v1 v2)"))
    assert vm.fromscheme(w_num) == 10

    vm.define("v2", vm.toscheme(3.2))
    w_num = vm.eval(vm.compile("(+ 1 v1 v2)"))
    assert vm.fromscheme(w_num) == 8.2
Ejemplo n.º 15
0
def test_lambda_args():
    vm = schemepy.VM()

    w_lam = vm.eval(vm.compile("(define f1 (lambda (n) n))"))

    w_result = vm.eval(vm.compile("(f1 42)"))
    assert vm.type(w_result) is int
    assert vm.fromscheme(w_result) == 42

    w_result = vm.eval(vm.compile("((lambda (n m) (+ n m)) 42 -42)"))
    assert vm.type(w_result) is int
    assert vm.fromscheme(w_result) == 0
Ejemplo n.º 16
0
def test_letstar():
    #test for (let* ...)
    vm = schemepy.VM()
    w_result = vm.eval(
        vm.compile("""
        (let* ((x 42)
                (y (- x 42))
                (z (+ x y)))
                z)"""))
    assert vm.fromscheme(w_result) == 42

    assert_raises(ScmUnboundVariable, lambda x: vm.eval(vm.compile(x)),
                  "(let* ((x (+ 1 y)) (y 0)) x)")
Ejemplo n.º 17
0
def test_deep_recursion():
    vm = schemepy.VM()
    vm.eval(vm.compile("(define a 0)"))
    vm.eval(
        vm.compile("""
        (define loop (lambda (n)
                        (set! a (+ a 1))
                        (if (= n 0)
                            n
                            (loop (- n 1)))))"""))

    vm.eval(vm.compile("(loop 2000)"))
    assert vm.fromscheme(vm.get("a")) == 2001
Ejemplo n.º 18
0
def test_lambda_top_ctx():
    vm = schemepy.VM()

    vm.eval(vm.compile("(define n 42)"))
    vm.eval(vm.compile("(define f1 (lambda (m) (+ n m)))"))
    w_result = vm.eval(vm.compile("(f1 -42)"))
    assert vm.type(w_result) is int
    assert vm.fromscheme(w_result) == 0

    vm.eval(vm.compile("(define n 84)"))
    w_result = vm.eval(vm.compile("(f1 -42)"))
    assert vm.type(w_result) is int
    assert vm.fromscheme(w_result) == 42
Ejemplo n.º 19
0
def test_cons_simple():
    vm = schemepy.VM()

    w_pair = vm.eval(vm.compile("(cons 1 2)"))
    assert vm.type(w_pair) is schemepy.types.Cons
    assert vm.fromscheme(w_pair).car == 1
    assert vm.fromscheme(w_pair).cdr == 2

    w_pair = vm.eval(vm.compile("(cons 1 (cons 2 3))"))
    assert vm.type(w_pair) is schemepy.types.Cons
    assert isinstance(vm.fromscheme(w_pair).cdr, schemepy.types.Cons)
    assert vm.fromscheme(w_pair).car == 1
    assert vm.fromscheme(w_pair).cdr.car == 2
    assert vm.fromscheme(w_pair).cdr.cdr == 3
Ejemplo n.º 20
0
def test_car_simple():
    vm = schemepy.VM()

    w_car = vm.eval(vm.compile("(car (cons 1 2))"))
    assert vm.fromscheme(w_car) == 1

    w_cdr = vm.eval(vm.compile("(cdr (cons 1 2))"))
    assert vm.fromscheme(w_cdr) == 2

    w_cadr = vm.eval(vm.compile("(car (cdr (cons 1 (cons 2 3))))"))
    assert vm.fromscheme(w_cadr) == 2

    w_cddr = vm.eval(vm.compile("(cdr (cdr (cons 1 (cons 2 3))))"))
    assert vm.fromscheme(w_cddr) == 3
Ejemplo n.º 21
0
def test_if_evaluation():
    print "This testcase will fail in mzscheme"
    vm = schemepy.VM()

    vm.eval(vm.compile("(define then #f)"))
    vm.eval(vm.compile("(define else #f)"))
    vm.eval(vm.compile("(if #t (define then #t) (define else #t))"))
    assert vm.fromscheme(vm.get("then")) is True
    assert vm.fromscheme(vm.get("else")) is False

    vm.eval(vm.compile("(define then #f)"))
    vm.eval(vm.compile("(define else #f)"))
    vm.eval(vm.compile("(if #f (define then #t) (define else #t))"))
    assert vm.fromscheme(vm.get("then")) is False
    assert vm.fromscheme(vm.get("else")) is True
Ejemplo n.º 22
0
def test_lambda2():
    vm = schemepy.VM()

    vm.eval(vm.compile("""(define adder (lambda (x) (lambda (y) (+ x y))))"""))
    w_lambda = vm.eval(vm.compile("(adder 6)"))
    assert vm.type(w_lambda) is schemepy.types.Lambda

    vm.eval(vm.compile("""(define add6 (adder 6))"""))
    w_result = vm.eval(vm.compile("(add6 5)"))
    assert vm.type(w_result) is int
    assert vm.fromscheme(w_result) == 11

    w_result = vm.eval(vm.compile("((adder 6) 5)"))
    assert vm.type(w_result) is int
    assert vm.fromscheme(w_result) == 11
Ejemplo n.º 23
0
def test_number_predicates():
    vm = schemepy.VM()

    assert vm.fromscheme(vm.eval(vm.compile("(zero? 0)")))
    assert vm.fromscheme(vm.eval(vm.compile("(zero? 0.0)")))
    assert not vm.fromscheme(vm.eval(vm.compile("(zero? 1.0)")))
    assert_raises(ScmWrongArgType, vm.eval, vm.compile("(zero? 'a)"))

    assert not vm.fromscheme(vm.eval(vm.compile("(odd? 0)")))
    assert vm.fromscheme(vm.eval(vm.compile("(odd? 1)")))
    assert_raises(ScmWrongArgType, vm.eval, vm.compile("(odd? 1.1)"))

    assert vm.fromscheme(vm.eval(vm.compile("(even? 0)")))
    assert not vm.fromscheme(vm.eval(vm.compile("(even? 1)")))
    assert_raises(ScmWrongArgType, vm.eval, vm.compile("(even? 1.1)"))
Ejemplo n.º 24
0
def test_lambda_fac():
    vm = schemepy.VM()

    vm.eval(
        vm.compile("""
        (define fac
            (lambda (n)
                (if (= n 1)
                    n
                    (* (fac (- n 1)) n))))"""))
    assert vm.type(vm.get("fac")) is schemepy.types.Lambda
    w_result = vm.eval(vm.compile("(fac 4)"))
    assert vm.fromscheme(w_result) == 24

    w_result = vm.eval(vm.compile("(fac 5)"))
    assert vm.fromscheme(w_result) == 120
Ejemplo n.º 25
0
def test_apply():
    vm = schemepy.VM()

    assert vm.fromscheme(vm.eval(vm.compile("(apply + (list 3 4))"))) == 7

    vm.eval(
        vm.compile("""(define compose
                    (lambda (f g)
                      (lambda args
                        (f (apply g args)))))"""))
    w_result = vm.eval(vm.compile("((compose (lambda (x) (* x x)) +) 3 5)"))
    assert vm.fromscheme(w_result) == 64

    assert vm.fromscheme(vm.eval(vm.compile("(apply + '())"))) == 0
    assert_raises(ScmWrongArgType, vm.eval, vm.compile("(apply 1 '(1))"))
    assert_raises(ScmWrongArgType, vm.eval, vm.compile("(apply + 42)"))
Ejemplo n.º 26
0
def test_let():
    vm = schemepy.VM()
    w_global = vm.toscheme(0)
    vm.define("var", w_global)
    w_result = vm.eval(vm.compile("(let ((var 42) (x (+ 2 var))) (+ var x))"))
    assert vm.fromscheme(w_result) == 44
    assert vm.fromscheme(vm.get("var")) == 0

    w_result = vm.eval(
        vm.compile("""
        (let ((x (lambda () 1)))
            (let ((y (lambda () (x)))
                  (x (lambda () 2))) (y)))"""))
    assert vm.fromscheme(w_result) == 1

    assert_raises(ScmUnboundVariable, lambda x: vm.eval(vm.compile(x)),
                  "(let ((y 0) (x y)) x)")
Ejemplo n.º 27
0
def test_ctx_define():
    vm = schemepy.VM()

    vm.eval(vm.compile("(define v1 42)"))
    assert vm.fromscheme(vm.get("v1")) == 42
    w_num = vm.eval(vm.compile("v1"))
    assert vm.fromscheme(w_num) == 42

    vm.eval(vm.compile("(define v2 2.1)"))
    assert vm.fromscheme(vm.get("v2")) == 2.1

    w_num = vm.eval(vm.compile("(+ 1 v1 v2)"))
    assert vm.fromscheme(w_num) == 45.1

    vm.eval(vm.compile("(define v2 3.1)"))
    w_num = vm.eval(vm.compile("(+ 1 v1 v2)"))
    assert vm.fromscheme(w_num) == 46.1
Ejemplo n.º 28
0
def test_type_predicates():
    vm = schemepy.VM()

    assert vm.fromscheme(vm.eval(vm.compile("(pair? 1)"))) is False
    assert vm.fromscheme(vm.eval(vm.compile("(pair? 'symb)"))) is False
    assert vm.fromscheme(vm.eval(vm.compile("(pair? #f)"))) is False
    assert vm.fromscheme(vm.eval(vm.compile("(pair? '())"))) is False
    assert vm.fromscheme(vm.eval(vm.compile("(pair? '+)"))) is False
    assert vm.fromscheme(vm.eval(vm.compile("(pair? '(1))"))) is True
    assert vm.fromscheme(vm.eval(vm.compile("(pair? (list 1))"))) is True
    assert vm.fromscheme(vm.eval(vm.compile("(pair? (cons 1 2))"))) is True

    assert vm.fromscheme(vm.eval(vm.compile("(procedure? 1)"))) is False
    assert vm.fromscheme(vm.eval(vm.compile("(procedure? 'symb)"))) is False
    assert vm.fromscheme(vm.eval(vm.compile("(procedure? #f)"))) is False
    assert vm.fromscheme(vm.eval(vm.compile("(procedure? '())"))) is False
    assert vm.fromscheme(vm.eval(vm.compile("(procedure? '(1))"))) is False
    assert vm.fromscheme(vm.eval(vm.compile("(procedure? (list 1))"))) is False
    assert vm.fromscheme(vm.eval(
        vm.compile("(procedure? (cons 1 2))"))) is False
    assert vm.fromscheme(vm.eval(vm.compile("(procedure? +)"))) is True
    assert vm.fromscheme(vm.eval(
        vm.compile("(procedure? (lambda () 1))"))) is True

    assert vm.fromscheme(vm.eval(vm.compile("(symbol? 1)"))) is False
    assert vm.fromscheme(vm.eval(vm.compile("(symbol? 'symb)"))) is True
    assert vm.fromscheme(vm.eval(vm.compile("(symbol? #f)"))) is False
    assert vm.fromscheme(vm.eval(vm.compile("(symbol? '())"))) is False
    assert vm.fromscheme(vm.eval(vm.compile("(symbol? '(1))"))) is False
    assert vm.fromscheme(vm.eval(vm.compile("(symbol? (list 1))"))) is False
    assert vm.fromscheme(vm.eval(vm.compile("(symbol? (cons 1 2))"))) is False
    assert vm.fromscheme(vm.eval(vm.compile("(symbol? +)"))) is False
    assert vm.fromscheme(vm.eval(
        vm.compile("(symbol? (lambda () 1))"))) is False

    assert vm.fromscheme(vm.eval(vm.compile("(boolean? 1)"))) is False
    assert vm.fromscheme(vm.eval(vm.compile("(boolean? 'symb)"))) is False
    assert vm.fromscheme(vm.eval(vm.compile("(boolean? #f)"))) is True
    assert vm.fromscheme(vm.eval(vm.compile("(boolean? #t)"))) is True
    assert vm.fromscheme(vm.eval(vm.compile("(boolean? '())"))) is False
    assert vm.fromscheme(vm.eval(vm.compile("(boolean? '(1))"))) is False
    assert vm.fromscheme(vm.eval(vm.compile("(boolean? (list 1))"))) is False
    assert vm.fromscheme(vm.eval(vm.compile("(boolean? (cons 1 2))"))) is False
    assert vm.fromscheme(vm.eval(vm.compile("(boolean? +)"))) is False
    assert vm.fromscheme(vm.eval(
        vm.compile("(boolean? (lambda () 1))"))) is False
Ejemplo n.º 29
0
def test_quasiquote_splicing():
    vm = schemepy.VM()

    w_res = vm.eval(vm.compile("""`(1 2 ,@(list 3 4) 5 6)"""))
    assert vm.fromscheme(w_res) == [1, 2, 3, 4, 5, 6]
    assert_raises(SchemeError, lambda x: vm.eval(vm.compile(x)),
                  "`(,@(list 1 ,@(list 2 3)))")

    w_res = vm.eval(vm.compile("""`(1 2 ,@(list 3 4) . ,(+ 2 3))"""))
    assert vm.type(w_res) is schemepy.types.Cons
    assert vm.fromscheme(w_res).cdr.cdr.cdr.cdr == 5

    w_res = vm.eval(
        vm.compile("""`(( foo  7) ,@(cdr '(c)) . ,(car '(cons)))"""))
    assert vm.type(w_res) is schemepy.types.Cons
    assert vm.fromscheme(w_res).cdr == schemepy.types.Symbol("cons")
    assert vm.fromscheme(w_res).car == [schemepy.types.Symbol("foo"), 7]
Ejemplo n.º 30
0
def test_numerical():
    vm = schemepy.VM()

    w_num = vm.eval(vm.compile("(+)"))
    assert vm.fromscheme(w_num) == 0
    w_num = vm.eval(vm.compile("(+ 4)"))
    assert vm.fromscheme(w_num) == 4
    w_num = vm.eval(vm.compile("(+ 4 -5)"))
    assert vm.fromscheme(w_num) == -1
    w_num = vm.eval(vm.compile("(+ 4 -5 6.1)"))
    assert vm.fromscheme(w_num) == 5.1

    w_num = vm.eval(vm.compile("(*)"))
    assert vm.fromscheme(w_num) == 1
    w_num = vm.eval(vm.compile("(* 4)"))
    assert vm.fromscheme(w_num) == 4
    w_num = vm.eval(vm.compile("(* 4 -5)"))
    assert vm.fromscheme(w_num) == -20
    w_num = vm.eval(vm.compile("(* 4 -5 6.1)"))
    assert vm.fromscheme(w_num) == (4 * -5 * 6.1)

    assert_raises(ScmWrongArgNumber, vm.eval, vm.compile("(/)"))
    w_num = vm.eval(vm.compile("(/ 4)"))
    assert vm.fromscheme(w_num) == 1 / 4.0
    w_num = vm.eval(vm.compile("(/ 4 -5)"))
    assert vm.fromscheme(w_num) == 4 / -5.0
    w_num = vm.eval(vm.compile("(/ 4 -5 6.1)"))
    assert vm.fromscheme(w_num) == (4 / -5.0 / 6.1)

    assert_raises(ScmWrongArgNumber, vm.eval, vm.compile("(-)"))
    w_num = vm.eval(vm.compile("(- 4)"))
    assert vm.fromscheme(w_num) == -4
    w_num = vm.eval(vm.compile("(- 4 5)"))
    assert vm.fromscheme(w_num) == -1
    w_num = vm.eval(vm.compile("(- 4 -5 6.1)"))
    assert vm.fromscheme(w_num) == 4 - (-5) - 6.1

    assert_raises(ScmWrongArgType, vm.eval, vm.compile("(+ 'a)"))
    assert_raises(ScmWrongArgType, vm.eval, vm.compile("(+ 1 'a)"))
    assert_raises(ScmWrongArgType, vm.eval, vm.compile("(- 'a)"))
    assert_raises(ScmWrongArgType, vm.eval, vm.compile("(- 1 'a)"))
    assert_raises(ScmWrongArgType, vm.eval, vm.compile("(* 'a)"))
    assert_raises(ScmWrongArgType, vm.eval, vm.compile("(* 2 'a)"))
    assert_raises(ScmWrongArgType, vm.eval, vm.compile("(/ 'a)"))
    assert_raises(ScmWrongArgType, vm.eval, vm.compile("(/ 1 'a)"))