;-*- Mode: Lisp -*- ;;;; Author: Paul Dietz ;;;; Created: Tue Jul 13 07:01:47 2004 ;;;; Contains: Tests of GET (in-package :cl-test) (deftest get.1 (let ((sym (gensym))) (get sym :foo)) nil) (deftest get.2 (let ((sym (gensym))) (get sym :foo :bar)) :bar) (deftest get.3 (let ((sym (gensym))) (get sym :foo (values :bar nil))) :bar) (deftest get.4 (let ((sym (gensym))) (setf (symbol-plist sym) (list :foo 1 :bar 2 :foo 3)) (values (get sym :foo) (get sym :bar))) 1 2) (deftest get.5 (let ((evaluated nil) (sym (gensym))) (assert (equal (multiple-value-list (setf (get sym :foo) 1)) '(1))) (values (get sym :foo (progn (setf evaluated t) nil)) evaluated)) 1 t) (deftest get.6 (let ((evaluated nil) (sym (gensym))) (assert (equal (multiple-value-list (setf (get sym :foo (progn (setf evaluated t) nil)) 1)) '(1))) (values (get sym :foo) evaluated)) 1 t) ;;; Order of evaluation (deftest get.order.1 (let (a b (i 0) (sym (gensym))) (setf (get sym :foo) t) (values (get (progn (setf a (incf i)) sym) (progn (setf b (incf i)) :foo)) a b i)) t 1 2 2) (deftest get.order.2 (let (a b (i 0) (sym (gensym))) (values (setf (get (progn (setf a (incf i)) sym) (progn (setf b (incf i)) :foo)) t) a b i (get sym :foo) )) t 1 2 2 t) (deftest get.order.3 (let (a b c (i 0) (sym (gensym))) (setf (get sym :foo) t) (values (get (progn (setf a (incf i)) sym) (progn (setf b (incf i)) :foo) (progn (setf c (incf i)) nil)) a b c i)) t 1 2 3 3) (deftest get.order.4 (let (a b c (i 0) (sym (gensym))) (values (setf (get (progn (setf a (incf i)) sym) (progn (setf b (incf i)) :foo) (progn (setf c (incf i)) nil)) t) a b c i (get sym :foo) )) t 1 2 3 3 t) ;;; Error tests (deftest get.error.1 (signals-error (get) program-error) t) (deftest get.error.2 (signals-error (get nil) program-error) t) (deftest get.error.3 (signals-error (get nil nil nil nil) program-error) t) (deftest get.error.4 (check-type-error #'(lambda (x) (get x :foo)) #'symbolp) nil) (deftest get.error.5 (check-type-error #'(lambda (x) (setf (get x :foo) nil)) #'symbolp) nil)