;-*- Mode:     Lisp -*-
;;;; Author:   Paul Dietz
;;;; Created:  Tue Jan 14 05:58:01 2003
;;;; Contains: Tests for BOUNDP

(in-package :cl-test)

(deftest boundp.error.1
  (signals-error (boundp) program-error)
  t)

(deftest boundp.error.2
  (signals-error (boundp 'a 'a) program-error)
  t)

(deftest boundp.error.3
  (check-type-error #'boundp #'symbolp)
  nil)

(deftest boundp.error.4
  (signals-type-error x '(setf car) (boundp x))
  t)

(deftest boundp.error.5
  (signals-type-error x "abc" (boundp x))
  t)

(deftest boundp.error.6
  (signals-type-error x "abc" (locally (boundp x) t))
  t)

;;; See other tests in cl-symbols.lsp

(deftest boundp.1
  (notnot-mv (boundp 't))
  t)

(deftest boundp.2
  (notnot-mv (boundp nil))
  t)

(deftest boundp.3
  (notnot-mv (boundp :foo))
  t)

(deftest boundp.4
  (boundp '#:foo)
  nil)

;;; See 11.1.2.1.1
(deftest boundp.5
  (loop for x in *cl-non-variable-constant-symbols*
        when (boundp x)
        collect x)
  nil)

(deftest boundp.6
  (macrolet ((%m (z) z)) (boundp (expand-in-current-env (%m '#:foo))))
  nil)

(deftest boundp.order.1
  (let ((i 0) x)
    (values
     (boundp (progn (setf x (incf i)) '#:foo))
     i x))
  nil 1 1)

