diff tests/automated/hash-table-tests.el @ 398:74fd4e045ea6 r21-2-29

Import from CVS: tag r21-2-29
author cvs
date Mon, 13 Aug 2007 11:13:30 +0200
parents 8626e4521993
children 697ef44129c6
line wrap: on
line diff
--- a/tests/automated/hash-table-tests.el	Mon Aug 13 11:12:06 2007 +0200
+++ b/tests/automated/hash-table-tests.el	Mon Aug 13 11:13:30 2007 +0200
@@ -22,11 +22,11 @@
 ;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 ;; 02111-1307, USA.
 
-;;; Synched up with: not in FSF Emacs.
+;;; Synched up with: Not in FSF.
 
 ;;; Commentary:
 
-;;; Test database functionality
+;;; Test hash tables implementation
 ;;; See test-harness.el
 
 (condition-case err
@@ -37,30 +37,41 @@
      (require 'test-harness))))
 
 ;; Test all combinations of make-hash-table keywords
-(dolist (type `(non-weak weak key-weak value-weak))
-  (dolist (test `(eq eql equal))
-    (dolist (size `(0 1 100))
-      (dolist (rehash-size `(1.1 9.9))
-	(dolist (rehash-threshold `(0.2 .9))
-	  (dolist (data `(() (1 2) (1 2 3 4)))
-	    (let ((ht (make-hash-table :test test
-				       :type type
-				       :size size
-				       :rehash-size rehash-size
-				       :rehash-threshold rehash-threshold)))
+(dolist (test '(eq eql equal))
+  (dolist (size '(0 1 100))
+    (dolist (rehash-size '(1.1 9.9))
+      (dolist (rehash-threshold '(0.2 .9))
+	(dolist (weakness '(nil t key value))
+	  (dolist (data '(() (1 2) (1 2 3 4)))
+	    (let ((ht (make-hash-table
+		       :test test
+		       :size size
+		       :rehash-size rehash-size
+		       :rehash-threshold rehash-threshold
+		       :weakness weakness)))
 	      (Assert (equal ht (car (let ((print-readably t))
 				       (read-from-string (prin1-to-string ht))))))
 	      (Assert (eq test (hash-table-test ht)))
-	      (Assert (eq type (hash-table-type ht)))
 	      (Assert (<= size (hash-table-size ht)))
 	      (Assert (eql rehash-size (hash-table-rehash-size ht)))
-	      (Assert (eql rehash-threshold (hash-table-rehash-threshold ht))))))))))
+	      (Assert (eql rehash-threshold (hash-table-rehash-threshold ht)))
+	      (Assert (eq weakness (hash-table-weakness ht))))))))))
+
+(loop for (fun weakness) in '((make-hashtable nil)
+			      (make-weak-hashtable t)
+			      (make-key-weak-hashtable key)
+			      (make-value-weak-hashtable value))
+  do (Assert (eq weakness (hash-table-weakness (funcall fun 10)))))
 
-(loop for (fun type) in `((make-hashtable non-weak)
-			  (make-weak-hashtable weak)
-			  (make-key-weak-hashtable key-weak)
-			  (make-value-weak-hashtable value-weak))
-  do (Assert (eq type (hash-table-type (funcall fun 10)))))
+(loop for (type weakness) in '((non-weak nil)
+			       (weak t)
+			       (key-weak key)
+			       (value-weak value))
+  do (Assert (equal (make-hash-table :type type)
+		    (make-hash-table :weakness weakness))))
+
+(Assert (not (equal (make-hash-table :weakness nil)
+		    (make-hash-table :weakness t))))
 
 (let ((ht (make-hash-table :size 20 :rehash-threshold .75 :test 'eq))
       (size 80))
@@ -69,6 +80,7 @@
   (Assert (eq 'eq (hash-table-test ht)))
   (Assert (eq 'non-weak (hash-table-type ht)))
   (Assert (eq 'non-weak (hashtable-type ht)))
+  (Assert (eq 'nil (hash-table-weakness ht)))
   (dotimes (j size)
     (puthash j (- j) ht)
     (Assert (eq (gethash j ht) (- j)))
@@ -193,13 +205,13 @@
   ))
 
 ;; Test that weak hash-tables are properly handled
-(loop for (type expected-count expected-k-sum expected-v-sum) in
-  `((non-weak 6 38 25)
-    (weak 3 6 9)
-    (key-weak 4 38 9)
-    (value-weak 4 6 25))
+(loop for (weakness expected-count expected-k-sum expected-v-sum) in
+  '((nil 6 38 25)
+    (t 3 6 9)
+    (key 4 38 9)
+    (value 4 6 25))
   do
-  (let* ((ht (make-hash-table :type type))
+  (let* ((ht (make-hash-table :weakness weakness))
        (my-obj (cons ht ht)))
   (garbage-collect)
   (puthash my-obj 1 ht)
@@ -238,9 +250,9 @@
     (Assert (= v-sum k-sum))))
 
 ;;; Test reading and printing of hash-table objects
-(let ((h1 #s(hashtable  type weak rehash-size 3.0 rehash-threshold .2 test eq data (1 2 3 4)))
-      (h2 #s(hash-table type weak rehash-size 3.0 rehash-threshold .2 test eq data (1 2 3 4)))
-      (h3 (make-hash-table :type 'weak :rehash-size 3.0 :rehash-threshold .2 :test 'eq)))
+(let ((h1 #s(hashtable  weakness t rehash-size 3.0 rehash-threshold .2 test eq data (1 2 3 4)))
+      (h2 #s(hash-table weakness t rehash-size 3.0 rehash-threshold .2 test eq data (1 2 3 4)))
+      (h3 (make-hash-table :weakness t :rehash-size 3.0 :rehash-threshold .2 :test 'eq)))
   (Assert (equal h1 h2))
   (Assert (not (equal h1 h3)))
   (puthash 1 2 h3)
@@ -267,3 +279,7 @@
   (clrhash h2)
   (Assert (equal h1 h2))
   )
+
+;;; Test sxhash
+(Assert (= (sxhash "foo") (sxhash "foo")))
+(Assert (= (sxhash '(1 2 3)) (sxhash '(1 2 3))))