2
;;;; Author: Paul Dietz
3
;;;; Created: Fri Nov 28 09:36:58 2003
4
;;;; Contains: Test of MAPHASH
9
(let ((table (make-hash-table)))
10
(loop for i from 1 to 1000 do (setf (gethash i table) (+ i i)))
14
(maphash #'(lambda (k v) (incf s1 k) (incf s2 v)) table))
16
(nil) #.(* 500 1001) #.(* 1000 1001))
19
(let ((table (make-hash-table :test 'equal)))
20
(loop for i from 1 to 1000 do (setf (gethash i table) (+ i i)))
24
(maphash #'(lambda (k v) (incf s1 k) (incf s2 v)) table))
26
(nil) #.(* 500 1001) #.(* 1000 1001))
29
(let ((table (make-hash-table :test 'equalp)))
30
(loop for i from 1 to 1000 do (setf (gethash i table) (+ i i)))
34
(maphash #'(lambda (k v) (incf s1 k) (incf s2 v)) table))
36
(nil) #.(* 500 1001) #.(* 1000 1001))
38
;;; Test that REMHASH on the key being traversed is allowed
41
(let ((table (make-hash-table)))
42
(loop for i from 1 to 1000 do (setf (gethash i table) (+ i i)))
46
(maphash #'(lambda (k v)
47
(incf s1 k) (incf s2 v)
50
s1 s2 (hash-table-count table))))
51
(nil) #.(* 500 1001) #.(* 1000 1001) 0)
54
(let ((table (make-hash-table :test 'equal)))
55
(loop for i from 1 to 1000 do (setf (gethash i table) (+ i i)))
59
(maphash #'(lambda (k v)
60
(incf s1 k) (incf s2 v)
63
s1 s2 (hash-table-count table))))
64
(nil) #.(* 500 1001) #.(* 1000 1001) 0)
67
(let ((table (make-hash-table :test 'equalp)))
68
(loop for i from 1 to 1000 do (setf (gethash i table) (+ i i)))
72
(maphash #'(lambda (k v)
73
(incf s1 k) (incf s2 v)
76
s1 s2 (hash-table-count table))))
77
(nil) #.(* 500 1001) #.(* 1000 1001) 0)
83
(let ((symbols '(a b c d e f g h i j k l m n o p q r s t u v w x y z))
84
(table (make-hash-table :test #'eq)))
85
(loop for sym in symbols
87
do (setf (gethash sym table) i))
91
(maphash #'(lambda (k v)
92
(assert (eq (elt symbols (1- v)) k))
99
(let ((symbols '(a b c d e f g h i j k l m n o p q r s t u v w x y z))
100
(table (make-hash-table :test #'eq)))
101
(loop for sym in symbols
103
do (setf (gethash sym table) i))
107
(maphash #'(lambda (k v)
108
(assert (eq (elt symbols (1- v)) k))
113
(hash-table-count table))))
116
;;; Need to add tests where things are setf'd during traversal
118
(deftest maphash.order.1
119
(let ((i 0) x y dummy
120
(table (make-hash-table)))
123
(maphash (progn (setf x (incf i))
124
#'(lambda (k v) (setf dummy (list k v))))
125
(progn (setf y (incf i))
133
(deftest maphash.error.1
134
(signals-error (maphash) program-error)
137
(deftest maphash.error.2
138
(signals-error (maphash #'list) program-error)
141
(deftest maphash.error.3
142
(signals-error (maphash #'list (make-hash-table) nil) program-error)