(add-tests-with-string-output "error"
  [(error 'foo "here") => ""])


(add-tests-with-string-output "apply error"
  [(let ([f 6])
     (f f)) => ""]
  [(let ([f 6])
     (f (f))) => ""]
  [(1 2 3) => ""]
  [(1 (3 4)) => ""]
  [(let ([f (lambda () (1 2 3))])
     12) => "12\n"]
)

(add-tests-with-string-output "arg-check for fixed-arg procedures"
 [(let ([f (lambda () 12)])
    (f)) => "12\n"]
 [(let ([f (lambda () 12)])
    (f 1)) => ""]
 [(let ([f (lambda () 12)])
    (f 1 2)) => ""]
 [(let ([f (lambda (x) (fx+ x x))])
    (f)) => ""]
 [(let ([f (lambda (x) (fx+ x x))])
    (f 1)) => "2\n"]
 [(let ([f (lambda (x) (fx+ x x))])
    (f 1 2)) => ""]
 [(let ([f (lambda (x y) (fx* x (fx+ y y)))])
    (f)) => ""]
 [(let ([f (lambda (x y) (fx* x (fx+ y y)))])
    (f 2)) => ""]
 [(let ([f (lambda (x y) (fx* x (fx+ y y)))])
    (f 2 3)) => "12\n"]
 [(let ([f (lambda (x y) (fx* x (fx+ y y)))])
    (f 2 3 4)) => ""]
) 
 
(add-tests-with-string-output "arg-check for var-arg procedures"
 [(let ([f (lambda x x)])
    (f)) => "()\n"]
 [(let ([f (lambda x x)])
    (f 'a)) => "(a)\n"]
 [(let ([f (lambda x x)])
    (f 'a 'b)) => "(a b)\n"]
 [(let ([f (lambda x x)])
    (f 'a 'b 'c)) => "(a b c)\n"]
 [(let ([f (lambda x x)])
    (f 'a 'b 'c 'd)) => "(a b c d)\n"]
 
 [(let ([f (lambda (x . rest) (vector x rest))])
    (f)) => ""]
 [(let ([f (lambda (x . rest) (vector x rest))])
    (f 'a)) => "#(a ())\n"]
 [(let ([f (lambda (x . rest) (vector x rest))])
    (f 'a 'b)) => "#(a (b))\n"]
 [(let ([f (lambda (x . rest) (vector x rest))])
    (f 'a 'b 'c)) => "#(a (b c))\n"]
 [(let ([f (lambda (x . rest) (vector x rest))])
    (f 'a 'b 'c 'd)) => "#(a (b c d))\n"]
 
 [(let ([f (lambda (x y . rest) (vector x y rest))])
    (f)) => ""]
 [(let ([f (lambda (x y . rest) (vector x y rest))])
    (f 'a)) => ""]
 [(let ([f (lambda (x y . rest) (vector x y rest))])
    (f 'a 'b)) => "#(a b ())\n"]
 [(let ([f (lambda (x y . rest) (vector x y rest))])
    (f 'a 'b 'c)) => "#(a b (c))\n"]
 [(let ([f (lambda (x y . rest) (vector x y rest))])
    (f 'a 'b 'c 'd)) => "#(a b (c d))\n"]
) 


;;; (add-tests-with-string-output "arg-check for primitives" 
;;;   [(cons 1 2 3) => ""]
;;;   [(cons 1) => ""]
;;;   [(vector-ref '#() 1 2 3 4) => ""]
;;;   [(vector-ref) => ""]
;;;   [(vector) => "#()\n"]
;;;   [(string) => "\"\"\n"]
;;; )