1.0.14.20: XSET used EQ instead of EQL for comparison
authorNikodemus Siivola <nikodemus@random-state.net>
Tue, 5 Feb 2008 04:09:23 +0000 (04:09 +0000)
committerNikodemus Siivola <nikodemus@random-state.net>
Tue, 5 Feb 2008 04:09:23 +0000 (04:09 +0000)
 * Fix it, and add a test specifically for MEMBER using EQL.

src/code/xset.lisp
tests/type.pure.lisp
version.lisp-expr

index 38a9a2b..dfdf182 100644 (file)
         (size (xset-list-size xset)))
     (if (listp data)
         (if (< size +xset-list-size-limit+)
-            (unless (member elt data :test #'eq)
+            (unless (member elt data :test #'eql)
               (setf (xset-list-size xset) (1+ size)
                     (xset-data xset) (cons elt data)))
-            (let ((table (make-hash-table :size (* 2 size) :test #'eq)))
+            (let ((table (make-hash-table :size (* 2 size) :test #'eql)))
               (setf (gethash elt table) t)
               (dolist (x data)
                 (setf (gethash x table) t))
@@ -82,7 +82,7 @@
 (defun xset-member-p (elt xset)
   (let ((data (xset-data xset)))
     (if (listp data)
-        (member elt data :test #'eq)
+        (member elt data :test #'eql)
         (gethash elt data))))
 
 (defun xset-members (xset)
       (let ((data (xset-data lookup)))
         (map-xset (if (listp data)
                       (lambda (elt)
-                        (when (member elt data :test #'eq)
+                        (when (member elt data :test #'eql)
                           (add-to-xset elt intersection)))
                       (lambda (elt)
                         (when (gethash elt data)
       (map-xset
        (if (listp data)
            (lambda (elt)
-             (unless (member elt data :test #'eq)
+             (unless (member elt data :test #'eql)
                (return-from xset-subset-p nil)))
            (lambda (elt)
              (unless (gethash elt data)
index 07ad60d..1e0b27a 100644 (file)
@@ -387,3 +387,12 @@ ACTUAL ~D DERIVED ~D~%"
                       (typep x (quote fixnum))))))
     (assert (not (funcall f (1+ most-positive-fixnum))))
     (assert (funcall f most-positive-fixnum))))
+
+(with-test (:name (:typep :member-uses-eql))
+  (assert (eval '(typep 1/3 '(member 1/3 nil))))
+  (assert (eval '(typep 1.0 '(member 1.0 t))))
+  (assert (eval '(typep #c(1.1 1.2) '(member #c(1.1 1.2)))))
+  (assert (eval '(typep #c(1 1) '(member #c(1 1)))))
+  (let ((bignum1 (+ 12 most-positive-fixnum))
+        (bignum2 (- (+ 15 most-positive-fixnum) 3)))
+    (assert (eval `(typep ,bignum1 '(member ,bignum2))))))
index 5b3870f..b32441d 100644 (file)
@@ -17,4 +17,4 @@
 ;;; checkins which aren't released. (And occasionally for internal
 ;;; versions, especially for internal versions off the main CVS
 ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"1.0.14.19"
+"1.0.14.20"